IOS同步音乐流媒体

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案1】:

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

以下是我的旧答案:

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

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

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

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

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

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

祝你好运!

【讨论】:

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

以上是关于IOS同步音乐流媒体的主要内容,如果未能解决你的问题,请参考以下文章

如何将音乐添加到媒体 iOS [关闭]

iOS 6 流媒体播放器 com.apple.coremedia.networkbuffering 错误

iOS音频播放

iOS开发 - 多媒体

HMI-52-多媒体音乐播放器 1

IOS 多媒体