【问题标题】:AVPlayerViewController with AVPlayer from NSURL带有来自 NSURL 的 AVPlayer 的 AVPlayerViewController
【发布时间】:2015-09-14 07:45:06
【问题描述】:

我有从 url 加载视频并将播放器放入 AVPlayerViewController 的 AVPlayer,但我不想缓冲和下载视频,直到用户按下播放按钮。我该怎么做?

var player: AVPlayer = AVPlayer(URL: nsurl)
var newVideoChunk: AVPlayerViewController = AVPlayerViewController()
                                newVideoChunk.player = player

【问题讨论】:

    标签: swift ios8 avfoundation avplayer avkit


    【解决方案1】:

    AVPlayerViewController 与来自 NSURL 的 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 一样有效。

    请查看我的示例要点了解更多信息:

    VideoPlayerViewController.swift

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      相关资源
      最近更新 更多