vim ~/workspace/ffmpeg_Android/jni/android.mk
以下是android.mk的脚本:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/ffmpeg \
$(LOCAL_PATH)
LOCAL_SRC_FILES := h264_decoder.cpp \
ffmpeg_main.cpp
LOCAL_MODULE := ffmpeg_android
include $(BUILD_EXECUTABLE)
编译
cd ~/workspace/ffmpeg_android
ndk-build
出现错误:/opt/android-ndk-r8e/build/gmsl/__gmsl:512: *** non-numeric second argument
解决:将 <uses-sdk android:minSdkVersion="9" /> 添加进文件 AndroidManifest.xml
出现错误:jni/ffmpeg/libavutil/common.h:175:47: error: 'UINT64_C' was not declared in this scope
解决:在 jni/ffmpeg/libavutil/common.h中添加
// add by XXX
#ifndef UINT64_C
#define UINT64_C(value)__CONCAT(value,ULL)
#endif
//-//
最后编译通过,在目录~/workspace/ffmpeg_android/libs/armeabi-v7a/下面会生成android可执行文件ffmpeg_android (实现H264解码的demo程序)
在android设备上运行可执行文件ffmpeg_android
在设备上创建两个目录:
adb shell
su
mkdir /data/ffmpeg
mkdir /data/ffmpeg/ffmpeg_libs
exit
exit
将动态库和可执行文件push进设备对应的目录:
adb push ~/workspace/ffmpeg_android/libs/armeabi-v7a/ffmpeg_android /data/ffmpeg
adb push ~/xbmc-android/tools/android/packaging/xbmc/lib/armeabi-v7a/libavcodec-54-arm.so /data/ffmpeg/ffmpeg_libs
adb push ~/xbmc-android/tools/android/packaging/xbmc/lib/armeabi-v7a/libavfilter-3-arm.so /data/ffmpeg/ffmpeg_libs
adb push ~/xbmc-android/tools/android/packaging/xbmc/lib/armeabi-v7a/libavutil-52-arm.so /data/ffmpeg/ffmpeg_libs
adb push ~/xbmc-android/tools/android/packaging/xbmc/lib/armeabi-v7a/libavformat-54-arm.so /data/ffmpeg/ffmpeg_libs
adb push ~/xbmc-android/tools/android/packaging/xbmc/lib/armeabi-v7a/libswresample-0-arm.so /data/ffmpeg/ffmpeg_libs
adb push ~/xbmc-android/tools/android/packaging/xbmc/lib/armeabi-v7a/libpostproc-52-arm.so /data/ffmpeg/ffmpeg_libs
adb push ~/xbmc-android/tools/android/packaging/xbmc/lib/armeabi-v7a/libswscale-2-arm.so /data/ffmpeg/ffmpeg_libs
将解码测试文件h264_640x480.h264 push进设备
adb push ~/workspace/ffmpeg_android//jni/h264_640x480.h264 /data/ffmpeg
进入设备运行可执行文件:
adb shell
su
cd /data/ffmpeg
./ffmpeg_android
最后在设备的/data/ffmpeg目录下生成解码后的yuv数据文件yuv_640x480.yuv,将yuv_640x480.yuv pull 到PC端
adb pull /data/ffmpeg/yuv_640x480.yuv ~/Desktop/
测试解码后yuv数据
sudo apt-get install mplayer
mplayer -demuxer rawvideo -rawvideo w=640:h=480:format=i420 ~/Desktop/yuv_640x480.yuv -loop 0
注:由于是raw data文件,文件中只包含图像数据,参数需由命令行提供,如width, height和format。
注意format的可选项有:420:yv12 i420
422:yuy2 uyvy
可用如下命令查看mplayer所支持的format
mplayer -rawvideo format=help
-loop 0为循环播放
以上请参考,有什么问题,可以给我留言,谢谢!