RTMP 协议 : RTMP 协议是基于 TCP 协议的实时消息传输协议 ( Real Time Messaging Protocol ) ;
① 协议层级 :
② 协议传输数据类型 : 该协议可以传输音频 , 视频 , 数据 , 是开放性的协议 ;
③ 协议端口 : RTMP 协议默认端口 1935 , HTTP 协议默认端口 80 ;
④ 协议应用场景 : 国内的斗鱼 , 虎牙 , 等直播平台都使用该协议 ;
⑤ 协议开发者 : RTMP 是 Adobe 公司开发的 , 感谢 Adobe 公司对公益事业的支持 ;
RTMP 协议使用 :
① RTMP 协议报文 : 该协议有规定的报文格式 , 传输时先按照格式打包 , 使用时先解包 , 再使用 ;
② 自己开发 RTMP 协议 ( 不推荐 ) : 可以自己根据报文格式 , 自己封装 RTMP 包数据 , 然后使用 TCP 协议进行传输 ;
③ 使用 RTMPDump 库 : 该库是使用 C 语言开发的处理 RTMP 数据的开源工具包 ;
RTMPDump 下载 :
① 下载地址 : RTMPDump 可以在 RTMPDump 主页 查看该项目的情况 , 也可以在 RTMP下载界面 进行下载 ; 我整理了所有 RTMP 相关的资源 , 也可以在 CSDN 下载中下载 ;
② 源码下载地址 : 这里推荐下载最后一个 rtmpdump-2.3.tgz ;
③ 使用方法 : 目前的开发方法是将上述源码放在 AndroidStudio 的 cpp 目录下 , 然后进行交叉编译 , 在 NDK 中调用先关函数 ;
④ 关于 Android 库的说明 : 其中有 rtmpdump-2.3-android.zip 中只有相关的库 , 没有源码 , 不推荐使用 ;
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
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 目录下 ;
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} )
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 ;
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有