Nginx+FFmpeg实现RTSP转RTMP

本次转流采用Centos+Nginx+FFmpeg实现,具体实现如下:

1. 安装Ngxin

安装详细略(可以选择安装阿里的Tengine,官方[下载路径](Download - The Tengine Web Server (taobao.org)) )

2. 安装Nginx Rtmp模块

nginx默认不支持rtmp流的转换,需要通过第三方扩展模块来实现转流。

2.1 查看 # 查看当前Nginx的编译安装使用了那些模块 /usr/local/nginx/sbin/nginx -V [root@otwb-app03-uat //]# /usr/local/nginx/sbin/nginx -V Tengine version: Tengine/2.3.1 nginx version: nginx/1.16.0 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) built with OpenSSL 1.1.1a 20 Nov 2018 TLS SNI support enabled configure arguments: --with-http_ssl_module

可以看出编译安装使用了configure arguments:--with-http_ssl_module 模块,还没有rtmp的模块。

2.2 安装 # 获取 wget https://github.com/arut/nginx-rtmp-module/archive/master.zip # 解压 unzip master.zip # 进入Nginx的解压(源文件)目录,不是执行目录 cd /u01/nginx/tengine-2.3.1 # 增加下载好的模块,将上面查询的arguments复制下来,加上: --add-module=http://www.likecs.com/home/work/software/nginx-rtmp-module-master,(注意模块的路径) # 执行以下命令 ./configure --with-http_ssl_module --add-module=http://www.likecs.com/home/work/software/nginx-rtmp-module-master # 接着执行make命令 注意:千万不要make install make # 替换nginx的执行文件,上面编译之后执行文件已经改变了,需要将修改后的替换当前系统的nginx执行文件 # 进入nginx执行目录 cd /usr/local/nginx/sbin/nginx # 备份 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak # 替换,从安装tengine的解压目录中objs中复制到系统执行目录 cp /u01/nginx/tengine-2.3.1/objs/nginx /usr/local/nginx/sbin/nginx # 重启nginx,查看,configure arguments已经多了rtmp的模块了。 /usr/local/nginx/sbin/nginx -V [root@otwb-app03-uat //]# /usr/local/nginx/sbin/nginx -V Tengine version: Tengine/2.3.1 nginx version: nginx/1.16.0 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) built with OpenSSL 1.1.1a 20 Nov 2018 TLS SNI support enabled configure arguments: --with-http_ssl_module --add-module=http://www.likecs.com/u01/nginx/nginx-rtmp-module-master 2.3 修改Nginx配置文件

修改nginx配置文件,添加如下内容并重新载入配置文件,rtmp标签和http同级

rtmp { # 第一个转流地址 server { listen 1935; #监听的端口号 application hik01 { #自定义的名字 live on; } } # 第二个转流地址 server { listen 1936; #监听的端口号 application hik02 { #自定义的名字 live on; } } # 第N个转流地址 server { listen xxxx; #监听的端口号 application xxxx { #自定义的名字 live on; } } }

修改之后reload nginx文件。没问题即可下一步。

3. 安装FFmpeg 3.1 安装FFmpeg需要先安装其依赖:yasm yum install yasm -y

也可以从[官网](Download - The Yasm Modular Assembler Project (tortall.net))源码安装

# 源码安装方式 # 编译 ./configure # 安装 make && make install 3.2 安装FFmpeg # 获取 wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2 # 解压 tar -xjvf ffmpeg-4.1.tar.bz2 # 查看 cd ffmpeg-4.1 # 编译 ./configure # 安装 make && make install 4. 测试验证 4.1 启用ffmpeg进行推流

以下命令需要修改rtsp流地址,rtmp地址以服务器实际配置为准,其他命令暂时复制即可。

-rtsp_transport tcp 是将默认的udp协议转为tcp协议,可以一定程度上解决花屏(丢包)的问题。

详细的命令介绍,请看附录1

# 命令 ffmpeg -rtsp_transport tcp -i [rtsp流地址] flv -r 25 -s 1920*1080 -an [转换后的rtmp流地址] # 实例 ffmpeg -rtsp_transport tcp -i rtsp://admin:123456@192.168.00.00 -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/hik01/ # 后台运行,在命令前加nohup,后加 & nohup ffmpeg -rtsp_transport tcp -i rtsp://admin:123456@192.168.00.00 -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/hik01/ &

image-20210114120033159

4.2 利用VLC等视频工具验证rtmp流是否可用,VLC[下载](Downloads - VideoLAN)

image-20210114120614452

image-20210114120635212

image-20210114120736334

5. 网页端展示

https://github.com/pyuancheng/rtmpShow.git

附录1 FFmpeg命令参数详解 压缩视频 ffmpeg -i pingcap-intro-converted.mp4 -b:v 64k -r 20 -c:v libx264 -s 640x320 -strict -2 pingcap.mp4 获取封面 ffmpeg -ss 00:00:10 -i test1.flv -f image2 -y test1.jpg 屏幕类型 普屏4:3 320*240 640*480 宽屏16:9 480*272 640*360 672*378 720*480 1024*600 1280*720 1920*1080

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzdzx.html