使用AVPlayerViewController和从NSURL获取的AVPlayer

3
我有一个AVPlayer,它从URL加载视频,并将播放器放置在AVPlayerViewController中,但我不想在用户按下播放按钮之前缓冲和下载视频。我该怎么做?
var player: AVPlayer = AVPlayer(URL: nsurl)
var newVideoChunk: AVPlayerViewController = AVPlayerViewController()
                                newVideoChunk.player = player
1个回答

2
使用NSURL的AVPlayerViewController和AVPlayer?
您需要设置视频资产并创建一个基于该NSURL资产的playerItem。然后,您需要立即向该playerItem添加一个观察器:
self.playerItem?.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.New, context: Constants.AVPlayerStatusObservationContext)

从键值观察者例程中,您可以捕获上下文并调用外部函数:
   override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    //
    if context == Constants.AVPlayerStatusObservationContext {
        if (keyPath! == "status") {
            if (player!.status == AVPlayerStatus.ReadyToPlay) {
                print("ready")
                readyToPlay()

            } else if (player!.status == AVPlayerStatus.Failed) {
                // something went wrong. player.error should contain some information
            } else if (player!.status == AVPlayerStatus.Unknown) {
                print("unknown")
            }
        }
    }
}

如果您只想在单击按钮时处理缓冲和下载,请确保仅在按钮操作方法中添加观察者。这将适用于文件URL和在线URL。请查看我的示例gist以获取更多信息:

VideoPlayerViewController.swift


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