Skip to content

hlsStalledd

Franken Zeng edited this page May 7, 2017 · 5 revisions

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片延时误差来自于切片间隔。

3. 总结

hls直播延时统计如下:

播放器 最小延时 最大延时
ksyplayer 一倍ts时长 两倍ts时长
ijkplayer 三倍ts时长 延时持续累积
flashplayer 三倍ts时长 四倍ts时长
h5player 三倍ts时长 延时持续累积

4. 推荐

如果您直播方案中,接入了云服务公司提供的直播CDN,那么您的播放拉流方式可以根据业务场景不同自己组合。

当用户从以下不同平台发起拉流、播放请求时,业务服务可以根据用户的来源提供不同的拉流方式:

  • 移动浏览器

在移动端浏览器页面,推荐使用m3u8进行直播播放。该播放场景主要用于播放房间的分享。

  • PC浏览器

如果支持flash播放器,推荐使用http-flv拉流。

  • 移动端(iOS/Android)

集成金山云播放SDK,推荐使用http-flv直播。http-flv的拉取是平滑的,可以精准控制直播延时,比如2秒。

Clone this wiki locally