具有HLS冗余流和不良网络的奇怪AVPlayer行为

时间:2019-06-28 11:15:51

标签: ios avplayer http-live-streaming

我有一个可以播放视频HLS流的应用程序。 HLS主播放列表包含冗余流以提供备份服务

看起来像这样:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1500000,RESOLUTION=638x480
https://example.com/playlist.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1564000,RESOLUTION=638x480
https://example.com/playlist.m3u8?redundant=1
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1564000,RESOLUTION=638x480
https://example.com/playlist.m3u8?redundant=2
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1564000,RESOLUTION=638x480
https://example.com/playlist.m3u8?redundant=3

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000,RESOLUTION=638x480
https://example.com/playlist_lq.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000,RESOLUTION=638x480
https://example.com/playlist_lq.m3u8?redundant=1
....
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000,RESOLUTION=638x480
https://example.com/playlist_lq.m3u8?redundant=5

因此,我决定测试一下在网络状况不佳的情况下此设置的运行方式。为此,我使用了网络链接调节器的3G预设,该预设可提供750kbs的下载带宽。自然,我希望可以相对平稳地播放400kbs的视频,但可惜的是,完全加载测试剪辑(总大小为800kb)需要60秒。

我注意到的是AVPlayer发送了所有列出的冗余播放列表的请求(每个带宽有5个)。如果我删除它们,并且每个带宽仅保留1个媒体播放列表-视频将在10秒内加载并且播放时不会出现打ic。

看起来AVPlayer试图在处理主视频负载的同时并行处理所有冗余链接,并且使阻塞变得困难。

是否有任何方法可以限制AVPlayer的这种行为,并仅在实际负载错误的情况下才强迫他使用冗余流? 知道为什么它尝试加载所有这些吗?也许某些HLS标签可以提供帮助?

有时它还会在控制台中显示如下错误:

{OptimizedCabacDecoder::UpdateBitStreamPtr} bitstream parsing error!!!!!!!!!!!!!!

我找不到关于它的很多信息

1 个答案:

答案 0 :(得分:0)

问题的BANDWIDTH值设置不正确,如果属性当前值与m3u8值不匹配,AVPlayer会模糊逻辑切换冗余流