AVPlayer不同步

我真的没有想法,所以我不得不再次问你们

我正在构build一个使用三个AVPlayer实例的iPhone应用程序。 他们都在同一时间玩,这是非常重要的。 我曾经运行这个代码:

CMClockRef syncTime = CMClockGetHostTimeClock(); CMTime hostTime = CMClockGetTime(hostTime); [self.playerOne setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime]; [self.playerTwo setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime]; [self.playerThree setRate:1.0f time:kCMTimeInvalid atHostTime:hostTime]; 

这工作完美。 但是前几天刚刚停止工作,三名选手被推迟了大概300-400毫秒(这是很大的方法,100毫秒以内的任何事情都可以)。 其中两个AVPlayer有一些audio处理,比“正常的”AVPlayer花费的时间要多一些,但之前使用过,以及currentTime属性告诉我,这些播放器被延迟,所以同步似乎失败。

我不知道为什么它停止工作,我没有真正改变的东西,但我使用的是一个观察者,我可以问self.playerX.currentTime属性,这让我延迟了大约.3 – .4秒。 ..我已经尝试重新同步播放器,如果延迟> .1f但延迟仍然存在。 所以我认为player1和2的audio处理不能对延迟做出响应,因为currentTime属性确实知道它们被延迟了(我希望你知道我的意思)。 也许你们中的一些人知道我为什么会有这么可怕的拖延,或者能够提供给我另外一个想法。

提前致谢!

所以,我find了解决办法。 我忘了[self.playerX prerollAtRate:]。 我想如果观察者是AVPlayerReadyToPlay,那就意味着玩家已经“真正”准备好了。 事实上,事实并非如此。 AVPlayer准备播放后,必须预先播放。 一旦完成,你可以同步你的砂金。 延迟现在在0.000006秒。