我该如何将iOS设备上的音频流式传输到另一个设备,例如Mac或另一个iOS设备?在Google上只能找到像AirPlay这样的解决方案,没有关于如何在自己的应用程序中实现它的内容。我认为您需要通过某种类型的服务器来进行传输。
要明确一点,我不是想复制AirPlay。我只是想做非常基本的VoIP。
我该如何将iOS设备上的音频流式传输到另一个设备,例如Mac或另一个iOS设备?在Google上只能找到像AirPlay这样的解决方案,没有关于如何在自己的应用程序中实现它的内容。我认为您需要通过某种类型的服务器来进行传输。
要明确一点,我不是想复制AirPlay。我只是想做非常基本的VoIP。
简单的VOIP使用案例:
步骤1. 使用AV Foundation记录音频并使用压缩编码器
步骤2. 将数据包流式传输到另一台设备(例如RTP)
步骤3. 在远程设备上解码和播放音频数据包
更复杂的VOIP使用案例包括发现用户,建立连接。
以下链接可能会帮助您入门:
编辑 - 2011年8月12日
我没有意识到你想要在设备之间传递音频。你可以随时使用CFNetwork并简单地将其插入设备中。关键是要检测它。还可以考虑一下Bonjour服务。您仍然需要使用AudioToolbox将音频处理为缓冲区,并通过Bonjour或套接字进行传输。
结束编辑
@greg AVFoundation提供了像AVAudioRecorder这样的功能,但它不能完全按照他的要求进行数据流传输。
我建议你看看AudioToolbox。如果你使用AudioQueue,你可以指定一个用于数据流传输的格式。然后,添加一个输入队列回调函数,你就可以访问录制的音频的原始数据包。
你可以查看iLBC编解码器。它的占用空间足够小,可以让你在3G网络上完成所有操作。
这里有一个很好的苹果参考文档,关于AudioQueue编程的内容: http://developer.apple.com/library/mac/#documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AQRecord/RecordingAudio.html
祝你好运!
你说你不想使用AirPlay。如果这样,你需要在iOS设备上运行自己的服务器。这当然是可能的,有一些应用程序可以运行各种任务的服务器。然而,我对这个主题不是很熟悉,似乎你正确地指出了网上关于这方面的信息不多。
话虽如此,我建议你看看Darwin Streaming Server。它似乎有点老旧,但是它是开源的,可能对你有用。
我认为一个好的开始是理解CoreAudio示例,例如SpeakHere(它使用低级C APIs记录和播放声音。CoreAudio是AVFoundation的祖先之一)
正如@DexterW所说,您需要了解AudioQueue等知识。
在那之后,您可以考虑用于流式传输的服务器/数据包 :)
希望能有所帮助。
在两个iOS设备上运行此应用程序;它将自动连接两个设备到您的网络,并在它们之间开始流式传输音频。
界面由单个UI组件组成,具体来说是一个文本字段,用于记录应用程序事件。这将使您更容易理解应用程序的架构。
您需要最新的 Xcode 9 和 iOS 11 的 beta 版本。
如果您有任何问题,请告诉我。