1

我正在尝试以 m3u8 格式获取远程视频(通过 http 流式传输)的持续时间。对于某些本地持续时间较长的视频,它无法获取资产的持续时间。我目前正在使用 KVO 来捕获 AVPlayerItem 的 .Ready 状态,然后调用委托方法。

let asset = AVURLAsset(URL: url)
let playerItem = AVPlayerItem(asset: asset!)
let player = AVPlayer(playerItem: playerItem!)

....

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    if object as? AVPlayerItem == player?.currentItem {
        if keyPath == "status" {
            guard let status = player?.currentItem?.status
                else { return }

            delegate?.videoViewController(self, statusDidChange: status)
        }
    }
}

但我越来越CMTime(value: 0, timescale: 0, flags: __C.CMTimeFlags(rawValue: 17), epoch: 0)

我还尝试使用loadValuesAsynchronouslyForKeys方法获取资产的持续时间,但这会返回相同的值。

当调用委托方法时, playerItem.asset.playable 等于 true,但以下所有属性都返回 0:

print(asset?.duration)
print(playerItem?.duration)
print(playerItem?.asset.duration)
print(playerItem?.tracks[0].assetTrack.asset?.duration)
4

0 回答 0