是否可以使用AVAssetResourceLoader(和AVassetRResourceLoaderDelegate)



iOS(似乎尤其是iOS 15(并不总是最擅长使用具有多个播放质量选项的HLS m3u8播放列表并选择最佳播放列表。例如,即使有很好的互联网连接,iOS也经常会从可用选项中选择一个质量较低的选项,并需要相当长的时间才能过渡到质量较高的选项。用户对此并不太满意,这是可以理解的,因为我可以将播放列表中高质量视频流的直接链接(无音频(粘贴到Safari中,当我手动执行时,它会立即加载,而不是较慢的AVPlayer实现。

是否可以使用AVAssetResourceLoader截取HLS播放列表,并去掉一些较低质量的选项,从而阻止iOS更多地选择较低质量选项?

我注意到,在苹果开发者论坛上的这个问题中,一名员工表示这可能是可能的,但除了苹果的演示代码之外,我一直无法找到明确的方法来做到这一点。

一个例子可能是以下HLS清单:

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=308000,AVERAGE-BANDWIDTH=279000,RESOLUTION=162x288,CODECS="avc1.42001e"
HLS_224.m3u8
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=522000,AVERAGE-BANDWIDTH=481000,RESOLUTION=180x320,CODECS="avc1.42001e"
HLS_270.m3u8
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=969000,AVERAGE-BANDWIDTH=886000,RESOLUTION=244x432,CODECS="avc1.4d001e"
HLS_360.m3u8
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,BANDWIDTH=1529000,AVERAGE-BANDWIDTH=1388000,RESOLUTION=360x640,CODECS="avc1.4d001f"
HLS_540.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=20113,RESOLUTION=162x288,CODECS="avc1.42001e",URI="HLS_224-iframe.m3u8"
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=29898,RESOLUTION=180x320,CODECS="avc1.42001e",URI="HLS_270-iframe.m3u8"
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=51637,RESOLUTION=244x432,CODECS="avc1.4d001e",URI="HLS_360-iframe.m3u8"
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=79210,RESOLUTION=360x640,CODECS="avc1.4d001f",URI="HLS_540-iframe.m3u8"

其中,我想去掉224和227选项,留下360和540选项。当然,这是假设HLS播放列表托管在我无法访问的服务器上,因此我无法直接编辑文件。

苹果开发论坛上的答案有点陈旧。好消息是,iOS 15引入了一些新的API来处理多变体播放列表中的比特率。加载视频时,请按照建议使用AVURLAssetAVAssetResourceLoader。加载资产后,您可以通过调用AVURLAsset.variants访问所有变体来获得系统选择的播放列表变体的信息,通过在AVPlayerItem上调用以下代码来获得当前选择的变体的信息:

if let lastEvent = self.playerItem?.accessLog()?.events.last {
let selectedBitRate = lastEvent.indicatedAverageBitrate
selectedAverageBitRate = selectedBitRate
selectedIndex = variants.firstIndex(where: {$0.averageBitRate ?? 0 == selectedBitRate})
}

对于设置播放列表变体首选项,您可以使用:

playerItem?.variantPreferences

另一方面,如果你想以某种方式限制首选比特率,请使用以下方法:

playerItem?.preferredPeakBitRate

相关内容

  • 没有找到相关文章

最新更新