我需要将实时h.264编码的视频从IP摄像机流传输到浏览器,同时支持所有常见的浏览器和移动设备(例如Android,Firefox,Chrome,IE,Safari(Mac OS和iOS)),以及同时将带宽要求和延迟保持在最低水平。
MPEG-DASH要求浏览器支持NOT supported by iOS的媒体源扩展。这样就可以了。
HLS为only supported by Safari and Edge。
DASH似乎也施加了几秒钟的延迟,这不是可取的。
我希望能够对传入的h.264数据(即fragmented MP4)进行分块,将分块的数据通过Websockets传递给浏览器,然后在它们到达时将其转储到某种播放器中。 / p>
Broadway及其分支是javascript h.264解码器,并且有一个Broadway-stream项目支持流而不是文件,但是文档很差,我只能在以下情况下找到流的示例来源不存在。
最紧迫的问题是:当“分块数据”到达播放器或视频HTML元素时,如何将其交给浏览器?
我认为理想的设置是
我很清楚将接收到的块交给视频解码器。在不依赖Media Source Extensions的情况下如何做到这一点,并允许观众随机加入视频流?
答案 0 :(得分:1)
您有点矛盾,因为这两件事:
低延迟和分块数据不能一起使用,它们可以是一个或另一个。当您累积N秒长度的块时,会引入N秒延迟。
因此,如果您需要在所有设备的浏览器中播放的H.264实时流的低延迟播放,则唯一的选择是WebRTC。基于块的流式传输(例如HLS或Dash)将无济于事。
通过Websockets的Media Source Extensions是另一种选择,它与通过Websocket流到浏览器中的MSE的块一起工作。但您需要发送30-100毫秒长的数据块,以保持亚秒级的延迟。它还不适用于iOS。
在这里您可以将WebRTC和MSE的延迟与实时H.264 IP摄像机进行比较: http://umediaserver.net/umediaserver/demohtml5WebRTCplayer.html http://umediaserver.net/umediaserver/demohtml5MSEplayer.html