【问题标题】:How to synchronize an audio on 2 or more ios devices如何在 2 个或更多 ios 设备上同步音频
【发布时间】:2013-10-11 09:15:23
【问题描述】:

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

我已经尝试过:

  1. 5 秒后在所有设备上播放歌曲。 (仍然会导致毫秒的延迟)
  2. 发送小文本通知以识别歌曲的播放,然后开始在所有设备上播放。但是发送和接收这个通知需要几毫秒的时间:(:(
  3. 在所有设备上将时间设置为自动,然后检查短信传递的时间差,每次测试都有毫秒的差距。

【问题讨论】:

  • 我正在使用套接字连接来传输数据。数据发送速度非常快,但我仍然需要一个准确的播放时间。
  • 您的问题可能会被关闭,因为它没有显示任何努力。此外,由于有重复的问题,它显示尚未搜索现有帖子,例如stackoverflow.com/questions/17377390/…也就是说,虽然这是一个不同的问题,但看看这个答案stackoverflow.com/questions/8357514/…
  • 我正在搜索过去 4 天的内容。也扫描了这些链接,但没有帮助....
  • 然后添加您已经考虑过的内容以及为什么它没有效果的详细信息。如果您有效地做出贡献,您将从 SO 中获得更多收益
  • 我已经编辑了我的问题。你现在能帮帮我吗..

标签: iphone ios


【解决方案1】:

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

CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();

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

从那里您可以轻松地在设置歌曲的设备上实例化 2 AVAudioPlayer 并调用prepareToPlay,最后根据同步延迟触发播放方法。 这应该会给您带来不明显的精度。

您可以采取的另一条路线是将AudioUnit 放置在连接到麦克风的第二台设备上,以便根据第一台设备发出的声音同步音乐。

【讨论】:

  • 如果您遇到与非对称网络请求/响应相关的问题,可能值得以相反的方式(从 B 到 A)重复该过程的第一部分,然后对结果进行平均。
【解决方案2】:

已知问题

在睡眠或等待极其精确的时间间隔时,计时器可能会延迟最多 1 毫秒。

供参考: https://developer.apple.com/library/ios/releasenotes/General/RN-iOSSDK-7.0/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 2012-09-06
    • 2013-04-30
    • 2014-12-26
    相关资源
    最近更新 更多