librtmp 是开源项目rtmpdump的一个子模块,官网:http://rtmpdump.mplayerhq.hu/,librtmp库封装了rtmp协议,可以用于rtmp推流/拉流,编译rtmpdump 需要用到openssl,zlib第三方库,下面分步骤介绍。
可以直接从官网页面的git库获取,也可以在http://rtmpdump.mplayerhq.hu/download/ 下载,选择最新的rtmpdump-2.3.tgz,下载并解压。带有windows的是已经编译好的,包里面有rtmpdump.exe等,可以直接使用。
VS2017 新建一个Dll工程
去掉预编译头
工程建立完成后,移除dllmain.cpp,将librtmp目录下的所有文件添加到工程下(编译库只需要librtmp目录),在项目路径下添加include,lib目录,设置好包含目录和库目录。
添加好文件后,在项目属性->C/C++->预处理器添加以下定义,
_CRT_SECURE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS
ZLIB_WINAPI
项目属性->链接器->输入->附加依赖项添加以下依赖性。
libeay32.lib
ssleay32.lib
zlibwapi.lib
ws2_32.lib
winmm.lib
下载zlib, http://www.zlib.net/zlib-1.2.11.tar.gz,解压进入contrib\vstudio\vs14,双击zlibvc.sln 打开进行编译,编译完成后,将
生成的lzlibwapi.lib文件拷贝到工程路径下的lib目录,头文件zconf.h、zlib.h,放在include目录。
下载编译好的openssl:https://slproweb.com/products/Win32OpenSSL.html,这里我用的是别人编译好的openssl,openssl编译也是一个坑。我选的是OpenSSL v1.0.2u,高版本的OpenSSL没有libeay32.lib、ssleay32.lib,名字已经发生改变! 安装完成后拷贝openssl的头文件,dll和lib文件到项目工程下。
报错大概如下
修改点:
1、 rtmp.c strdup 386行处 改为_strdup
2、strcasecmp报错,在rtmp_sys.h 添加以下宏定义,用_stricmp代替strcasecmp
#define strcasecmp _stricmp
#define strncasecmp _strnicmp
3、netstackdump、netstackdump_read报错是因为没有声明该变量,可以直接Release,也可以在合适的地方声明或者注释掉相关代码。
4、重新编译,完成。
参考链接:https://blog.csdn.net/KayChanGEEK/article/details/103702359