两个AVPlayer视频不同步(Swift)

时间:2017-08-07 15:00:39

标签: ios swift avplayer

我有两个 protected void Page_Load(object sender, EventArgs e) { AddRequestType addreq = new AddRequestType(); addreq.executionMode = ExecutionModeType.asynchronous; addreq.returnData = ReturnDataType.identifier; identity ident = new identity(); ident.username = new string[] { "jsmith" }; X509Store store = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly); var cert = store.Certificates; ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11; SPMLService client = new SPMLService(); client.UseDefaultCredentials = true; var res = client.SPMLAddRequest(addreq); AddResponseType addresp = new AddResponseType(); //addresp.requestID={ requestID}; var status = addresp.status; var error = addresp.error; var error_msg = addresp.errorMessage; } 个项目播放持续时间相同的视频(10秒)。目标是让它们循环并保持彼此同步。我将它们添加为相同AVPlayer()的子图层,然后在每个图层上调用UIView

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

我没有选择创建AVMutableComposition,因为我已经看过其他帖子的建议,所以有没有两个独立的玩家真正保持同步并且同时玩游戏?

谢谢!

1 个答案:

答案 0 :(得分:3)

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

编辑:

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

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