在检索比特率时,无法使用HLS获取AVAsset的音轨

我在我的应用程序中使用HLSstream,我正在使用AVPlayer。 现在我想使用AVAsset获得video轨道的比特率。 虽然我添加了观察者和其他的东西,我总是听到数组为空。我是正确的轨道还是失去了什么?

HLS是自适应的,因此,根据各种条件,比特率可以在stream的持续时间内变化。 不像播放文件,不pipe是本地还是networkingURL,currentItem.asset.tracks将始终为零。

您需要查询AVPlayer的currentItem的accessLog并检查相应的“事件”。

文档中的以下内容应该提供您所需的信息;

看着 ;

AVPlayerItemAccessLog

AVPlayerItemAccessLogEvent

编辑:

您可能会从阅读苹果的Livestream媒体概览中受益,这将使您更好地了解.m3u8索引文件,特别是媒体文件可以编码各种比特率以适应不同的networking吞吐量/拥塞。 客户端负责切换以不同比特率编码的段。

观察到的最低价和观察到的最高价可能是你会发现最有用的属性,但是不知道你的预期用途,这是很难说,如果有足够的。 请记住,根据文档,这些是每段(请参阅概述以更好地理解段)。

一个AVPlayerItem有一个tracks属性,它是一个AVPlayerItemTrack的数组。 这些可能代表AVPlayerItem中加载的当前轨道。 它们会随着播放的进行而改变,并且可以通过KVO观察到。 AVPlayerItemTrack具有引用AVAssetTrackassetTrack属性。 video,audio,隐藏式字幕以及所有这些变体将显示为独立轨道。 如果您只对video感兴趣,可以通过mediaType属性检查它们的types – 尽pipe您可能对所有启用的轨道感兴趣。 一个AVAssetTrack有一个estimatedDataRate ,这可能是你在找什么。

你可以从AVPlayerItem挖掘这些类和属性的稀疏文档。