Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS能够在不等待AVPlayerItem的情况下播放AVPlayer_Ios_Swift_Avplayer - Fatal编程技术网

iOS能够在不等待AVPlayerItem的情况下播放AVPlayer

iOS能够在不等待AVPlayerItem的情况下播放AVPlayer,ios,swift,avplayer,Ios,Swift,Avplayer,我注意到我几乎可以立即在我的AVPlayer上发送播放消息,而无需等待AVPlayerItem中的“状态”。我对此有点困惑。为什么不马上玩呢 大多数示例显示在AVPlayerItem的“状态”键上添加观察者。下面是一些代码: self.asset!.loadValuesAsynchronouslyForKeys(keys, completionHandler: { dispatch_async(dispatch_get_main_queue(), { var error

我注意到我几乎可以立即在我的
AVPlayer
上发送播放消息,而无需等待AVPlayerItem中的“状态”。我对此有点困惑。为什么不马上玩呢

大多数示例显示在AVPlayerItem的“状态”键上添加观察者。下面是一些代码:

self.asset!.loadValuesAsynchronouslyForKeys(keys, completionHandler: {
    dispatch_async(dispatch_get_main_queue(), {

        var error:NSError?
        for key in keys {
            var status = self.asset!.statusOfValueForKey(key, error: &error)
        }

        var status = self.asset!.statusOfValueForKey("playable", error: &error)
        if status == AVKeyValueStatus.Loaded {
            playerItem = AVPlayerItem(asset: self.asset)
            playerItem!.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.Initial, context: itemContext)
            self.player = AVPlayer(playerItem: playerItem)
            playerLayer = AVPlayerLayer(player: self.player)
            playerLayer!.videoGravity = AVLayerVideoGravityResizeAspectFill
            playerLayer!.frame = self.view!.bounds
            self.view.layer.addSublayer(playerLayer)

            //self.player!.play() [This seems to work!]
        } else {
            println("Error in async load of keys")
        }

    })
})            
示例显示,我需要实现一个观察器,它等待从
AVPlayerItem
获取状态,然后调用AVPlayer上的play

 override func observeValueForKeyPath(keyPath: String!, ofObject object: AnyObject!, change: NSDictionary!, context: CMutableVoidPointer) {

    dispatch_async(dispatch_get_main_queue(), {
            self.player!.play()
        })

    super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
}

关于这一点还有一些其他问题,但没有人解释为什么不必等待AVPlayerItem上的“状态”键就可以播放播放器,因为播放数据可能还没有准备好(网络状况不佳)

这就是为什么玩家决定何时玩,这就是为什么你们应该观察AVPlayerStatusReadyToPlay案例的状态