安防互联网直播服务中为什么HTML5目前还没有实时的低延迟视频流协议?
我们最常见的流媒体协议的RTMP协议,在网络和硬件正常好的情况下,延迟可以达到1-3s左右,它也是目前主流视频直播中最常见的协议,像我们的安防流媒体服务器也支持这种协议的视频流输出。
为什么到现在还没有 HTML5 上的实时(延迟 < 3s)视频流协议?理论上利用 websocket + AVC TS 是可以实现的,但是正常总会遇到很多现实的问题。
在h5页面中,如果要用RTMP或HTTP-FLV,需要基于浏览器开发插件,然而浏览器有很多种,同时,基于别人的浏览器做插件,基本是不可能的。苹果公司开放了HLS协议,这种协议在h5中不需要插件即可进行播放,解决了在h5页面中直播的问题。
然而,对于直播来说,HLS协议还是存在很多问题:
1、播放时需要多次请求,对于网络质量的要求更高
2、延迟在10s左右
3、同时还存在延时累积,比如一分钟内的延迟有5s,看了10分钟后,延迟可能会达到50s
4、只能支持拉流,不支持推流
H5中播放直播的场景主要是,以ios、安卓为主要平台,分享到第三方应用中,通过hls协议拉流,来为app引流。此外,要想做到HLS小于3秒的延时,理论上是可以的,这需要看你ts分片的大小,和一个m3u8存储多少个ts的分片的索引。
如果一个m3u8存储6个ts的分片索引,每个分片为5s,那么就起码有30s的延时。只要把分片的时长减少,比如减少到250ms每个分片,一个m3u8只存储一个ts分片,那么理论延时就只有250ms。但是这样的话,每秒钟至少有4次的HTTP请求,并且因为每一个ts分片都有I帧,大大增大了需要传送的带宽。
会给服务器带来很多压力,也会增加流量上的消耗,所以总体上很难有兼顾带宽,延时和减轻服务器压力的HLS方案。