实时流更新时,AVPlayer从头开始

时间:2019-06-23 06:35:25

标签: ios avplayer http-live-streaming

我的后端提供了实时流(m3u8),并向其附加了一些块。

播放列表在后端的外观:

从第一秒开始:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-PLAYLIST-TYPE:EVENT
#EXT-X-TARGETDURATION:38
#EXTINF:37.995,
https://example.com/0.mp3

从5秒开始:

...
#EXTINF:30.531,
https://example.com/1.mp3

从10秒开始:

...
#EXTINF:41.811,
https://example.com/2.mp3
#EXT-X-ENDLIST

TARGETDURATION的持续时间也最终改变了。

这种方法在Safari中绝对有效。对于其他浏览器,我使用hls.js库,它也运行良好。

但是在iOS应用中,AVPlayer从第一个块之后的开头开始播放流。

它看起来像这样:

  • 01s :获取包含单个块的播放列表,然后开始播放0.mp3,
  • 38s :获取完整的播放列表,进行缓冲并重新开始播放0.mp3。

Safari和其他浏览器在获得更新后才继续播放。而且我希望在iOS应用中具有相同的行为。

如果播放列表结尾,则AVPlayer会正确播放它。但就我而言,立即提供完整的播放列表而不进行更新会花费太多时间。

0 个答案:

没有答案