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

标签 ios objective-c avfoundation avplayer avplayeritem

我有一个 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]
    
    
    

    关于ios - 如何在 iPhone/iPad 设备上获取视频流的比特率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66703582/

    相关文章:

    swift - AVCaptureVideoDataOutput 中的无效键 -> ProfileLevel (macOS)

    ios - 在比较期间每次都不会调用重写的 isEqual 方法

    ios - 如何从代码中关闭 View 的自动布局?

    ios - 运行 iOS7 模拟器时 UIViewController View 大小不正确

    ios - 估计数据和服务器数据不匹配 Parse.com

    ios - 无法从 MTAudioProcessingTap 中的 AudioUnit 获取 AudioStreamBasicDescription

    ios - 如何在 Objective-C 中对 UITextField 的 "default placeholder text"进行编码?

    iphone - 从 UIViewController A 到 B 并获得反馈

    objective-c - 如何将 CALayer 的内容设置为 CGImageRef?

    ios - 从 iOS 中捕获的视频中获取慢动作元数据