最近在做将ffmpeg移植到Android上的工作,主要目的是使用ffmpeg解码和多种协议的支持能力,播放http传输的流。当然porting的介绍网上很多了,而且我也没有做这个工作,我就介绍一下我遇到的几个小问题吧。
1,生成config.h文件之后,不要忘记将其中的#define restrict restrict改为#define restrict否则编译不过,由于arm的编译器不支持restrict关键字
2,需要加入http的支持,本来以为在configure中加入--enable-procotal=http即可,但是并没有将http编译进入,那么就更改config.h及config.mak中关于http的相关宏,使其enable即可。http的代码在avformat模块的http.c中。
3,在ffmpeg的代码中加入android的log支持即c/c++代码的log支持,这个网上也有很多介绍。基本就是如下:
#include <android/log.h>
#define LOG_TAG ""yourmodule""
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,__VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_
#define LOGW(...) __android_log_print(ANDROID_
#define LOGE(...) __android_log_print(ANDROID_
4,还有就是需要调试http的stream,如果使android emulator访问到我的开发机哪,后来发现使用10.0.2.2这个IP即可,原理emulator有个机制,会将10.0.2.2映射到开发机,具体可以参见文档Android Emulator -- Network Address Space。
http播放并没有调试成功,先共享这些内容吧。
2011-11-12
想要支持http协议光enable http还不行,在configure中可以看到,http还依赖tcp,所以还需要把tcp enable,这样就可以了。
2011-11-17
还得补充一下,android的应用程序要想访问网络需要进行一下设置的。
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
编译ffmpeg也可以不用那么费事,可以借鉴Rockplayer项目的成果,直接使用Rockplayer中的 build_andriod.sh ,当然编译出来的ffmpeg.so要在android项目中引用还需要一点工作,具体我在其他的地方介绍。点击打开链接