【问题标题】:IOS synced music streamerIOS同步音乐流媒体
【发布时间】:2013-02-25 11:20:21
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    以下是我的旧答案:

    1. 一个。首先你想从你的音乐中获取音频缓冲区数据,类似于我在 github 项目中所做的。

      b.您想要获取这些数据并将其分成数据包,每个数据包都包含标头信息,您稍后将使用这些信息来管理它们的传递并确保它们被同步。因此,例如每个数据包的时间戳、它的顺序、音乐文件哈希等。请参阅this 答案以获得一个想法,然后查看this 优秀教程,该教程详细向您展示如何为任何目的打包一个数据包。

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

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

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

    最后但并非最不重要的一点是,您肯定想获取一份learning core audio.. 在 iOS 中做核心音频的任何人都需要这个。还请查看this 回答后面的讨论。它会引起您对核心音频/实时 iOS 应用程序的很多关注。

    祝你好运!

    【讨论】:

    • 感谢您发布您的存储库,这非常有帮助。
    • 是不是“不可靠的数据包”比 tcp 更多 udp :)?
    • 哇!你在那篇文章中解决了很多问题并创造了一些新的机会。最初,我对应用程序有这个简单的想法……哈哈。在我看来,你肯定被投了赞成票。
    • @abbood,我使用了你的代码,但我遇到了一些问题。你能帮帮我吗?
    猜你喜欢
    • 2012-06-07
    • 2012-05-17
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多