2015-09-04 103 views
3

我想获取AVPlayer正在播放视频流的比特率。我尝试使用AVPlayerItemAccessLogEventobserved bit rate属性,但它提供了非常高的价值。在探索Observed-bit-rate属性后,我了解到此属性显示值为download rate of a segment。我需要知道播放器正在播放流的比特率。如何找到AVPlayer当前比特率

下图显示了LIVE流的Observed bit vs指示比特率。 enter image description here

请在此问题上提出您的建议。

我尝试下面的链接,但没有运气:

https://stackoverflow.com/a/14845997/1730345

MPMoviePlayerController MovieAccessLogEvent - Inflated observedBitrate

回答

4

你是对的observedBitrate。这显示了下载速度。

indicatedBitrate应该告诉你播放当前流所需的广播比特率。我相信价值来自HLS大师清单。播放没有多比特率变体的流时,只有一个可用比特率变体,indicatedBitrate的值将为-1

如果您总是处理具有主清单的流,那么indicatedBitrate是最佳选择。

如果你处理的是没有一个主清单,然后一个估计比特率流的方式就是抓住最后AVPlayerItemAccessLogEvent项,并使用计算的话:

numberOfBitsTransferred = (numberOfBytesTransferred * 8) 
numberOfBitsTransferred/segmentsDownloadedDuration 

经验上来讲,每隔播放器切换比特率时,它会发布一个新的访问日志条目。最新的访问日志条目将包含关于最近选择的流的数据。

+0

感谢您的回复,关于requestedBitrate - 根据我的理解,这是播放流所需的比特率,它由服务器指示。我想查找avplayer播放流的比特率。您能否帮我理解指示的比特率,并且我想知道这是否表示播放器的当前比特率。仅供参考 - 我的所有溪流都有主人清单。 – karthik

+2

正如Anurag所说,指示的比特率仅仅是当前正在播放的m3u8变体播放列表中的“BANDWIDTH”参数。根据你的HLS服务器,这可能有任何价值。如果没有主播放列表,则此值设置为-1,表示播放列表'不表示比特率'。对于运行良好的HLS服务器,使用变体播放列表,该值应该相当准确,但要获取当前网络比特率,请使用Anurag的公式:比特率(以位/秒为单位)=(logEvent.numberOfBytesTransferred * 8)/ logEvent.segmentsDownloadedDuration –

+0

@karthik - 我希望西蒙的意见进一步阐明了指示剂量属性的用途。如果您还有其他问题,请告诉我。 – Anurag