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

时间:2015-07-08 09:55:19

标签: ios video-streaming avplayer http-live-streaming

我在我的应用程序中使用HLS流,我正在使用AVPlayer。 现在我想使用AVAsset获得视频轨道的比特率。虽然我已经添加了观察者和其他东西,但我总是将轨道数组视为空。我是在正确的轨道上还是遗漏了什么?

2 个答案:

答案 0 :(得分:4)

HLS是自适应的,因此,比特率可以基于各种条件在流的持续时间内变化。你在完全错误的轨道上,不像在本地或从网络URL播放文件,currentItem.asset.tracks将始终为零。

您' 11需要查询AVPlayer' S CURRENTITEM' S ACCESSLOG并检查相应的"事件"

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

看看;

AVPlayerItemAccessLog

AVPlayerItemAccessLogEvent

修改

您可能会从阅读apple Live streaming overview中受益 这将使您更好地理解.m3u8索引文件,特别是媒体文件可以针对各种比特率进行编码,以适应不同的网络吞吐量/拥塞。客户端负责在以不同比特率编码的段之间进行切换。

观察到的MinBitrate和observeMaxBitrate可能是您认为最有用的属性,但是如果知道您的预期用途,那么很难说是否足够。请记住,根据文档,这些是每段(请参阅概述以更好地理解段)。

答案 1 :(得分:0)

AVPlayerItem具有tracks属性,该属性是AVPlayerItemTrack的数组。这些可能代表AVPlayerItem中加载的当前曲目。它们会随着播放的进行而改变,并且可以通过KVO观察到。 AVPlayerItemTrack的{​​{1}}属性引用assetTrack。视频,音频,隐藏式字幕及其所有变体将显示为独立曲目。如果您只对视频感兴趣,可以通过AVAssetTrack属性检查他们的类型 - 尽管您可能对所有已启用的曲目感兴趣。 mediaType有一个AVAssetTrack,可能就是您要找的内容。

您可以从AVPlayerItem深入了解这些类和属性的稀疏文档。