Ios7 如何找到AVPlayer当前比特率

Ios7 如何找到AVPlayer当前比特率,ios7,avplayer,bitrate,avplayeritem,Ios7,Avplayer,Bitrate,Avplayeritem,我正在尝试获取AVPlayer播放视频流的比特率。我尝试了AVPlayerItemAccessLogEvent的observed bit rate属性,但是它给出了非常高的值。在进一步探索了观察到的比特率属性后,我了解到该属性显示了一段的下载速率的值。我需要知道播放器播放流时的比特率 下图显示了实时流的观测比特率与指示比特率。 请就这个问题提出你的建议 我尝试了以下链接,但没有成功: .关于观察到的比特率你是对的。这显示了下载速度 指示的比特率应告诉您播放当前流所需的播发比特率。我相信价值来

我正在尝试获取AVPlayer播放视频流的比特率。我尝试了
AVPlayerItemAccessLogEvent
observed bit rate
属性,但是它给出了非常高的值。在进一步探索了
观察到的比特率
属性后,我了解到该属性显示了一段的
下载速率的值
。我需要知道播放器播放流时的比特率

下图显示了实时流的观测比特率与指示比特率。

请就这个问题提出你的建议

我尝试了以下链接,但没有成功:


.

关于
观察到的比特率
你是对的。这显示了下载速度

指示的比特率应告诉您播放当前流所需的播发比特率。我相信价值来自HLS主清单。播放没有多个比特率变体的流时,并且只有一个比特率变体可用,则指示的比特率值将为
-1

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

如果您正在处理没有主清单的流,那么估计比特率的一种方法是获取最后一个
AVPlayerItemAccessLogEvent
条目,并使用以下公式计算它:

numberOfBitsTransferred = (numberOfBytesTransferred * 8)
numberOfBitsTransferred / segmentsDownloadedDuration

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

我按照Anurag的回答,它给了我想要的解决方案,但是,我注意到,根据您的兴趣,使用AVPlayerItem的访问日志事件的
averageAudioBitrate
averageVideoBitrate
属性可以获得相同的值

下面是我如何在Swift 5中设置的

NotificationCenter.default.addObserver(forName: .AVPlayerItemNewAccessLogEntry,
                                             object: playerItem,
                                             queue: nil) { [weak self] notification in
        if let event = self?.playerItem?.accessLog()?.events.last {
          
          let bitsTransferred = Double(event.numberOfBytesTransferred * 8)
          let bitrate =  bitsTransferred / Double(event.segmentsDownloadedDuration)
          
          print("Calculated Bit Rate: \(bitrate)")
          
          // This gives the same value as Anurag's answer
          print("Average Bit Rate: \(event.averageAudioBitrate)")
        }
}

我还想补充一点,在直播流中触发此通知是不可靠的。

感谢您的回复,关于指示比特率-据我了解,这是播放流所需的比特率,由服务器指示。我想找到avplayer播放流的比特率。你能帮我理解指示的比特率吗?我还想知道这是否指示播放机的当前比特率。仅供参考-我的所有流都有主清单。正如Anurag所说,指示的比特率只是当前播放的m3u8变体播放列表中的“带宽”参数。根据您的HLS服务器,这可能有任何价值。如果没有主播放列表,则此值设置为-1,表示播放列表“不指示比特率”。对于性能良好的HLS服务器,使用不同的播放列表,此值应该相当准确,但要获得当前网络比特率,请使用Anurag的公式:比特率(以位/秒为单位)=(logEvent.numberOfByTestTransferred*8)/logEvent。segmentsDownloadedDuration@karthik-我希望Simon的评论进一步澄清了所示Birtate财产的用途。如果你还有其他问题,请告诉我。@Anurag,我一定会做的。你知道什么时候访问日志会在AVPlayer中生成吗?我的意思是什么时候我会获得新的访问日志。你也可以注册通知AVPlayerItemNewAccessLogEntryNotification,以了解何时添加了新的日志条目。