AVQueuePlayer是否支持异步添加AVPlayerItems?

Mal*_*Box 2 iphone objective-c core-video ios

我有一个视频播放器,需要播放来自网络的一系列视频.这些视频的URL不是事先知道的,因为它们来自其他HTTP请求的XML或JSON响应.

随着视频网址的出现,我创建AVPlayerItems并添加它们AVQueuePlayer.我观察玩家状态和项目状态以确定正在播放的项目等.

问题是玩家似乎进入各种奇怪的状态, AVFoundationErrorDomain error -11800然后玩家就会拒绝玩任何东西.即使在取消分配AVQueuePlayer和开始新的视频之后,之前播放的视频也拒绝播放.

AVPlayerItems在播放AVQueuePlayer支持的操作时添加新内容,还是应该以另一种方式执行此操作?如果它受支持,我应该注意/做什么(例如.线程问题?KVO问题?)使这项工作?

Mal*_*Box 6

答案是肯定的,AVQueuePlayer确实适用于AVPlayerItems异步添加.重要的部分是在文档中:

AVPlayer序列化在调度队列上回放期间动态发生的更改的通知.默认情况下,此队列是主队列(请参阅dispatch_get_main_queue).为了确保在报告播放状态的动态变化时安全访问播放器的非原子属性,您必须使用接收器的通知队列序列化访问.在通常情况下,通过在主线程或队列上调用AVPlayer的各种方法,自然可以实现这种序列化.

由于KVO观察者可能会触发其他线程,因此从主线程调用AVPlayer(和AVQueuePlayer)所有方法至关重要.

如果你不这样做,你会看到奇怪的行为,并且AVFoundationErrorDomain -11800当事情进入不一致的状态