在 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 4查看Multipeer Connectivity框架中的MCBrowserViewController
Swift2.0 Multipeer Connectivity 无法连接
swift Multipeer Connectivity,使用邀请处理程序取消邀请