两个AVPlayer视频不同步(SWIFT)

问题描述:

我有两个AVPlayer()项目打相同时间(10秒)的视频。目标是让他们循环并保持彼此同步。我加他们为同一UIView的子层,然后调用player.play()对他们中的每一个。两个AVPlayer视频不同步(SWIFT)

的问题是,虽然作为代码执行显然有作为一个被另一种称为后丝毫的延迟,视频不同步的(虽然只有几毫秒,这是明显的)。

我没有选择创建一个AVMutableComposition,因为我已经看到其他帖子的建议,那么无论如何有两个单独的球员真正保持同步,并在同一时间玩完全吗?

谢谢!

+0

的可能的复制[如何安排在准确的时间iOS的方法调用(HTTPS ://stackoverflow.com/questions/22866066/how-to-schedule-ios-method-call-at-exact-time) – the4kman

+0

按我的理解,创建已经分别在两个班,functionToPlayVideo avplayer实现的类两种观点。将这两个视图添加到您正在使用的视图控制器。现在,在具有选择器“functionToPlayVideo”的两个视图类中添加oberserver。现在发布通知应该工作。 –

+0

@AadilAli确实非常有趣的想法。我从来没有想过用这种方式来使用通知监听器。我会试一试。 – simplexity

如果要实现同步,您应该分别与AVPlayer加载视频,观察每个球员的AVPlayerItemStatus财产。只有当所有的球员都有状态.readyToPlay可以遍历球员和设置.rate属性。

编辑:

您还可以通过使用同步setRate(_:time:atHostTime:)他们。不要忘记在拨打setRate之前开始使用preroll(atRate:completionHandler:)加载媒体数据。基本上是:

  • 等待readyToPlay
  • preroll(atRate:completionHandler:)当所有玩家都准备好
  • setRate(_:time:atHostTime:)当所有球员都预卷
+0

所以当我循环播放器和设置速率,只要.readytoplay是好的,它不会有同样的同步处理延迟? – simplexity

+0

@simplexity我刚刚编辑了我的答案 –