FFmpeg 集成rtmpdump

599 阅读2分钟

项目背景介绍

ffmpeg本身也是支持rtmp推流,但是在我的实际开发时候,在调用 avformat_write_header的时候,不能正常发送amf的包,使用wiresharke解析时候,不能正确解析,故决定集成librtmp。

先编译librtmp库

下载rtmpdump代码

git clone git://git.ffmpeg.org/rtmpdump

使用msy2终端,打开目录

关于怎么使用msy2可以参考我前面的博客。这里不再赘述

cd librtmp

image.png

如下结构:

image.png

msy2 安装openssl

pacman -S mingw-w64-x86_64-openssl

修改编译的目标文件的保存位置

修改目录里面的Makefile 文件

image.png

这样编译后的文件,就放到这个目录下

使用librtmp自带的makefile 编译代码

make SYS=mingw make install SYS=mingw

结果

然后就会生成 librtmp.a 和 头文件在 librtmp_install

image.png

ffmpeg里面集成librtmp

关于ffmpeg集成其他它库,比如x264,fdk-aac,前面都有例子,我这前面博客都有过程描述,这里使用同样方法,在前面的基础上增加librtmp这个库

将librtmp_install 拷贝到ffmpeg统计目录

其他的库,也许用不到,你可以自己调整。 拷贝后结构如下:

image.png

编写编译脚本 build-x264-fdk-rtmp.sh

image.png

脚本内容如下:

# 当前目录
basepath=$(cd `dirname $0`;pwd)

# 获取当前目录的上层目录
parent_dir=$(dirname "$(pwd)")

echo ${basepath}

cd ${basepath}

./configure \
--prefix=${basepath}/ffmpeg_install \
--disable-static --enable-shared  \
--disable-asm \
--enable-debug=3 \
--enable-libx264 --enable-gpl \
--enable-nonfree --enable-libfdk-aac \
--enable-librtmp \
--extra-cflags="-I${parent_dir}/x264_install/include -I${parent_dir}/fdkaac-install/include -I${parent_dir}/librtmp_install/include" \
--extra-ldflags="-L${parent_dir}/x264_install/lib -L${parent_dir}/fdkaac-install/lib -L${parent_dir}/librtmp_install/lib" \

make -j4
make install

编译:

image.png

我这个地方报了个错误

image.png

发现报错,找不到librtmp的pkgconfig

我执行一下

export PKG_CONFIG_PATH=/d/ffmpeg/librtmp_install/lib/pkgconfig/:$PKG_CONFIG_PATH

这个目录按照你实际情况来。

然后继续执行,结果:

image.png

image.png

使用库

我的例子里面是把bin目录里面所有的lib拷贝出来,放到工程库下,dll放到执行行程序同目录。librtmp_install/bin 目录下的rtmp的dll也一起拷贝到工程执行程序同目录。

image.png

image.png

7. 其他: