4

我一直在尝试AVQueuePlayer在我的应用程序中使用两个不同的对象。第一个播放器播放一系列通过网络传输的短视频片段。第二个对象只播放一个视频,但长度要长得多。它也是流式传输的。我已验证所有剪辑都具有正确的音频/视频同步。

我注意到的是,如果我AVPlayer在事先创建另一个对象之后创建一个对象,第二个播放器中的音频/视频同步就会丢失。音频在大约 800 毫秒 - 1500 毫秒之间播放太早了。

我尝试了很多事情,包括在清理第一个播放器和分配第二个播放器之间添加延迟,删除对AudioSession代码的所有调用等。这些似乎都没有帮助。音频偶尔会同步,但实际上只发生大约 30 次中的 1 次。

有没有其他人看到过同样的行为?有谁知道如何解决这一问题?

感谢任何可以提供帮助的人!

4

1 回答 1

3

我自己也面临同样的问题。我在 AVPlayerLayer 文档中发现了一些信息:

在播放期间,AVPlayer 可以通过调整其关联播放器层的时序来补偿其视觉输出和其到一个或多个独立时钟音频输出设备的听觉输出之间的时间漂移​​。这些调整的影响通常很小;但是,希望完全不受此类调整影响的客户可能希望将其他时序重要的层放入其层树的独立时序子树中。

您可以使用相同的 AVPlayer 对象创建任意数量的播放器层。只有最近创建的播放器层才会真正在屏幕上显示视频内容。

不幸的是,我还没有将其解读为实际代码,但我认为它可能有助于为您指明正确的方向。如果您确实提出了解决方案,请在此处发布,我也会这样做。

于 2011-04-01T13:47:03.870 回答