大家好,又见面了,我是你们的朋友全栈君。 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的清单
代码语言:javascript复制<!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
必须要放在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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/234132.html原文链接:https://javaforall.cn