最近忙着学习MSS(Microsoft smooth streaming),都忘了HLS的内容。最近遇到几个bug都是hls seek有关,hls的精准seek问题,seek的最小单位是视频分片(ts流),导致无法精准seek到关键帧。虽然说现在有的code不支持,就把这个bug推出去了。
我在网上看到大量和我有类似的hls seek问题,我以为是apple设计如此呢。(显然不能甩锅给apple)
今天经理告诉我一个方法就是可以通过seek到某一个视频分片,下载后,到seek的时间点开始播放,这样也可以做到精准seek。
下面梳理一下hls的基础知识:
playlist(m3u8)介绍
HLS中的playlist是一个UTF-8编码的文本文件,其中包含了URL和描述性标签。一个常规的playlist如下所示:
#EXT-X-VERSION:3
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
# Old-style integer duration; avoid for newer clients.
#EXTINF:10,
http://media.example.com/segment0.ts
# New-style floating-point duration; use for modern clients.
#EXTINF:10.0,
http://media.example.com/segment1.ts
#EXTINF:9.5,
http://media.example.com/segment2.ts
#EXT-X-ENDLIST
其中以'#'打头的行都是标签ÿ