在检索比特率时,无法使用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
具有引用AVAssetTrack
的assetTrack
属性。 video,audio,隐藏式字幕以及所有这些变体将显示为独立轨道。 如果您只对video感兴趣,可以通过mediaType
属性检查它们的types – 尽pipe您可能对所有启用的轨道感兴趣。 一个AVAssetTrack
有一个estimatedDataRate
,这可能是你在找什么。
你可以从AVPlayerItem
挖掘这些类和属性的稀疏文档。