1.个人补充(请在看完之后的正文可以看这里):
之后要看的下面博客内容中提到的
所以播放器判断出该文件为直播文件,
则在`(#EXT-X-TARGETDURATION)`设置的时间后`重新加载live.m3u8`,
此时因为是直播, 所以live.m3u8里应该会`自动增加一个新的ts文件流`
- 因为:
自动增加一个新的ts文件流
是因为hls的机制,后台根据切片时长,不断的更新hls的索引文件,其实就是上文的live.m3u8
,之后就会出现一段时间后hls文件索引不断更新,这种情况是在直播中出现的。
2.以下为转载的ckplayer博客正文信息:
首先,需要了解一下,m3u8直播的原理:假设直接地址是live.m3u8
该文件里的直播地址格式是
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:4.797000,
index0.ts
#EXTINF:4.396000,
index1.ts
#EXTINF:5.297000,
index2.ts
上面文件中的节点作用是:
#EXTM3U m3u文件头,必须放在第一行
#EXT-X-VERSION 版本号
#EXT-X-MEDIA-SEQUENCE 第一个TS分片的序列号
#EXT-X-TARGETDURATION 每个分片TS的最大的时长
#EXT-X-ALLOW-CACHE 是否允许cache
#EXT-X-ENDLIST m3u8文件结束符
#EXTINF extra info,分片TS的信息,如时长,带宽等
当播放器第一次请求会加载这里的:index0.ts,index1.ts,index2.ts来播放,因为该m3u8里没有设置结束节点
。所以播放器判断出该文件为直播文件,则在(#EXT-X-TARGETDURATION)
设置的时间后重新加载live.m3u8
,此时因为是直播, 所以live.m3u8里应该会自动增加一个新的ts文件流
,即live.m3u8变成如下的格式:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:4.797000,
index1.ts
#EXTINF:4.396000,
index2.ts
#EXTINF:5.297000,
index3.ts
从上面的可以看出,index0.ts
没了,多了一个index3.ts
。播放器会把index3.ts
添加到播放列表里。这样循环下去。则会不停的进行直播的动作。
了解了以上的原理后。就容易分析原因了。
循环播放或播放一定时间后停止,都是因为播放器没有请求到新的ts文件
导致。可能是使用了cdn缓存机制
导致,或服务器端设置了缓存机制导致。