HTTP Live Streaming(HLS)是Apple公司主导提出并实现的基于HTTP的自适应码率流媒体通信协议(RFC8216)。
说实在的,作为监控领域的玩家,我一直很抗拒Apple HLS协议,但架不住苹果的行业影响力啊,还记得很多年你跟AT&T做项目的时候,对方指定要用Apple HLS协议,那个latency惨不忍睹,有一次去亚特兰大客户家里看问题,我们一起站在门口,把camera装好了,客户在那里数着latency的秒数,真的恨不得找个地缝钻下去,我们其他的方案可以做到2s内,但当时的HLS要到10s(用iOS native 播放)
直到Apple发布了Low latency HLS,我觉得才像个样子,至少适合Live播放了。
Low latency HLS的详细规格可以参考文档即可,这里就粗略的介绍一下结果跟方案。
目前Low Latency HLS优化后,latency大概在0.7s~1s之间,这个结果对于监控领域来说也够用了。
按照Low Latency HLS的规范,每个partial的clip最小200ms,最少要queue3个clip,所以这600ms没跑了,优化的部分就是如何才能让client的latency稳定在这个数值?
1. 有新的连接进来,第一时间trigger encode force IDR
2. 如果发现前一个IDR到现在已经过去了不少时间,那就果断点,m3u8告诉client clip ready(实际上给的是未来的clip name),然后把所有请求的session hold住,等clip 好了第一时间response给client,这样latency就稳住在0.7s~1s.
其他的细节后续再补充把