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

Strange AVPlayer behavior with HLS redundant streams and bad network

我有一个可以播放视频 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

因此,我决定测试此设置在网络状况不佳的情况下如何运行。为此,我使用了网络 link 调节器的 3G 预设,它提供 750kbs 的下载带宽。自然地,我期望 400kbs 视频的播放相对流畅,但是,完全加载测试剪辑需要 60 秒(总大小 800kb)。

我注意到 AVPlayer 发送对所有列出的冗余播放列表的请求(每个带宽我有 5 个)。如果我删除它们并且每个带宽只保留 1 个媒体播放列表 - 视频在 10 秒内加载并且播放时没有打嗝。

看起来 AVPlayer 试图在主视频加载的同时处理所有冗余的 links 并严重阻塞。

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

它有时还会在控制台中显示这样的错误:

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

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

问题是 BANDWIDTH 值设置不正确,如果 属性 当前流与 m3u8 值不匹配,AVPlayer 在切换冗余流方面有一些晦涩的逻辑