Mac环境编译rtmpdump
本文最后更新于:2025年4月9日 下午
前言
最近一直在学习流媒体的 rtmp 协议,想结合 librtmp 的源码看下协议具体实现,但下载后 make 发现各种问题,而且项目里没有 configure 和 cmake,只有一个 Makefile,所以又补习了 Makefile 的常用写法,这个Makefile教程相当不错,可以当做小手册来查。
踩坑开始
首先准备 github 环境,将 rtmpdump 工程 clone 到本地 https://github.com/mstorsjo/rtmpdump
git clone git@github.com:mstorsjo/rtmpdump.git
工程目录很简单,源代码文件很少,文件夹层级只有两层,librtmp 文件夹是 librtmp.a 库的源码文件,rtmpdump 根目录下是 rtmp 命令行工具的源码文件。
1 | |
文件夹首层和 librtmp 文件夹内都有一个 Makefile,这是个嵌套结构,一般只需要在根目录 make 即可,会先编译 librtmp.a 再编译命令行工具。
查看 github 的 readme.md 发现,mac 环境编译需要携带参数 SYS=darwin,然后我们开始编译:
make SYS=darwin
但运行后报错,无法找到openssl:
1 | |
查看 Makefile 发现是编译 librtmp 所需的 rtmp.c 中引用了 openssl,并且在编译时找不到链接库。openssl 是我用 brew install 安装的,并不在系统默认的目录下,而且 rtmpdump 是很久之前的代码,新版本的 openssl 会有兼容性问题,所以建议到官网下载 openssl 历史版本,这里用的是 openssl 0.9.8x。
下载好 openssl 之后进入到根目录,之后配置 configure 并 make:
./configure darwin64-x86_64-cc no-shared
make
查看 librtmp 文件夹内的 Makefile 文件发现有两个变量可以在调用 make 时将 openssl 的头文件和库文件的路径索引传进来,因此 cd 回 rtmpdump 根目录重新 make,将刚刚编译好的 openssl 的路径传递进来:
make SYS=darwin XCFLAGS='-I/Users/workspace_sun/Downloads/openssl-0.9.8x/include' XLDFLAGS='-L/Users/workspace_sun/Downloads/openssl-0.9.8x'
这次没有再报错了,有几个 warning 不知道是否会影响使用,但 librtmp.a 已经编译出来了,rtmpdump 根目录也多了4个可执行文件:rtmpdump、rtmpgw、rtmpsrv、rtmpsuck
结语
至此 Mac 平台的 rtmpdump 就编译好了,虽然很过程不太顺利,但也学到了 Makefile 的一些常用语法,不过手写起来确实不是很方便,如果是我我应该会选cmake。。。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!