IOS同步音乐流光

tan*_*cik 2 sync real-time stream core-audio ios

我试图通过GKSession将音乐从一个设备流式传输到另一个设备,以便音乐完全同步.到目前为止,我知道如何使用来获取音频,但我不确定一些事情.我很确定我必须使用AudioFileReadPackets来传输数据.

  1. 我应该如何打包并从内存缓冲区中将数据包作为流发送?
  2. 另一方面,如何将接收的数据包转换回音频流?
  3. 确保数据包同步播放的最佳方法是什么?

abb*_*ood 9

重要更新: 我刚刚在github上创建了一个repo,几乎可以满足您的要求.看看这个!

以下是我的回答:

  1. 一个.首先,您希望从音乐中获取音频缓冲区数据,类似于我在github项目中的操作.

    湾 您希望获取此数据并将其分组为数据包,每个数据包都包含您稍后将用于管理其传递的标头信息,并确保它们已同步.所以例如每个数据包的时间戳,它的顺序,音乐文件哈希等等.看到这个答案得到一个想法,然后看看这个优秀的教程,详细介绍如何打包数据包任何目的.

  2. 在网络的另一端,您打包的方式与打包非常相似.再次参考上面的教程,详细讨论如何做到这一点.

  3. 这是最难的部分.幸运的是,你只处理两个设备..所以你可以用GKSession来做..否则你将不得不降低一个级别(即使用bonjour ..因为GKSession是...的包装,这增加了很多开销你买不起真正的应用程序..但不要惊慌.. 本书有一个很好的简单的例子,使用bonjour ..)

我们的想法是你想在另一端收集足够的数据包来填充音频队列缓冲区,然后你想发送一个不可靠的数据包(读取:udp协议)来跳转开始音乐的播放.使用udp发送,它接近即时传送(我认为人耳不会区分两个设备之间的延迟)..偶尔会丢失一个不可靠的数据包,所以你必须要么活着用它或想办法处理它.

最后但并非最不重要的是你肯定想要获取学习核心音频的副本..任何在iOS上做核心音频的人都需要这个.另外请看一下这个答案之后的讨论......当涉及到核心音频/实时iOS应用时,它会引起你的注意.

祝好运!