浏览器显示RTSP视频的解决方案调研

近期需要在浏览器上显示来自海康威视的RTSP流媒体视频源,本以为是个挺简单的任务,结果调查一圈发现居然无解。

面向旧版浏览器的可行的替代方案有两个:RTSP转RTMP或HLS。其中RTMP需要Flash,现在的技术发展路线下,Flash这种已经被放弃的方案显然不能要,那就只剩一个RTSP->HLS了。

具体一点讲,实践过可行的是这么个路线:
1、ffmpeg : RTSP -> HLS (  m3u8文件 + 若干ts视频缓存文件 ),实时进行视频转码
2、Nginx 通过 http 发布 m3u8文件
3、Video.js 播放 m3u8,Video.js其实是不断刷m3u8文件,然后去读取对应的ts视频缓存文件
经本人测试 IE11, FF, Chrome, Edge均可,移动端浏览器就更简单了直接读第二步那个m3u8即可。

所以对应的几个主要关键步骤是:

1、ffmpeg的转码
bin\ffmpeg -f rtsp -rtsp_transport tcp -i "rtsp://xxxxxxxx/xxxxx" -strict -2 -c:v libx264 -vsync 2 -c:a aac -f hls -hls_time 4 -hls_list_size 5 -hls_wrap 10 D:/nginx-1.21.0/html/hls/test.m3u8
红色的是视频源和转码后的m3u8文件及对应的缓存文件存储位置(以上设置会产生10个缓存文件)

2、Nginx的设置
http -> server下增加
        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root html;
            add_header Cache-Control no-cache;
            add_header Access-Control-Allow-Origin *;
        }
加粗暗红色的路径要与ffmpeg的输出路径相对应

3、前端页面
前端就给个最简单的页面例子就好了。用到了video.js 和 videojs-contrib-hls.js



    
        
        Title
        
        
        
        
                
    
    
        
        
    

以上方案缺点很明显:不能由客户端指定视频源(ffmpeg进程是独立的进程,与Webserver无关),多路视频源需要多个ffmpeg进程。所以使用不方便,服务器负荷高。


其他听说过的方案

  • ffmpeg : RTSP -> RTMP,Nginx发布RTMP,前端flash播放。Nginx需要自己编译rtmp模块,目前仅哟Nginx1.7.11.2能找到带了rtmp的包,其他Windows下没有。并且需要flash

RTSP-webRTC是更好的面向新一代浏览器的方案,目前找到两个具体方案:

1、Windows 下有一个 webrtc-streamer.exe 工具,个人作品,稳定性欠佳;
https://www.cnblogs.com/savorboard/p/webrtc-rtsp.html
https://github.com/mpromonet/webrtc-streamer/releases
简单步骤如下:

  1. 下载、解压缩到某个文件夹
  2. 运行其中的 webrtc-streamner.exe rtsp://xxxxxxxx,它会缺省侦听8000端口
  3. 打开 http://localhost:8000,里面列出了全部可以作为视频源的各种窗口,其中包括了命令行里指定的那个rtsp源,可以参看例子里怎样另外指定视频源等操作。

2、Linux下,Kurento-Server + Kurento-rtsp2webrtc插件的方案,更稳定和商业化
https://doc-kurento.readthedocs.io/en/latest/user/installation.html#installation-local
https://github.com/lulop-k/kurento-rtsp2webrtc
简单步骤如下:

  1. 参看 Kurento 安装说明,安装Kurento,并运行,会在8888端口开服务
  2. Git获取 Kurento-rtsp2webrtc代码,例子里的是安装在 /usr/local/Kurento下
  3. 安装Bower,
  4. Bower install安装Kurento-rtsp2webrtc
  5. npm安装http-server
  6. 运行http-server
  7. 访问8080端口获取Sample

最终推荐使用 最后这个Kurento-Server + Kurento-rtsp2webrtc方案。

你可能感兴趣的:(rtsp,html5)