未解决的问题:

  1. 直播视频的清晰度比较低
  2. 视频有10秒左右的延迟
  3. 掉帧情况比较严重
  4. 稳定性不够,ffmpeg推流偶尔会断掉
  5. 不能同时直播多个摄像头
  6. 必须要使用flash播放器

准备工作:

  1. 一台linux服务器,我用的是centos7
  2. 大华的rtsp地址,格式一般是rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
    1. username:账号
    2. password:密码
    3. ip:设备IP地址
    4. port:端口(默认是554)
    5. channel:通道
    6. subtype:码流类型,主码流为0
  3. rtmp和rtsp测试播放器,我用的是Potplayer
  4. 大华云台测试工具,下载链接
  5. 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提供的方法解决。

Logo

更多推荐