rtmpdump 介绍
RtmpDump是一个开源工具库,使用c代码编写,实现了用RTMP上传音视频流的相关功能
地址
//下载地址
git clone git://git.ffmpeg.org/rtmpdump
官网地址
https://rtmpdump.mplayerhq.hu/
下载后结构如下:
背景
在window环境下,开发rtmp的推拉流,需要使用到rtmp库。选择了rtmpdump,所以我要编译一个librtmp的.lib库给vs依赖使用。
vs版本是2022 rtmpdump版本:
编译过程
1. 创一个静态库的vs工程
下载rtmp的代码到工程目录下面
2. 添加代码
添加头文件
把rtmpdump目录的子文件夹librtmp目录下的.h 文件都添加到头文件筛选器里面
把rtmpdump目录的子文件夹librtmp目录下的.cpp 文件都添进去
3. 解决问题
直接编译会有很多报错,我们一个一个的处理
有几个预处理器定义要添加,如下
NO_CRYPTO
_CRT_NONSTDC_NO_DEPRECATE
_CRT_SECURE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS
- _WINSOCK_DEPRECATED_NO_WARNINGS 预处理定义
添加 _WINSOCK_DEPRECATED_NO_WARNINGS 预处理器定义
- _CRT_SECURE_NO_WARNINGS 预处理定义
- _CRT_NONSTDC_NO_DEPRECATE 预处理定义
- NO_CRYPTO 预处理定义
- rtmp_sys.h 里面报错
注释下面三行
- rtmp.c 里面添加
typedef long off_t;
解决下面错误
4. 编译库
右键工程生成成功后,会生成 StaticLib_RtmpDump.lib 静态库文件
你可以可以通过下面的地方,修改生成的库文件名称
5. 组织库和头文件为一个库文件夹
补充
在引入librmtp库的时候,又出现了两个错误
- 报一些符号解析不到
可以在引入头文件 #include "rtmp.h" 前面加上 #pragma comment(lib, "ws2_32.lib")
- 1>librtmp.lib(rtmp.obj) : error LNK2001: 无法解析的外部符号 netstackdump 1>librtmp.lib(rtmp.obj) : error LNK2001: 无法解析的外部符号 netstackdump_read
这是由于在librtmp的源码 rtmp.c 里面只有
#ifdef _DEBUG
extern FILE *netstackdump;
extern FILE *netstackdump_read;
#endif
这两个对象的前置声明,没有定义
有三种方法解决
- 删掉这一块代码,因为他们是用来debug的
- 编译release版本,就不会有 _DEBUG宏条件了
- 适当位置定义 这两个变量
- 在我这里,直接注释比较合适,
其他
代码仓库地址:
https://github.com/SnailCoderGu/vs_rtmpdump_staticlib.git