【问题标题】:Two AVPlayer videos out of sync (Swift)两个 AVPlayer 视频不同步 (Swift)
【发布时间】:2017-08-08 05:20:43
【问题描述】:

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

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

正如我看到其他帖子所建议的那样,我没有创建 AVMutableComposition 的选项,那么是否有两个独立的播放器真正保持同步并同时播放?

谢谢!

【问题讨论】:

  • 根据我的理解,创建两个视图,分别具有在两个类中使用 functionToPlayVideo 实现的 avplayer 类。将两个视图添加到您正在使用的视图控制器中。现在在具有选择器“functionToPlayVideo”的两个视图类中添加观察者服务器。现在发布通知应该可以工作了。
  • @AadilAli 确实非常有趣的想法。我从来没有想过要以这种方式使用通知侦听器。我试试看。
  • @simplexity 请确认。不要忘记删除观察者。
  • @AadilAli 也许我不明白通知是如何以这种方式工作的。您能否通过某种示例提供答案,以帮助我开始使用多个通知侦听器。尝试搜索 SO 无济于事...

标签: ios swift avplayer


【解决方案1】:

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

编辑:

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

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

【讨论】:

  • 所以当我循环播放播放器并设置速率时,只要 .readytoplay 好,它就不会有相同的同步处理延迟?
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 2013-11-22
  • 2019-07-31
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
相关资源
最近更新 更多