微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在 iPhone/iPad 设备上获取视频流的比特率?

我有一个 iOS 应用,可以在 iPhone/iPad 设备上播放视频。

现在我需要在 iPhone/iPad 设备上获取视频流的比特率。 ObservedBitrateIndicatedBitrate 对此没有帮助。

我也在下面的帖子中看到了这篇文章,但很少有评论提到它仅适用于 mpeg4 视频。 How to check Resolution,bitrate of video in iOS

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

谢谢!

解决方法

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

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

使用 AVPlayer 进行自适应视频播放可以根据网络状况来回将当前流更改为具有高带宽或低带宽的流,但这些更改不会出现在每个档位、网络问题等上,因为您的 Steam 可能缓冲,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]


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。