我真的没了主意,所以我不得不再次问你们...AVPlayer不同步
我建立它使用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属性,这让我延迟了大约.3- .4秒......如果delay> .1f,我已经尝试重新同步球员,但延迟仍然存在。所以我认为player1和2的音频处理不能对延迟做出响应,因为currentTime属性确实知道它们被延迟了(我希望你知道我的意思)。也许你们中的一些人知道我为什么会有这么可怕的延迟,或者能够提供给我另一个想法。
在此先感谢!
感谢分享,这个解决方案非常有帮助。 –
这是否也适用于远程资产? – zevarito
谢谢Max,你能编辑你的答案以包含原始代码吗?我不明白,setRate是否为每个玩家在prerollAtRate的完成处理程序中调用? –