我必须在给定的时间点执行动作(在多个设备上一次播放没有延迟的歌曲)。我的要求是应用程序不应使用任何互联网连接。所以我需要一个确切的时间来播放数据(音频)]
我已经尝试过以下内容:
答案 0 :(得分:6)
首先,您需要同步2个设备的内部时间。 显然,iOS上最准确的时钟就是绝对时间:
CFAbsoluteTime now = CFAbsoluteTimeGetCurrent();
然后您需要将此时间从设备A
发送到设备B
,检索设备B
上的差异并将其发送回A
,然后将其与在网络交易中花费的时间。通过这种方式,您可以非常精确地同步2个设备的时间。 (假设网络时间在请求和响应之间是对称的,并且您在设备B
上的计算没有太多开销。)
从那里你可以轻松地在设置歌曲的设备上实例化2 AVAudioPlayer
并调用prepareToPlay
,最后根据同步延迟激活播放方法。
这应该会给你一个不明显的精确度。
您可以采取的另一种方法是在连接到麦克风的第二台设备上放置AudioUnit
,以便将音乐与第一个设备发出的声音同步。
答案 1 :(得分:1)
已知问题
睡觉或等待非常精确的时间间隔时,定时器可能会延迟最多1毫秒。
供参考: https://developer.apple.com/library/ios/releasenotes/General/RN-iOSSDK-7.0/