方案一: H5 + websocket_rtsp_proxy 实现视频流直播
Streamedian 提供了一种“html5_rtsp_player + websock_rtsp_proxy”的技术方案,可以通过html5的video标签直接播放RTSP的视频流。
整个架构如下图所示,分为服务器端和浏览器端两部分:
方案二:RTSP转RTMP到RTMP服务器,转http-flv,播放端用flv.js播放
flv.js在获取到FLV格式的音视频数据后将 FLV 文件流转码复用成 ISO BMFF(MP4 碎片)片段,再通过Media Source Extensions API 传递给原生HTML5 Video标签进行播放。
flv.js 是使用 ECMAScript 6 编写的,然后通过 Babel Compiler 编译成 ECMAScript 5,使用 Browserify 打包。
flv.js 从服务器获取FLV再解封装后转给Video标签的原因如下:
- 兼容目前的直播方案:目前大多数直播方案的音视频服务都是采用FLV容器格式传输音视频数据。
- flv格式简单,相比于MP4格式转封装简单、性能上也占优势,解析起来更快更方便。
方案三:RTSP转RTMP到RTMP服务器,转hls,播放端用video.js播放
Video.js是一款web视频播放器,支持html5和flash两种播放方式。更有自定义皮肤,插件,组件,语言还有丰富的选项配置。
方案四:VLC或者SmartPlayer第三方插件播放
VLC不再多说,几乎做流媒体的开发者都知道,SmartPlayer是大牛直播SDK (Github) 的播放插件,延迟和功能体验更好。
插件形式的优点是无需二次转换,直接通过ActiveX控件的形式播放,延迟非常低,缺点是只支持IE浏览器。
方案五:RTSP转WebRTC播放
浏览器对webrtc的支持良好,特别是在H264编码方面几个主流的浏览器都已经支持了。webrtc使用srtp进行媒体数据的传输,那么我们只需要将rtp中的负载数据通过webrtc通道发送给浏览器,而浏览器端只需要通过video标签播放即可,目前RTSP转WebRTC对浏览器的适配比较好,延迟也比较低。