通过2天的努力终于把 RTMPDump 成功的移植到android上了。
下面简要移植过程:
首先创建工程目录如下图
下载rtmpdump源码
git clone git://git.ffmpeg.org/rtmpdump
进入的 rtmpdump 项目下的 librtmp目录下,我们只需要一下几个文件
将上图显示文件拷贝的工程目录librtmp/src下。
由于rtmpdump依赖于第三方库OpenSSL 和 zlib,我们下载openss源码放到 工程目录 librtmp/thrid_party/android/目录下
我用的OpenSSL是在linphone for android 里得到的,它已经是ndk可编译过的了 ,你也可以上官网上下载。
也可以上https://github.com/openssl/openssl 自行下载移植到android上,着里就不说了。
由于ndk 能很好的支持zlib库,所以zlib库就可以直接拿来用了。
下面开始编写Makefile 文件
进入的工程目录 librtmp/build/android/ jni 下
创建一个Application.mk 和一个 Android.mk 文件
Application.mk 如下书写
APP_PROJECT_PATH 指定应用工程目录 ,也就是 librtmp/build/android 目录
APP_MODULES 指明生成的应用模块名 这里指明为 librtmp 如果不写这一句 将无法生成librtmp.a静态库(ndk 编译 一闪而过 什么都没生成),生成动态库不用添加,不知道为啥??
openssl-build-dir 和 librtmp-build-dir 定义两个变量,指明 OpenSSL 和 librtmp的 构建目录
APP_BUILD_SCRIPT 指明要执行的Android.mk 文件
Application.mk写完后,该写jni目录下的Android.mk 文件了,也就是 Application.mk文件中 APP_BUILD_SCRIPT指定的那个Android,mk文件
Android.mk 书写如下
分别 引用 OpenSSL 的Android.mk 文件,和 rtmpdump 的 Android.mk文件
OpenSSL中的 Android.mk文件已经写好了,我们直接用就行了。
我们需要自己编写rtmpdump的Android.mk文件
进入 librtmp/src目录下 创建Android.mk文件
书写如下:
LOCAL_MODULE 指明模块名称 librtmp
LOCAL_C_INCLUDES 和 LOCAL_SRC_FILES 分别指明所用的 头文件 和 源文件
前面说过ndk 支持zlib库 ,所以在这里把它引入 LOCAL_LDLIBS := -lz,如果不加这行编译会报错,有一些zlib库函数没有定义。
LOCAL_SHARED_LIBRARIES := liblincrypto liblinssl 指明用到的openssl 的动态库,这两个动态库是在执行include $(openssl-build-dir)/Android.mk时生成的
好了现在大功告成,回到librtmp/build/android目录下 执行ndk-build命令
报如下错误
需要指定 NDK_PROJECT_PATH 的路径
执行如下命令 :
NDK_PROJECT_PATH 后面的 那个.代表当前目录,即 librtmp/build/android 目录
ndk开始编译,过一会就编译完了,这时在librtmp/build/android 目录下又生成里两个文件夹
libs 和 obj 如下图
libs里存放了 openssl 生成的 liblincrypto.so 和 liblinssl.so
obj里存放了 rtmpdump 生成的librtmp.a
当然 要想生成动态的librtmp.so的话 在前面的Android.mk里指定生成动态库,这样的话librtmp.so也会生成在libs里
最后工程的整体目录为: