我想写一个网络应用程序,它允许我将MP3的音频播放同步到~50ms,或者足够接近人耳无法检测到差异。
这个想法是两个或更多智能手机可以与蓝牙扬声器配对,两个或更多扬声器可以在同一时间播放相同的音频。
您如何建议我在客户端和服务器端进行设置?我打算在后端使用Rails / Ruby,在移动设备上使用iOS / obj。
我曾想过同步到服务器上的全局/原子钟,并让服务器向客户提供何时开始播放/跳入已播放曲目的指令。我担心的是,如果我想要传输音频,就不可能将歌曲加载到内存中并在毫秒级别上准确开始播放。
思想?
答案 0 :(得分:1)
互联网数据包传输中的抖动太大,因此忘记通过互联网进行同步。但是,当你在“设置”中打开自动日期/时间时,你可以检查操作系统中仍然使用的NTP的准确性(我猜,我知道旧的UNIX使用它),但我的猜测是它赢了“也足够好。但也许操作系统也可能使用其他时间源,如GPS;我不知道iOS是如何做到的,但是在20ms内的准确度是不可预期的。您可以创建实验性应用程序来检查它。
所以,剩下的是离家更近的同步,意味着直接在设备之间。当然,您需要确保所有设备都已加载(足够)歌曲,并已预先加载AVAudioPlayer
或您正在使用的任何设备,以便能够立即开始播放。 (实际上,使用更高级别的'AVAudioPlayer` API可能不是最佳选择,因为它可能会提供更高的延迟,以及比较低级别的API更重要的更高抖动。)
这里有三个想法(一个设备需要主控触发开始播放,其他设备是等待触发的从设备):
答案 1 :(得分:0)
我将使用一个使用原子钟进行同步的解决方案,以及一个允许服务器指令/消息以近距离同步方式发送到所有设备的外部服务。