如何在2个或更多ios设备上同步音频

Sun*_*uja 5 iphone ios

我必须在给定的时间点执行动作(在多个设备上一次播放歌曲而没有延迟).我的要求是应用程序不应使用任何互联网连接.所以我需要一个确切的时间来播放数据(音频)]

我已经尝试过以下内容:

  1. 在所有设备上播放5秒钟后的歌曲.(仍然导致滞后毫秒)
  2. 发送小文本通知以识别歌曲的播放,然后开始在所有设备上播放.但发送和接收此通知需要几毫秒的时间:( :(
  3. 在所有设备上设置自动时间,然后检查文本消息传递的时间差,每次测试都有毫秒间隔.

ces*_*fry 6

首先,您需要同步2个设备的内部时间.显然,你在iOS上可以拥有的最准确的时钟是绝对时间:

CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
Run Code Online (Sandbox Code Playgroud)

然后,您需要将此时间从设备发送A到设备,B检索设备上的差异B并将其发送回A,然后将差异与网络事务中花费的时间进行比较.通过这种方式,您可以非常精确地同步2个设备的时间.(这假设网络时间在请求和响应之间是对称的,并且您在设备上的计算没有太多开销B).

在此输入图像描述

从那里你可以轻松地AVAudioPlayer在设置歌曲和呼叫的设备上实例化2 prepareToPlay,最后根据同步的延迟激活播放方法.这应该给你一个不明显的精度.

您可以采取的另一种方法是在AudioUnit连接到麦克风的第二个设备上放置一个路径,以便根据第一个设备发出的声音同步音乐.