两个 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:)
当所有玩家都被预选时
我有两个 AVPlayer()
项目播放相同持续时间(10 秒)的视频。目标是让它们循环并彼此保持同步。我将它们添加为相同 UIView
的子层,然后在每个子层上调用 player.play()
。
问题是,由于代码执行显然有最轻微的延迟,因为一个在另一个之后被调用,视频不同步(虽然只有几毫秒,但很明显)。
我没有创建 AVMutableComposition 的选项,正如我在其他帖子中看到的那样,所以有没有办法让两个独立的播放器真正保持同步并完全同时播放?
谢谢!
如果要实现同步,应该用AVPlayer分别加载视频,观察每个播放器的AVPlayerItemStatus
属性。只有当所有玩家的状态都为 .readyToPlay
时,您才能循环播放玩家并设置 .rate
属性.
编辑:
您也可以使用 setRate(_:time:atHostTime:)
同步它们。不要忘记在调用 setRate
之前使用 preroll(atRate:completionHandler:)
开始加载媒体数据。基本上:
- 等待
readyToPlay
preroll(atRate:completionHandler:)
当所有玩家都准备好时setRate(_:time:atHostTime:)
当所有玩家都被预选时