如何在iPhone/iPad设备上获得视频流的比特率



我有一个iOS应用程序,可以在iPhone/iPad设备上流式传输视频。

现在我需要在iPhone/iPad设备上获取视频流的比特率。CCD_ 1和CCD_。

我也在下面看到了这篇文章,但很少有评论提到它只适用于mpeg4视频。如何在iOS 中检查视频的分辨率、比特率

我正在寻找iPhone/iPad上的视频流和任何视频格式的比特率。

谢谢!

您可以监听AVPlayerItemNewAccessLogEntry通知以获取流的当前比特率,例如:

  • observedBitrate-也就是您当前的下载速度
  • indicatedBitrate-来自m3u8(BANDWITH(,表示播放当前流的最小比特率值

使用AVPlayer的自适应视频播放可以根据网络条件将当前流来回更改为具有高或低带宽的流,但这些更改不会出现在每次暂停、网络问题等上。因为您的蒸汽可以缓冲,m3u8没有较低带宽的播放流等。因此,如果您需要检测当前实时播放状态,请查看暂停、FPS。

swift中有示例代码,但如果需要,可以很容易地转换为objc:

let url = URL(string: "https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8")!
let playerItem = AVPlayerItem(url: url)
self.player = AVPlayer(playerItem: playerItem)
NotificationCenter.default.addObserver(forName: .AVPlayerItemNewAccessLogEntry, object: playerItem, queue: nil) { notification in
if let event = playerItem.accessLog()?.events.last {
let bitrates = [event.observedBitrate,
event.indicatedBitrate,
event.averageVideoBitrate,
]
print(">", bitrates)
}
}
player?.play()
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.bounds
view.layer.addSublayer(playerLayer)
Outputs:
> [16375938.865617642, 628000.0, 307568.0]
> [nan, 1728000.0, 0.0]
> [9830221.39078689, 2528000.0, 1422032.0]

最新更新