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

如何获取 AVPlayer 的初始缓冲区大小

如何解决如何获取 AVPlayer 的初始缓冲区大小

为了衡量我的 App 中视频播放的服务质量,我需要测量内容实际开始播放时 AVPlayer 的初始缓冲区大小。

为此,我在播放的第一毫秒添加一个一次性周期性时间观察器,并从那里检查最后一个 AVPlayerItemAccessLogEvent 的属性 segmentDownloadedDuration。

遗憾的是,我通过这种方法获得的值与我在服务器端看到的值不匹配。

服务器端,如果我将最初请求的段数乘以段持续时间,与我的客户端应用程序的报告相比,我得到最多 6 秒的不匹配值。

有没有更好的方法获取这些数据?有什么我们可能遗漏或做错的事情吗?

您可以在下面找到客户端方法的示例:

import UIKit
import AVFoundation
class PlaygroundViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let videoURL = URL(string: "https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8")!
      
        // Setup Player Layer
        playerLayer = AVPlayerLayer(player: player)
        playerLayer.frame = view.bounds
        view.layer.addSublayer(playerLayer)

        // Setup Player Item
        let asset = AVAsset(url: videoURL)
        playerItem = AVPlayerItem(asset: asset)

        // Setup AVPlayer
        player = AVPlayer(playerItem: playerItem)

        // Setup one time observer
        var contentStartedobserver: Any?
        contentStartedobserver = player?.addPeriodicTimeObserver(forInterval: CMTimeMake(value: 1,timescale: 1000),queue: dispatchQueue.main,using: {
            [weak self] _ in

            print("Content Started Playing")

            guard let accessLog = self?.playerItem.accessLog() else { return }
            guard let lastEvent = accessLog.events.last else { return }

            print(">> Buffered Duration:")
            print(lastEvent.segmentsDownloadedDuration)

            // Ok,we are done. Remove the observer
            self?.player?.removeTimeObserver(contentStartedobserver)
        })

        // Play
        playerLayer.player = player
        player.play()
    }

    // MARK: - Private

    private var playerLayer: AVPlayerLayer!
    private var player: AVPlayer!
    private var playerItem: AVPlayerItem!
}

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