如何找到AVPlayer当前比特率
问题描述:
我想获取AVPlayer正在播放视频流的比特率。我尝试使用AVPlayerItemAccessLogEvent
的observed bit rate
属性,但它提供了非常高的价值。在探索Observed-bit-rate
属性后,我了解到此属性显示值为download rate of a segment
。我需要知道播放器正在播放流的比特率。如何找到AVPlayer当前比特率
下图显示了LIVE流的Observed bit vs指示比特率。
请在此问题上提出您的建议。
我尝试下面的链接,但没有运气:
https://stackoverflow.com/a/14845997/1730345。
MPMoviePlayerController MovieAccessLogEvent - Inflated observedBitrate。
答
你是对的observedBitrate
。这显示了下载速度。
indicatedBitrate
应该告诉你播放当前流所需的广播比特率。我相信价值来自HLS大师清单。播放没有多比特率变体的流时,只有一个可用比特率变体,indicatedBitrate
的值将为-1
。
如果您总是处理具有主清单的流,那么indicatedBitrate
是最佳选择。
如果你处理的是没有一个主清单,然后一个估计比特率流的方式就是抓住最后AVPlayerItemAccessLogEvent
项,并使用计算的话:
numberOfBitsTransferred = (numberOfBytesTransferred * 8)
numberOfBitsTransferred/segmentsDownloadedDuration
经验上来讲,每隔播放器切换比特率时,它会发布一个新的访问日志条目。最新的访问日志条目将包含关于最近选择的流的数据。
感谢您的回复,关于requestedBitrate - 根据我的理解,这是播放流所需的比特率,它由服务器指示。我想查找avplayer播放流的比特率。您能否帮我理解指示的比特率,并且我想知道这是否表示播放器的当前比特率。仅供参考 - 我的所有溪流都有主人清单。 – karthik
正如Anurag所说,指示的比特率仅仅是当前正在播放的m3u8变体播放列表中的“BANDWIDTH”参数。根据你的HLS服务器,这可能有任何价值。如果没有主播放列表,则此值设置为-1,表示播放列表'不表示比特率'。对于运行良好的HLS服务器,使用变体播放列表,该值应该相当准确,但要获取当前网络比特率,请使用Anurag的公式:比特率(以位/秒为单位)=(logEvent.numberOfBytesTransferred * 8)/ logEvent.segmentsDownloadedDuration –
@karthik - 我希望西蒙的意见进一步阐明了指示剂量属性的用途。如果您还有其他问题,请告诉我。 – Anurag