在Android平台上如何实现H264解码(3)

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为循环播放 

以上请参考,有什么问题,可以给我留言,谢谢!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/7ed86fa7aa7a9caa99728b651152db94.html