我在我的应用程序中使用HLS流,我正在使用AVPlayer。 现在我想使用AVAsset获得视频轨道的比特率。虽然我已经添加了观察者和其他东西,但我总是将轨道数组视为空。我是在正确的轨道上还是遗漏了什么?
答案 0 :(得分:4)
HLS是自适应的,因此,比特率可以基于各种条件在流的持续时间内变化。你在完全错误的轨道上,不像在本地或从网络URL播放文件,currentItem.asset.tracks将始终为零。
您' 11需要查询AVPlayer' S CURRENTITEM' S ACCESSLOG并检查相应的"事件"
文档中的以下内容应该为您提供所需的信息;
看看;
和
修改强>
您可能会从阅读apple Live streaming overview中受益 这将使您更好地理解.m3u8索引文件,特别是媒体文件可以针对各种比特率进行编码,以适应不同的网络吞吐量/拥塞。客户端负责在以不同比特率编码的段之间进行切换。
观察到的MinBitrate和observeMaxBitrate可能是您认为最有用的属性,但是如果知道您的预期用途,那么很难说是否足够。请记住,根据文档,这些是每段(请参阅概述以更好地理解段)。
答案 1 :(得分:0)
AVPlayerItem
具有tracks
属性,该属性是AVPlayerItemTrack
的数组。这些可能代表AVPlayerItem
中加载的当前曲目。它们会随着播放的进行而改变,并且可以通过KVO观察到。 AVPlayerItemTrack
的{{1}}属性引用assetTrack
。视频,音频,隐藏式字幕及其所有变体将显示为独立曲目。如果您只对视频感兴趣,可以通过AVAssetTrack
属性检查他们的类型 - 尽管您可能对所有已启用的曲目感兴趣。 mediaType
有一个AVAssetTrack
,可能就是您要找的内容。
您可以从AVPlayerItem
深入了解这些类和属性的稀疏文档。