使用ffmpeg+Nginx实现rtmp监控转发 学习笔记

使用ffmpeg+Nginx实现rtmp监控转发

某业务需求 要对接到监控画面到系统;由于监控是内网,业务是外网;且监控无法接入外网使用云服务,

临时的解决方案 使用前置机 做转发

下载nginx和nginx-rtmp-module

nginx 使用的是 openresty1.25.31

openresty-1.25.3.1.tar.gz

nginx-rtmp-module

编译安装

官方安装文档

1
2
3
4
5
6
7
8
9
10
11
12
13
tar -xzvf openresty-1.25.3.1.tar.gz
unzip nginx-rtmp-module-1.2.2.zip

yum updete
yum install pcre-devel openssl-devel gcc curl zlib-devel
cd openresty-1.25.3.1
./configure --add-module=../nginx-rtmp-module-1.2.2
make
make install

export PATH=/usr/local/openresty/nginx/sbin:$PATH

nginx -V

显示版本和模块 安装成功

安装 ffmpeg

1
2
3
4
5
6
7
#yum install ffmpeg

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure --disable-x86asm
make
make install

配置

修改 /usr/local/openresty/nginx/conf/nginx.conf 配置 增加下面配置

1
2
3
4
5
6
7
8
9
10
11
rtmp {
server {
listen 1935;
chunk_size 4096;

application live {
live on;
record off;
}
}
}

如果有多路监控 可以 加多个application

测试 启动

1
2
nginx -t
nginx

转码

使用ffmpeg 将海康监控的rtsp流推到nginx

1
ffmpeg -rtsp_transport tcp -rtbufsize 5000000 -i rtsp://user:passwd@172.17.x.x:554/Streaming/Channels/101 -c:v libx264 -c:a acc -f flv rtmp://127.0.0.1:19350/live/v1
  • -rtsp_transport tcp:指定使用 TCP 协议来传输 RTSP 数据,这有助于减少丢包问题。
  • -rtbufsize 5000000:设置输入缓冲区的大小,有助于处理高质量视频流。
  • -i rtsp://172.17.x.x:554/Streaming/Channels/101:输入流的 URL,ip是网络摄像头的ip 101是主流 102是辅流。
  • -c:v libx264:使用 x264 编码器将视频编码为 H.264 格式。
  • -c:a acc:音频编码。
  • -f flv:指定输出格式为 FLV,适合用于 RTMP 流。
  • rtmp://127.0.0.1:1935/live/v1:RTMP 服务器的地址和流名称。

播放视频

防火墙开放1935端口

本机电脑 VLC media player 打开 网络串流 输入 rtmp://外网ip:1935/live/v1 就可以播放了