五、 RTMPDump 源码导入 Android Studio
1 . 将源码导入 Android Studio 项目 : 这里不使用导入上上述函数库的方式 , 而是直接将源码导入 AS 项目中 ;
① 拷贝源码 : RTMPDump 的源码在 rtmpdump-2.3/librtmp 目录中 , 将 rtmpdump-2.3/librtmp 目录中的文件拷贝到 Android Studio 中即可;
② Android Studio 中直接添加源码注意点 : 这里注意 , 不是所有的开源库源码都可以导入到 Android Studio 项目中的 , 开源库源码不能太大 , 如 FFMPEG , 在 Ubuntu 上编译一次很长时间 , 如果将 FFMPEG 源码放在 AS 工程中 , 估计编译一次半小时起步了 , 因此之前的博客中 , 将 FFMPEG 交叉编译成 静态库 , 然后导入到 AS 项目中 ;
③ 文件展示 : 下面截图中是该目录的文件 , 直接将 rtmpdump-2.3/librtmp 整个目录拷贝到 Android Studio 项目中 ;
2 . 拷贝后的 Android Studio 工程 : rtmpdump-2.3/librtmp 拷贝到 src/main/cpp 目录下 ;
六、 Android Studio 配置 RTMPDump 源码 CMakeList.txt
1 . 配置 RTMPDump 源码独立构建脚本 : 导入的 RTMPDump 是一个完整的项目 , 因此这里为 src/main/cpp/librtmp/ 下的 RTMPDump 源码单独配置一个 CMakeList.txt 构建脚本 ;
cmake_minimum_required(VERSION 3.4.1) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_CRYPTO") add_library( # 编译的库的名称是 rtmp rtmp # 编译的 rtmp 库是静态库 STATIC # rtmp 库的源文件 amf.c hashswf.c log.c parseurl.c rtmp.c )
2 . 配置 整体的 CMakeList.txt 构建脚本 :
cmake_minimum_required(VERSION 3.4.1) # 链接 src/main/cpp/librtmp 目录下的构建脚本 add_subdirectory(librtmp) add_library( # 函数库名称 native-lib # 动态库类型 SHARED # 源文件 native-lib.cpp ) find_library( # 日志库 log-lib log ) target_link_libraries( # 链接动态库 native-lib # 编译的 rtmp 静态库 rtmp ${log-lib} )
七、 关闭 RTMP 加密功能
1 . 编译时遇到 fatal error: ‘openssl/ssl.h’ file not found 处理方案 : 点击查看源码 , 发现没有导入 openssl 库 , 宏定义最终进入该分支 , 需要使用 openssl 库 , 现在定义宏定义 , 使当前的宏定义不进入该分支 ;
2 . 关闭 RTMP 加密方法 : 在 rtmp.h 文件中有以下宏定义 , 如果没有定义 NO_CRYPTO 和 CRYPTO 宏 , 就会定义 CRYPTO 宏 , 这里我们定义 NO_CRYPTO 宏 , 即设置不加密 , 就可以屏蔽 openssl 头文件加载了 ;
#if !defined(NO_CRYPTO) && !defined(CRYPTO) #define CRYPTO #endif
3 . 屏蔽整个 CRYPTO 宏定义分支 : 即不定义 CRYPTO 宏 , 不进入整个分支 , 在 CMakeList.txt 中定义
# 取消宏定义 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_CRYPTO")
4 . 编译选项设置 : 只要源文件中存在 cpp 文件 , 就必须使用 CMAKE_CXX_FLAGS , 如果源文件都是 c 文件 , 可以使用 CMAKE_C_FLAGS , 这里 RTMPDump 的源文件都是 C 文件 , 使用 CMAKE_C_FLAGS ;