两个 AVPlayer 视频不同步 (Swift)

Two AVPlayer videos out of sync (Swift)

我有两个 AVPlayer() 项目播放相同持续时间(10 秒)的视频。目标是让它们循环并彼此保持同步。我将它们添加为相同 UIView 的子层,然后在每个子层上调用 player.play()

问题是,由于代码执行显然有最轻微的延迟,因为一个在另一个之后被调用,视频不同步(虽然只有几毫秒,但很明显)。

我没有创建 AVMutableComposition 的选项,正如我在其他帖子中看到的那样,所以有没有办法让两个独立的播放器真正保持同步并完全同时播放?

谢谢!

如果要实现同步,应该用AVPlayer分别加载视频,观察每个播放器的AVPlayerItemStatus 属性。只有当所有玩家的状态都为 .readyToPlay 时,您才能循环播放玩家并设置 .rate 属性.

编辑:

您也可以使用 setRate(_:time:atHostTime:) 同步它们。不要忘记在调用 setRate 之前使用 preroll(atRate:completionHandler:) 开始加载媒体数据。基本上:

  • 等待readyToPlay
  • preroll(atRate:completionHandler:)当所有玩家都准备好时
  • setRate(_:time:atHostTime:) 当所有玩家都被预选时