-
Notifications
You must be signed in to change notification settings - Fork 146
hlsStalledd
Franken Zeng edited this page Feb 10, 2017
·
5 revisions
很多人在使用金山云直播SDK过程中,会发现使用hls直播会出现频繁的卡顿现象。
一个典型的m3u8直播索引文件内容如下:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:78
#EXT-X-TARGETDURATION:6
#EXTINF:5.995,
1486711504087.ts
#EXTINF:5.995,
1486711510085.ts
#EXTINF:5.995,
1486711516133.ts
特点如下:
- 包含3个ts片段,长度可能不相同;
- EXT-X-TARGETDURATION表征最大ts片段的时长,这里是6秒;
- 播放端获取到ts有时间间隔,大约接近6秒才能更新到一个最新的ts;
以上说明,获取m3u8文件时,文件包含了解决18秒的直播内容时长。包括未产生的ts片段内容(小于6秒)。最大延时大约是4倍EXT-X-TARGETDURATION
如果此时,播放器参数中通过延时控制参数bufferTimeMax设置了时延,比如2秒。此时播放器内只有2秒缓冲,播放完成后需要等待下一个ts片的到来。
当新的ts到来时,一下会多出6秒缓冲时长,此时,4秒数据将通过丢帧的方式被丢弃。
以致出现频繁追赶、频繁卡顿的现象。
金山云直播SDK能保证一个HLS ts片的延时,所以需要把直播延时属性bufferTimeMax设置的大于EXT-X-TARGETDURATION,该示例中建议设置为6.5秒。
此时,使用HLS直播,将获得12.5秒、最小6.5秒的直播延时。其中的一个ts片延时误差来自于切片间隔。
hls直播延时统计如下:
播放器 | 最小延时 | 最大延时 |
---|---|---|
ksyplayer | 一倍ts时长 | 两倍ts时长 |
ijkplayer | 三倍ts时长 | 延时持续累积 |
flashplayer | 三倍ts时长 | 四倍ts时长 |
h5player | 三倍ts时长 | 延时持续累积 |
推荐使用http-flv直播,flv的拉取是平滑的,可以精准控制直播延时。