centos+nginx将大华rtsp视频流转成rtmp,并在web浏览器上直播
未解决的问题:直播视频的清晰度比较低视频有10秒左右的延迟掉帧情况比较严重稳定性不够,ffmpeg推流偶尔会断掉不能同时直播多个摄像头必须要使用flash播放器准备工作:一台linux服务器,我用的是centos7大华的rtsp地址,格式一般是rtsp://username:password@ip:port/cam/realmonitor?channel=1&am...
未解决的问题:
- 直播视频的清晰度比较低
- 视频有10秒左右的延迟
- 掉帧情况比较严重
- 稳定性不够,ffmpeg推流偶尔会断掉
- 不能同时直播多个摄像头
- 必须要使用flash播放器
准备工作:
- 一台linux服务器,我用的是centos7
- 大华的rtsp地址,格式一般是rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
- username:账号
- password:密码
- ip:设备IP地址
- port:端口(默认是554)
- channel:通道
- subtype:码流类型,主码流为0
- rtmp和rtsp测试播放器,我用的是Potplayer
- 大华云台测试工具,下载链接
- video.js播放器测试页面,下载链接
部分内容参考:https://www.jianshu.com/p/4ed63b041bd9
步骤:
使用测试工具测试设备地址和账号密码
使用potplayer测试rtsp
选择打开链接,如果有画面播放,说明rtsp正确
安装git:
yum -y install git
安装OpenSSL
yum -y install openssl openssl-devel
下载nginx-rtmp-module
//创建一个目录用来下载内容
mkdir /temp
//进入目录
cd /temp
//下载模块
git clone https://github.com/arut/nginx-rtmp-module.git
下载和安装nginx
//下载
wget http://nginx.org/download/nginx-1.10.3.tar.gz
//解压
tar -zxvf nginx-1.10.3.tar.gz
//进入目录
cd nginx-1.10.3
添加rtmp和openssl支持
// /temp/nginx-rtmp-module是模块的路径
./configure --add-module=/temp/nginx-rtmp-module --with-http_ssl_module
make && make install
启动nignx
/usr/local/nginx/sbin/nginx
在浏览器打开http://ip,如果出现以下画面,说明nginx这一块已经OK了。
默认是80端口,如果端口没有开放,会显示无法打开网页,打开端口的方法:
//添加端口
firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
//重新载入
firewall-cmd --reload
编辑配置
vi /usr/local/nginx/conf/nginx.conf
//在最下面,括号外面,加入以下内容
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
}
}
}
//保存之后,重启nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
安装EPEL Release
yum install -y epel-release
//检查是否安装成功
yum repolist
安装Nux-Dextop源
//导入code
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
//安装nux-dextop 源
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
安装FFmpeg
yum install -y ffmpeg
//检查是否安装成功
ffmpeg -version
出现以下内容说明安装成功
推流
//请将账号密码等信息替换成你自己的
ffmpeg -re -rtsp_transport tcp -i "rtsp://admin:1234567@172.17.60.3:554/cam/realmonitor?channel=51&subtype=0" -f flv -r 25 -s 1920x1080 -an rtmp://localhost:1935/live/room
//rtmp://localhost:1935/live/room就是最终的rtmp地址,需要将这个值填写到index.html中,注意IP地址要换成centos的IP
验证:
编辑rtmpTest中的index.html,将<source src='rtmp://192.168.137.101:1935/live/room' type='rtmp/flv'/>中的地址改成nginx里配置的地址,也就是上一步的rtmp地址。
PS:记得打开centos中的1935端口
将rtmpTest部署到nginx、iis或者其他web服务器上,部署好之后,打开index页面,可以看到页面上的直播画面
可能会遇到的问题:
//推流时遇到455错误
method PAUSE failed: 455 Method Not Valid in This State
如果使用ffmpeg -i "rtsp://admin:1234567@172.17.60.3:554/cam/realmonitor?channel=1&subtype=0" -vcodec copy -acodec copy -f flv "rtmp://localhost:1935/live/"
这条命令来推流,在Windows上是可行的,但是在centos上会报错,解决方法是用
ffmpeg -re -rtsp_transport tcp -i "rtsp://admin:1234567@172.17.60.3:554/cam/realmonitor?channel=1&subtype=0" -f flv -r 25 -s 1920x1080 -an rtmp://localhost:1935/live/room
感谢https://blog.csdn.net/shitDjango/article/details/88698699提供的方法
//播放时遇到No compatible source was found for this media错误
如果rtmp在potplayer上可以播放,在浏览器中不行的话,可以使用https://blog.csdn.net/cmqwan/article/details/76059703提供的方法解决。
更多推荐
所有评论(0)