带有 HLS 冗余流和不良网络的奇怪 AVPlayer 行为
Posted
技术标签:
【中文标题】带有 HLS 冗余流和不良网络的奇怪 AVPlayer 行为【英文标题】:Strange AVPlayer behavior with HLS redundant streams and bad network 【发布时间】:2019-06-28 11:15:51 【问题描述】:我有一个可以播放视频 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 视频的播放相对流畅,但可惜的是,完全加载测试剪辑需要 60 秒(总大小为 800kb)。
我注意到 AVPlayer 发送所有列出的冗余播放列表的请求(每个带宽我有 5 个)。如果我删除它们并且每个带宽只保留 1 个媒体播放列表 - 视频会在 10 秒内加载,并且播放时不会出现卡顿。
看起来 AVPlayer 尝试在处理主视频负载的同时处理所有冗余链接,并且严重阻塞。
有没有什么办法可以限制 AVPlayer 的这种行为,并迫使他仅在实际加载错误的情况下才使用冗余流? 知道为什么它会尝试加载所有这些吗?也许一些 HLS 标签可以提供帮助?
它有时会在控制台中显示这样的错误:
OptimizedCabacDecoder::UpdateBitStreamPtr bitstream parsing error!!!!!!!!!!!!!!
我找不到太多关于它的信息
【问题讨论】:
【参考方案1】:问题在于 BANDWIDTH 值设置不正确,如果当前属性与 m3u8 值不匹配,AVPlayer 有一些模糊逻辑会切换冗余流
【讨论】:
以上是关于带有 HLS 冗余流和不良网络的奇怪 AVPlayer 行为的主要内容,如果未能解决你的问题,请参考以下文章