我实在是没办法了,只好再请教大家了……
我正在构建一个使用 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 有一些音频处理,这比“正常”AVPlayer 需要更多时间,但它以前可以工作,并且 currentTime 属性告诉我,这些播放器被延迟,因此同步似乎失败。
我不知道为什么它停止工作,我并没有真正改变什么,但我正在使用一个观察者,我可以在其中询问 self.playerX.currentTime 属性,这给了我大约 0.3-0.4 秒的延迟。 ..如果延迟>.1f,我已经尝试重新同步播放器,但延迟仍然存在。所以我认为player1和2的音频处理不能对延迟负责,因为currentTime属性确实知道它们被延迟了(我希望你明白我的意思)。也许你们中的某个人知道为什么我有如此可怕的延误,或者能够为我提供另一个想法。
提前致谢!
所以,我找到了解决方案。我忘了 [self.playerX prerollAtRate:]。我认为如果观察者是 AVPlayerReadyToPlay 则意味着播放器“真正”准备好了。事实上,事实并非如此。 AVPlayer 准备好播放后,必须对其进行预滚动。完成后,您可以同步您的放置器。现在延迟约为 0.000006 秒。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)