-
Notifications
You must be signed in to change notification settings - Fork 146
hlsStalledd
Franken Zeng edited this page Jan 8, 2018
·
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
特点如下:
- m3u8直播文件包含3个ts片段(也有包含大于3个ts片段的非标准m3u8直播实现),每个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时长 | 延时持续累积 |
如果您直播方案中,接入了云服务公司提供的直播CDN,那么您的播放拉流方式可以根据业务场景不同做最优化组合。
当用户从以下不同平台发起拉流、播放请求时,业务服务可以根据用户的来源提供不同的拉流方式:
- 移动浏览器
在移动端浏览器页面,推荐使用m3u8进行直播播放。该播放场景主要用于播放房间的分享。
- PC浏览器
如果支持flash播放器,推荐使用http-flv拉流。
- 移动端(iOS/Android)
集成金山云播放SDK,推荐使用http-flv直播。http-flv的拉取是平滑的,可以精准控制直播延时,比如2秒。
相关延时控制请阅读wiki: 直播延时控制