Skip to content

hlsStalledd

Sidney edited this page Dec 5, 2017 · 1 revision

hls直播(m3u8)频繁卡顿

很多人在使用播放SDK过程中,发现使用hls直播会出现频繁的卡顿现象。

1. 问题分析

一个典型的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

特点如下:

  1. m3u8直播文件包含3个ts片段(也有包含大于3个ts片段的非标准m3u8直播实现),每个ts片段长度可能不相同;
  2. EXT-X-TARGETDURATION表征最大ts片段的时长,这里是6秒;
  3. 播放端获取到ts有时间间隔,大约接近6秒才能更新到一个最新的ts;

以上说明,获取m3u8文件时,文件包含了解决18秒的直播内容时长。包括未产生的ts片段内容(小于6秒)。最大延时大约是4倍EXT-X-TARGETDURATION

如果此时,播放器参数中通过延时控制参数bufferTimeMax设置了时延,比如2秒。此时播放器内只有2秒缓冲,播放完成后需要等待下一个ts片的到来。
当新的ts到来时,一下会多出6秒缓冲时长,此时,4秒数据将通过丢帧、追赶的方式被丢弃。
以致出现频繁追赶、频繁卡顿的现象。

2. 修复

直播SDK能保证一个HLS ts片的延时,所以建议把直播延时属性bufferTimeMax设置的大于EXT-X-TARGETDURATION,该示例中建议设置为6.5秒。

此时,使用HLS直播,将获得最大12.5秒、最小6.5秒的直播延时。其中的一个ts片延时误差来自于切片间隔。

4. 推荐

如果您直播方案中,接入了云服务公司提供的直播CDN,那么您的播放拉流方式可以根据业务场景不同自己组合。 集成播放SDK,推荐使用http-flv直播。http-flv的拉取是平滑的,可以精准控制直播延时,比如2秒。