我认为我可以简单地通过属性"rate"来检查AVPlayer的状态。
这是我创建播放器实例的方式:
player = AVPlayer(URL: stream) // streaming from the internet
player!.play()
在以后的某个时候,我会做这样的事情
println(player!.rate)
这是我发现的:
- 在模拟器中,如果播放器没有运行,我会得到"0.0",如果它正在运行,我会得到"1.0"。
- 如果我启动播放器但中断互联网连接,它会将值从 1 更改为 0。
- 但是,在我的 iPhone 上,即使我进入飞行模式,该属性也会保持值 1?!
您知道为什么会发生这种情况以及我如何检查流条件吗?
到目前为止,我已经尝试了一个观察者:
player!.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.New, context: nil)
但即使是"observeValueForKeyPath"方法也不会在我的iPhone测试用例中被触发。
在此处查看 Apple 文档,然后滚动到"键值观察"部分。尤其是该部分中的#3。
它帮助我使我的实施工作。我生成的代码如下所示:
//Global
var player = AVPlayer()
func setUpPlayer() {
//...
// Setting up your player code goes here
self.player.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions(), context: nil)
//...
}
// catch changes to status
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
print("obsrved")
}
我无法按照用户@gabbler的建议在当前项目上添加观察者。
但是,它有助于像这样使用通知中心:
NSNotificationCenter.defaultCenter().addObserverForName(
AVPlayerItemFailedToPlayToEndTimeNotification,
object: nil,
queue: nil,
usingBlock: { notification in
self.stop()
})
请注意,stop() 是同一类中的一个方法,它停止流就像单击停止按钮一样。