2011-02-15 103 views
4

我一直试图在我的应用程序中使用两个不同的AVQueuePlayer对象。第一位玩家播放一系列通过网络流传的短片。第二个对象只播放一个视频,但它的长度要长得多。它也是流式传输。我已经验证所有剪辑都有适当的音频/视频同步。iOS多个AVPlayer对象导致音频/视频同步丢失

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

我已经尝试了一些东西,包括在清理第一个玩家和分配第二个玩家之间增加一个延迟,删除所有对AudioSession代码的调用等。这似乎没有任何帮助。偶尔会有音频同步,但实际上它只发生在大约30次中。

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

感谢任何人都可以帮助!

回答

3

我自己也面临同样的问题。我横跨AVPlayerLayer文档中的一些信息来了:

在播放期间,AVPlayer可以 其视觉输出和它的可听 输出到一个或多个 独立地计时的音频输出 设备通过调整之间补偿时间漂移它的 相关球员层的时间。这些调整的效果 通常都很小 ;然而,希望 保持完全不受此类调整影响的客户可能希望将其定时重要的其他 层放置到它们的层树的独立定时子树 中。

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

不幸的是,我还没有将其解译为实际的代码,但我想它可能会帮助您指出正确的方向。如果你想出了一个解决方案,那么请在这里发布,我也会这样做。

+0

在做了一些更多的测试之后,如果我在第二个玩游戏之前摆脱了第一个玩家,那么A/V同步就好了。 [玩家暂停]; [玩家发布]; player = nil; [player2 play];但是好像你说过你已经这样做了吗? – SteveB 2011-04-01 14:11:41