3

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

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

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

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

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

我满眼!

干杯,

格雷佐

4

1 回答 1

0

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

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