在 Swift 中通过 Multipeer Connectivity 临时同步两个 iOS 设备

Posted

技术标签:

【中文标题】在 Swift 中通过 Multipeer Connectivity 临时同步两个 iOS 设备【英文标题】:Temporally synchronize two iOS devices over Multipeer Connectivity in Swift 【发布时间】:2015-07-07 18:10:30 【问题描述】:

我想在 Swift 中使用 Multipeer Connectivity 临时同步两个 ios 设备(因此它应该适用于 WIFI 和蓝牙)。

理想情况下,我需要在 0.03 毫秒内进行同步,但 0.3 毫秒是可以接受的。

到目前为止,我正在播放来自设备 1 的声音并使用设备 2 录制,测量从设备通过 Multipeer Connectivity 相互连接的那一刻起的时间。

很遗憾,这并不能提供我的应用程序所需的准确时间同步。

【问题讨论】:

【参考方案1】:

只需从一个设备发送当前时间,然后在收到消息时在另一端进行比较。

准备消息:

// this is the value to send    
let date = NSDate()

关于消息接收代码:

let interval = NSDate.timeIntervalSinceDate(theDate)

该间隔是自在其他设备上创建初始日期以来经过的时间。

【讨论】:

感谢您的建议。但是如果我理解得很好,A 会将它发送给 B,B 在 t 之后接收它。但它并没有告诉我如何同步 A 和 B。因此,例如,如果 A 的时间是 100,B 的时间是 200,并且 t 从 A 传输到 B 需要 20,B 将在 220 收到 100,但是它没有向我提供有关同步两个设备的信息,是吗? 使用playAtTime:,一个属于AVAudioPlayer的方法/函数。如果没有有关您的音频播放的信息,我假设您正在使用该默认音频播放器实现。 playAtTime: 将 NSTimeInterval 作为参数,因此非常适合与您创建的区间变量一起使用。 感谢您的提示。所以,如果我跟着你,A 将它的时间 (100) 发送给 B (200),例如他在 220 收到的,并且可以要求在 220 + 延迟时间播放一些东西。但是,我们如何知道 A 发送消息和 B 接收消息之间的时间?那么在我们的例子中是 20 个? 嗨,克里斯,即使使用您之前建议的方法,我仍在努力暂时同步两个 iOS 设备。看起来函数 playAtTime 中总是存在延迟。有什么想法可以获得更准确的时间同步吗?

以上是关于在 Swift 中通过 Multipeer Connectivity 临时同步两个 iOS 设备的主要内容,如果未能解决你的问题,请参考以下文章

swift Swift - Multipeer连接

如何使用swift 4查看Multipeer Connectivity框架中的MCBrowserViewController

Swift2.0 Multipeer Connectivity 无法连接

swift Multipeer Connectivity,使用邀请处理程序取消邀请

在 Swift 2 中通过“prepareForSegue”传递数据

在 swift 2 中通过 segue 传递数据