MPMoviePlayerController MovieAccessLogEvent – 膨胀的obserBitrate
我目前正在使用MPMoviePlayerController
并分析video播放的指标。 具体来说,分析自适应比特率。
作为testing的一部分,我以一个固定的比特率( 995kbps
)加载video的一个特定格式,然而当从我的MPMovieAccessLogEvent
的observedBitrate
属性中MPMovieAccessLogEvent
,这个值要大得多 – 大概是15mbps
。
是否有任何已知的理由,为什么这个比特率返回比回放的相当高? 我已经双重检查了所有的值,所有的回放,这是肯定的被夸大的observedBitrate
到的比特率。
根据文件,这个值是:
下载到电影播放器的所有媒体的经验吞吐量,以每秒位数为单位。
更新
我在开发者论坛上发布了这个问题,并且收到了一个答案,这个答案依然只是猜想,不过也认为它可以帮助解决这个问题,也许会引发一个更好的答案。
https://devforums.apple.com/thread/216659?tstart=0
使用mediastreamvalidator来检查你的HLSvideo是非常值得的,它将会下载和测量你的分段比特率。
有一个简单的答案 – MPMovieAccessLogEvent
的indicatedBitrate
MPMovieAccessLogEvent
(或AVPlayerItemAccessLogEvent
的AVPlayer
)是来自当前播放列表的比特率,因此是播放该stream所需的平均比特率。
然而, observedBitrate
的比特率并不是平均值,而是下载特定video块时播放器实现的即时比特率(或下载速度)。
示例:以1000 Kb / s的码stream播放一个播放列表,大小为10秒。 该设备通过WiFi可以实现超过10MB / s的下载速度,因此下载每个块需要不到1秒的时间。 因此,玩家在每个块中的下载速度超过10,000Kb / s。 我期望玩家返回(大约)这些值:
indicatedBitrate
:1000 Kb / s
observedBitrate
:10,000Kb / s
我自己被这些巨大的价值所困惑,但是我认为这可以解释它。
这仅仅是为了说明 – 这些值并不是很有意义,因为我们不知道下载块需要多长时间,或者每个块有多大。 所有observedBitrate
的比特率都告诉你,玩家如何保持播放stream所需的比特率。 如果前者比后者大10倍,那么仅使用10%的可用时间下载每个块。 这个比率可以用作服务质量指标。 例如,如果observedBitrate
率小于indicatedBitrate
比特率,那么很可能由于缓冲而使玩家停顿,但只要比较大,那么一切都很好,并且该stream可能顺畅地播放。