FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流

《FFmpeg开发实战:从零基础到短视频上线》一书的"10.2.2 FFmpeg向网络推流"介绍了轻量级流媒体服务器MediaMTX,虽然MediaMTX使用很简单,可是不能满足复杂的业务需求,故而实际应用中需要引入专业的流媒体服务器。
nginx-rtmp是开源WEB服务器Nginx可增强的第三方rtmp模块,该模块封装了rtmp服务器,可以提供简单的rtmp流媒体服务器功能。由于Nginx本身是个高性能的WEB服务器,支持代理分发多种协议的数据,因此通过Nginx集成RTMP服务器也是个可行的方案。Nginx默认没开启rtmp模块,需要在编译nginx时添加rtmp模块,还要修改配置文件才能开启rtmp服务。
因为nginx+rtmp在Windows环境的编译过程非常麻烦,不但要考虑各种依赖包的版本兼容问题,还要注意MSYS与Visual Studio命令行的切换问题,所以这里只讲述如何在Linux环境给Ngixn集成rtmp模块,详细的集成步骤说明如下。

一、准备Nginx和nginx-rtmp-module的源码

Nginx的官网地址是https://nginx.org/,下载页面为https://nginx.org/en/download.html,最新版本为2024年4月发布的nginx-1.26.0,该版本的源码包下载链接为https://nginx.org/download/nginx-1.26.0.tar.gz。

nginx-rtmp-module的源码托管地址是https://github.com/arut/nginx-rtmp-module,各版本的下载页面为https://github.com/arut/nginx-rtmp-module/tags,最新版本为2024年4月发布的nginx-rtmp-module-1.2.2,该版本的源码包下载链接为https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.2.tar.gz。

以上源码包下载完毕后,把它们上传到Linux服务器的/usr/local/src目录下,后续将在该目录解压这些源码包。

二、编译与安装Nginx(包含集成rtmp模块)

登录Linux服务器,依次执行下列的解压命令,分别解压nginx-rtmp-module、nginx等等的源码包。

复制代码
cd /usr/local/src
tar zxvf nginx-rtmp-module-1.2.2.tar.gz
tar zxvf nginx-1.26.0.tar.gz

接着进入nginx源码目录,执行以下命令配置nginx。

复制代码
cd nginx-1.26.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=../nginx-rtmp-module-1.2.2

配置完毕,执行以下命令编译nginx。

复制代码
make -j4

编译完毕,执行以下命令安装nginx。

复制代码
make install

三、启动Nginx的RTMP服务

打开nginx安装路径下的conf/nginx.conf,在文件末尾添加下面的rtmp配置,指定rtmp协议监听的端口号和服务名。

复制代码
rtmp {
    server {
        # rtmp协议的端口号
        listen 1935;
        # rtmp协议的服务名
        application live {
            live on;
        }
    }
}

添加完毕,保存nginx.conf并退出。然后运行下面命令启动nginx。

复制代码
cd /usr/local/nginx/sbin
./nginx

四、检查nginx-rtmp是否正常运行

下面通过ffmpeg把视频文件向rtmp服务推流,也就是通过下面命令向rtmp://127.0.0.1/live/test推流视频文件。有关ffmpeg的详细用法参见《FFmpeg开发实战:从零基础到短视频上线》一书,这里不再赘述。

复制代码
ffmpeg -re -stream_loop -1 -i "/usr/local/src/test/2018s.mp4" -vcodec h264 -f flv rtmp://127.0.0.1/live/test

然后启动电脑上的流媒体播放器VLC media player,打开网络串流"rtmp://xxx.xxx.xxx/live/test",可见VLC media player正常播放来自rtmp链接的直播视频,说明nginx-rtmp服务正确实现了rtmp协议的流媒体传输功能。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

相关推荐
昨日之日20061 小时前
LatentSync V8版 - 音频驱动视频生成数字人说话视频 更新V1.6版模型 支持50系显卡 支持批量 一键整合包下载
人工智能·音视频
知舟不叙3 小时前
基于OpenCV实现视频运动目标检测与跟踪
opencv·目标检测·目标跟踪·音视频
allnlei5 小时前
修改FFMpeg的日志函数av_log,使其在记录日志时能显示调用该函数的位置(文件名和行号)
ffmpeg
sukalot6 小时前
window 显示驱动开发-处理视频帧
驱动开发·音视频
Sherlock Ma7 小时前
Seedance:字节发布视频生成基础模型新SOTA,能力全面提升
人工智能·深度学习·计算机视觉·aigc·音视频·扩散模型·视频生成
Everbrilliant8910 小时前
音视频之H.264/AVC编码器原理
音视频·h.264·h.264编解码·h.264帧内预测·h.264帧间预测·h.264的sp/si帧技术·h.264码率控制
s_little_monster10 小时前
【Linux开发】海思摄像头内部视频处理模块
linux·运维·经验分享·学习·音视频·嵌入式开发·海思
邪恶的贝利亚19 小时前
从基础到实战-rmpt to webrtc
c++·webrtc·rtmp·流媒体
vfvfb19 小时前
视频音频去掉开头结尾 视频去掉前n秒后n秒 电视剧去掉开头歌曲
音视频·批量去掉视频开头·批量去掉崇·去掉mp3开头几秒·批量去掉视频结尾歌曲
Coovally AI模型快速验证20 小时前
SLAM3R:基于单目视频的实时密集3D场景重建
神经网络·算法·3d·目标跟踪·音视频