我不确定音频单元是否可以在 iPhone 上的流音频场景中用作编解码器。
我已经在各个地方读到它可以完成,但我还没有看到任何示例或适当的文档。相反,我发现大多数发布的应用程序都使用了 ffmpeg 和 libmms。
我很感激你能给我的任何帮助。
我不确定音频单元是否可以在 iPhone 上的流音频场景中用作编解码器。
我已经在各个地方读到它可以完成,但我还没有看到任何示例或适当的文档。相反,我发现大多数发布的应用程序都使用了 ffmpeg 和 libmms。
我很感激你能给我的任何帮助。
音频单元是非常低级的,如果你想做一些繁重的音频处理,比如实时音频效果,它很有用。据我所知,Audio Units 不支持 wma 音频编解码器。为此,您必须使用 FFmpeg 库。
由于 FFmpeg 也支持 mms,因此无需使用 libmms 等其他库来连接 mms 音频流。您可以使用 FFmpeg 连接到 mms 音频流,如下所示:
const char *url = "mmst://somemmsurlhere.com";
avformat_open_input(formatCtx, url, NULL, NULL);
要解码音频数据,您可以使用avcodec_decode_audio3函数。准备好解码的音频数据后,我建议您使用 AudioQueue 框架进行播放。AudioQueue 通过调用您定义的回调函数来向您询问音频数据。这些回调函数之一是 AudioQueueOutputCallback,您可以在其中传递解码后的音频数据,如下所示:
- (void)handlePlayCallback:(AudioQueueRef) inAudioQueue buffer:(AudioQueueBufferRef) inBuffer {
// copy decoded audio data to inBuffer->mAudioData
// and set the size of the copied data like this
// inBuffer->mAudioDataByteSize = data_written
if(inBuffer->mAudioDataByteSize > 0) {
AudioQueueEnqueueBuffer(inAudioQueue, inBuffer, 0, NULL);
}
}
再看一遍,iOS 似乎只允许内置音频单元,这与 Mac OS X 不同。内置音频单元在“iOS 音频单元托管指南”->“使用特定音频单元”中进行了描述,其中可以在这里在线找到。