是否可以使用iPhone上的音频单元解码MMS + WMA2流?

时间:2010-03-15 08:55:28

标签: iphone core-audio audio-streaming mms wma

我不确定音频单元是否可以在iPhone上的流式音频方案中用作编解码器。

我已经在不同的地方读过它可以做到的,但我还没有看到任何示例或适当的文档。相反,我发现大多数发布的应用程序都使用了ffmpeg和libmms。

我感谢你能给我的任何帮助。

2 个答案:

答案 0 :(得分:5)

音频单元非常低级,如果您想要进行一些重音频处理(如实时音频效果),它们非常有用。据我所知,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);
    }
}

答案 1 :(得分:0)

再看一遍,似乎iOS只允许内置音频设备,与Mac OS X不同。内置音频设备在“适用于iOS的音频设备托管指南”中有描述 - > “使用特定音频单元”,可在线here找到。