IOS同步音乐流光

时间:2013-03-10 04:41:19

标签: ios stream real-time core-audio sync

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

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

1 个答案:

答案 0 :(得分:9)

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

下面是我的回答:

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

    湾您希望获取此数据并将其分组为数据包,每个数据包都包含您稍后将用于管理其传递的标头信息,并确保它们已同步。因此,例如每个数据包的时间戳,它的顺序,音乐文件哈希等..请参阅this回答以获得一个想法,然后看看this出色的教程,向您展示详细说明如何为任何目的打包数据包。

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

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

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

    最后但并非最不重要的是你绝对想要获取learning core audio的副本..任何在iOS上做核心音频的人都需要这个。另请参阅this回答之后的讨论。当涉及到核心音频/实时iOS应用时,它会引起您的注意。

    祝你好运!