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

5

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

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

我还看到了下面这篇文章,但是一些评论提到它仅适用于mpeg4视频。 如何在iOS中检查视频的分辨率和比特率

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

谢谢!


那么使用Adobe HTTP动态流或Apple HTTP Live Streaming,预期的比特率是多少? - Raptor
这个有帮助吗?链接 - Raptor
使用苹果HTTP Live Streaming - sia
@raptor - 我也尝试过使用 switchBitrate,但没有帮助。 - sia
你能否通过添加代码并指明期望的结果来详细说明“没有帮助”的含义。目前这个问题还缺乏细节,有些模糊不清。 - Raptor
显示剩余3条评论
1个回答

2
您可以监听 AVPlayerItemNewAccessLogEntry 通知以获取流的当前比特率,例如:
  • observedBitrate - 即您的当前下载速度
  • indicatedBitrate - 来自m3u8(BANDWIDTH),表示播放当前流的最小比特率值
使用 AVPlayer 进行自适应视频播放可以根据网络条件将当前流切换到带有高或低带宽的流,但这些更改不会在每个卡顿、网络问题等情况下出现,因为您的流可能已被缓冲,m3u8没有较低带宽的流可供播放等。因此,如果您需要检测当前实时播放状态,请查看卡顿和FPS。
这里提供了Swift示例代码,如果需要,可以轻松转换为Objective-C:
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]



我已经按照你上面提到的方法做了同样的事情,但使用了一些我的自定义url链接:http://stream.radiojar.com/nhq0vcqwuueuv或https://ice1.somafm.com/groovesalad-128-mp3 - 但是通知没有被调用。 - Shawn Frank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接