【Android RTMP】RTMPDumb 源码导入 Android Studio ( 交叉编译 | 配置 CMakeList.txt 构建脚本 )





安卓直播推流专栏博客总结



Android RTMP 直播推流技术专栏 :


0 . 资源和源码地址 :


1. 搭建 RTMP 服务器 : 下面的博客中讲解了如何在 VMWare 虚拟机中搭建 RTMP 直播推流服务器 ;

2. 准备视频编码的 x264 编码器开源库 , 和 RTMP 数据包封装开源库 :

3. 讲解 RTMP 数据包封装格式 :

4. 图像数据采集 : 从 Camera 摄像头中采集 NV21 格式的图像数据 , 并预览该数据 ;

5. NV21 格式的图像数据编码成 H.264 格式的视频数据 :

6. 将 H.264 格式的视频数据封装到 RTMP 数据包中 :

7. 阶段总结 : 阿里云服务器中搭建 RTMP 服务器 , 并使用电脑软件推流和观看直播内容 ;

8. 处理 Camera 图像传感器导致的 NV21 格式图像旋转问题 :

9. 下面这篇博客比较重要 , 里面有一个快速搭建 RTMP 服务器的脚本 , 强烈建议使用 ;

10. 编码 AAC 音频数据的开源库 FAAC 交叉编译与 Android Studio 环境搭建 :

11. 解析 AAC 音频格式 :

12 . 将麦克风采集的 PCM 音频采样编码成 AAC 格式音频 , 并封装到 RTMP 包中 , 推流到客户端 :








一、 RTMP 协议



RTMP 协议 : RTMP 协议是基于 TCP 协议实时消息传输协议 ( Real Time Messaging Protocol ) ;


① 协议层级 :

  • 应用层协议 : RTMP 协议与 HTTP 协议都是 TCP/IP 四层网络协议中的应用层协议 ;
  • 传输层协议 : TCP 和 UDP 是传输层协议 ;

② 协议传输数据类型 : 该协议可以传输音频 , 视频 , 数据 , 是开放性的协议 ;

③ 协议端口 : RTMP 协议默认端口 1935 , HTTP 协议默认端口 80 ;

④ 协议应用场景 : 国内的斗鱼 , 虎牙 , 等直播平台都使用该协议 ;

⑤ 协议开发者 : RTMP 是 Adobe 公司开发的 , 感谢 Adobe 公司对公益事业的支持 ;





二、 RTMP 协议使用



RTMP 协议使用 :


① RTMP 协议报文 : 该协议有规定的报文格式 , 传输时先按照格式打包 , 使用时先解包 , 再使用 ;

② 自己开发 RTMP 协议 ( 不推荐 ) : 可以自己根据报文格式 , 自己封装 RTMP 包数据 , 然后使用 TCP 协议进行传输 ;

③ 使用 RTMPDump 库 : 该库是使用 C 语言开发的处理 RTMP 数据的开源工具包 ;





三、 RTMPDump 源码下载



RTMPDump 下载 :


① 下载地址 : RTMPDump 可以在 RTMPDump 主页 查看该项目的情况 , 也可以在 RTMP下载界面 进行下载 ; 我整理了所有 RTMP 相关的资源 , 也可以在 CSDN 下载中下载 ;

② 源码下载地址 : 这里推荐下载最后一个 rtmpdump-2.3.tgz ;

③ 使用方法 : 目前的开发方法是将上述源码放在 AndroidStudio 的 cpp 目录下 , 然后进行交叉编译 , 在 NDK 中调用先关函数 ;

④ 关于 Android 库的说明 : 其中有 rtmpdump-2.3-android.zip 中只有相关的库 , 没有源码 , 不推荐使用 ;

在这里插入图片描述





四、 RTMPDump 源码交叉编译



1 . RTMPDump 交叉编译函数库 : 使用 make CROSS_COMPILE=arm-none-linux- INC=-I/my/cross/includes 命令 , 可以交叉编译出 ARM 架构的函数库 ( a 静态库 / so 动态库 )

INC 参数 : 指的是传递给 gcc 编译器的参数 ,

# 这是 
You can cross-compile for other platforms using the CROSS_COMPILE variable:

  $ make CROSS_COMPILE=arm-none-linux- INC=-I/my/cross/includes




五、 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 ;





八、 GitHub 项目地址



GitHub 地址 : han1202012 / RTMP_Pusher

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值