NDK 编译 RTMPDump

通过2天的努力终于把 RTMPDump 成功的移植到android上了。

 下面简要移植过程:

首先创建工程目录如下图

NDK 编译 RTMPDump_第1张图片


下载rtmpdump源码

git clone git://git.ffmpeg.org/rtmpdump


进入的 rtmpdump 项目下的 librtmp目录下,我们只需要一下几个文件


NDK 编译 RTMPDump_第2张图片

将上图显示文件拷贝的工程目录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 如下书写


NDK 编译 RTMPDump_第3张图片

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文件

书写如下:

NDK 编译 RTMPDump_第4张图片

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里


最后工程的整体目录为:


NDK 编译 RTMPDump_第5张图片




你可能感兴趣的:(开源项目编译)