Title:海康NVR设备RTSP协议转RTMP协议
Date: 2017-10-17
Author: kagula
环境:
[1]海康NVR设备 型号为DS-7808N-E2/8P
[2]CentOS7
[3]Chrome 61.0.3163.79
[4]Safari 5.1.7
内容概要
海康NVR设备上的RTSP协议转RTMP协议,Chrome等浏览器上就能直接看海康威视视频。
本文分为三个部份:Nginx配置和安装,ffmpeg配置和安装,运行和测试。
内容
第一部份:Nginx的安装、配置和使用
[1-1]nginx-rtmp-module模块
为了增加对rtmp的支持,下载nginx-rtmp-module解压到/root/download/nginx-rtmp-module
配置和编译nginx的时候要用到。
[1-2]安装nginx的依赖
yum -y install openssl openssl-devel
yum -y install pcre-devel
[1-3]下载nginx-1.10.3.tar.gz源码包并解压
进入到nginx解压路径后,使用下面的命令配置nginx及其module
./configure –prefix=/usr/local/nginx –add-module=/root/download/nginx-rtmp-module –with-http_ssl_module
[1-4]编译并安装
make
make install
[1-5]配置nginx对rtmp的支持
vim /usr/local/nginx/conf/nginx.conf
加入下面的配置
rtmp {
server {
listen 1935;
application hls {
live on;
hls on;
hls_path /tmp/hls;
hls_fragment 1s;
#hls_playlist_length 3s;
}
}
}
live on; 开启实时
hls on; 开启hls
hls_path;
http://xxx/hls這個地址可以用來推流和拉流,其中xxx是你的ip地址或域名。
它会被映射到/tmp/hls本地路径下。
ts文件存放路径,使用绝对路径
hls_fragment 5s; 每个TS文件包含5秒的视频内容
[1-6]启动nginx
/usr/local/nginx/sbin/nginx
启动时可能会遇到端口占用的问题,如果之前nginx已经启动了,先把进程停止
nginx -s quit
如果nginx起来后,修改了配置文件
使用/usr/local/nginx/sbin/nginx -s reload重启nginx服务
[1-7]检查服务是否已经启动
netstat -ntlp
看到1935和80端口已经在侦听状态
第二部份:FFMPEG的安装、配置和使用
[2-1]下載
wget http://ffmpeg.org/releases/ffmpeg-3.4.tar.bz2
然後再解壓縮。
[2-2]安装依赖
yum install nasm
[2-3]安装&配置
配置
./configure –enable-shared –prefix=/usr/local/ffmpeg
make
可能需要几分钟
make install
現在ffmpeg已經被安裝到了/usr/local/ffmpeg路徑下。
添加动态库文件搜索路径
vim /etc/ld.so.conf
把/usr/local/ffmpeg/lib路径添加到ld.so.conf中的最後一行。
使用下面的命令让修改生效
ldconfig
[2-4]使用
使用前先验证rtsp源是否可以播放
可以使用EasyPlayer播放器验证视频源
rtsp://admin:nuoke123456@192.168.2.226:554/Streaming/Channels/101
EasyPlayer可以从下面网址下载
https://github.com/EasyDarwin/EasyPlayer/releases/tag/v2.0.17.0709
确定视频源没问题后使用下面的命令转码
./ffmpeg -f rtsp -rtsp_transport tcp -i rtsp://admin:nuoke123456@192.168.2.226:554/Streaming/Channels/101 -codec copy -f flv -an rtmp://192.168.109.129:1935/hls/test
-f rtsp 输入流是rtsp协议
-rtsp_transport tcp 输入流是tcp协议
-i rtsp://admin:nuoke123456@192.168.2.226:554/Streaming/Channels/101 指定输入流
-f flv 输出流为flv格式
-an rtmp://192.168.109.129:1935/hls/test 指定推送地址
如果推送成功的话/tmp/hls路径下会生成多个tls文件和test.m3u8文件。
第三部份:测试和运行
[1]可以用PotPlayer播放器测试RTMP数据源是否正确
[2]用Chrome、Safari浏览器测试RTMP数据源是否能正确播放
rtmp.html的清单
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="http://vjs.zencdn.net/5.19/video-js.min.css" rel="stylesheet">
<script src="http://vjs.zencdn.net/5.19/video.min.js"></script>
</head>
<body>
<video
id="my-player"
class="video-js"
controls
preload="auto"
data-setup='{}'>
<source src='rtmp://192.168.109.129:1935/hls/test' type='rtmp/flv'/>
</p>
</video>
<script type="text/javascript">
var options = {};
var player = videojs('my-player', options, function onPlayerReady() {
videojs.log('Your player is ready!');
// In this context, `this` is the player that was created by Video.js.
this.play();
// How about an event listener?
this.on('ended', function() {
videojs.log('Awww...over so soon?!');
});
});
</script>
</body>
</html
Jetbrains全家桶1年46,售后保障稳定
必须要放在Web服务器上才能正确运行,本地用chrome打开这个html文件是没用的。
我把它放在了/usr/local/nginx/html路径下,这是我Nginx的document root路径.
使用chrome访问
http://192.168.109.129/rtmp.html可以直接看到视频。
备注
[1]RTSP数据源可以适配到adobe的FMS、Wowza、800li media server。
[2]海康的莹石云,提供RTMP视频流服务!
[3]防火墻打開了1935 tcp端口,rtmp視頻還是不能播放,
可以用下面的命令暫停,
systemctl stop firewalld.service
参数资料
[1]最新海康摄像机、NVR、流媒体服务器、回放取流RTSP地址规则说明
http://blog.csdn.net/xiejiashu/article/details/71786187
[2]EasyDSS流媒体服务器出现no compatible source was found for this media问题的解决
http://blog.csdn.net/xiejiashu/article/details/72371149
扩展阅读
[1]Mac直播服务器Nginx配置对HLS的支持
http://www.cnblogs.com/jys509/p/5653720.html
[2]Ubuntu下使用Python-opencv获取海康威视RTSP码流教程
http://blog.csdn.net/hui3909/article/details/53435379