如何在两个或多个iOS设备上同步音频

5
我需要在特定的时间点执行一个操作(在多个设备上同时播放歌曲而不会有延迟)。我的要求是该应用程序不使用任何互联网连接。因此,我需要一个确切的播放数据(音频)的时间点。
我已经尝试过以下方法:
1. 在所有设备上延迟5秒后再播放歌曲。(仍然会造成毫秒级延迟)
2. 发送一个小型文本通知以标识歌曲的播放,然后在所有设备上开始播放。但是发送和接收这个通知需要几毫秒的时间 :(:(
3. 对所有设备进行自动时间设置,然后检查文本消息传递的时间差异,在每次测试中都存在毫秒间隔。

我正在使用套接字连接来传输数据。数据传输速度非常快,但我仍然需要一个精确的时间表来播放。 - Sundeep Saluja
1
你的问题可能会被关闭,因为它显示出你没有付出努力。此外,由于存在重复的问题,这表明你还没有搜索现有的帖子,例如http://stackoverflow.com/questions/17377390/what-is-the-best-method-of-synchronizing-audio-across-ios-devices-with-wifi。话虽如此,尽管这是一个不同的问题,但请查看这个答案https://dev59.com/DGsy5IYBdhLWcg3wvgdk#8492598。 - Max MacLeod
我已经搜索了4天了。也扫描了那些链接,但没有帮助... - Sundeep Saluja
1
请仔细考虑您已经考虑过的内容,并说明为什么它们没有起作用。如果您能有效地贡献,您将从 Stack Overflow 中获得更多帮助。 - Max MacLeod
我已经编辑了我的问题。你现在能帮我吗? - Sundeep Saluja
2个回答

7

首先,您需要同步两个设备的内部时间。显然,在iOS上可以拥有最精确的时钟,方法是:

CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();

然后,您需要将设备A的时间发送到设备B,检索设备B上的差异,并将其发送回A,然后将差异与网络事务中花费的时间进行比较。通过这种方式,您可以相当准确地同步2个设备的时间。(这是假定请求和响应之间的网络时间对称,并且在设备B上的计算没有太多开销)。
从那里,您可以轻松地在设备上实例化2个AVAudioPlayer,设置歌曲并调用prepareToPlay,最后根据同步延迟触发播放方法。这应该给您一个不易察觉的精度。
另一条路线是在第二个连接到麦克风的设备上放置一个AudioUnit,以便根据第一个设备发出的声音同步音乐。

如果您遇到与不对称网络请求/响应相关的问题,可能值得将过程的第一部分反向重复(从B到A),然后取平均结果。 - cescofry

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接