【问题标题】:iOS - synching audio between devices with millisecond accuracyiOS - 以毫秒精度在设备之间同步音频
【发布时间】:2012-09-06 23:28:55
【问题描述】:

我需要以毫秒精度在联网设备中同步音频。我拼凑了一些效果很好但并不完全可靠的东西:

1)服务器设备发送一个带有 timeSinceClick 参数的 rpc

2) 客户端设备根据 rpc 在传输中花费的时间启动相同的点击,

3)System.Diagnostics.StopWatch 会定期检查所有连接的设备,以确保播放与绝对时间没有太大偏差,并在必要时进行更正

有没有更优雅的方法来做到这一点?此外,如果将非 iOS 设备添加到组合中,我的做法需要手动同步:延迟差异使得自动化变得非常困难......

我都是眼睛!

干杯,

格雷佐

【问题讨论】:

    标签: ios audio time synchronize


    【解决方案1】:

    很难以毫秒精度在同一台机器上同步多个设备,所以如果你能够在多台机器上做到这一点,我会说你做得很好。对于您描述的步骤,我对 iOS 不够熟悉,但我可以告诉您如何以跨平台的方式处理此问题。也许你的方法等同于同样的事情。

    1. 一台机器(“主机”)会向所有其他机器发送一个 UDP 数据包。
    2. 所有其他机器都会尽快回复。
    3. 接收回复所需的时间除以 2,将(大约)是从一台机器获取数据包到另一台机器所需的时间。 (这必须经过验证。处理和发送数据包可能需要更长的时间?可能不会)
    4. 重复步骤 1-3,忽略任何极值并对剩余结果取平均值后,您就知道从一台机器到另一台机器接收消息需要多长时间。
    5. 现在“同步”UDP 数据包可以从主计算机发送到“从”计算机。同步数据包将包含延迟信息,因此当保存机器收到数据包时,它们知道它们是 x 毫秒前发送的。可能需要发送多个同步数据包,以防网络延迟或丢弃其中一些数据包。

    【讨论】:

    • 非常感谢您的回答!唉,这与我已经在做的事情非常接近......我想知道是否有更绝对的做事方式。例如,airport express 如何通过 2 个不同的扬声器完美同步地进行播放?或者也许有办法以某种方式获得超精确的原子时间,并完全绕过同步问题?
    • 我不熟悉机场快线。有可能,因为它是硬件,它们可以首先更准确地相互同步。我认为这种技术的准确性实际上取决于定时测量的可靠性和可重复性。例如,您可能希望重复几次并使用最低值,因为高于最低值的任何内容都是错误的。
    • 别想原子钟了。你的时钟有多准确并不重要,重要的是它们彼此同步的紧密程度。与网络延迟的任何偏移相比,两台机器之间的任何时钟漂移都将很小(除非您计划连续运行许多小时——比如一周)。
    • 感谢 cmets。使用最低值是一个非常好的主意,可以。如果可以的话,我会投票!关于原子钟:你当然是对的。如果您不介意,我不会接受您的回答,因为可能会有更多关于该主题的意见。
    • 好的。祝你好运!一定要回来报告你的发现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    相关资源
    最近更新 更多