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

是否可以使用iPhone上的音频单元解码MMS+WMA2流?,iphone,core-audio,audio-streaming,mms,wma,Iphone,Core Audio,Audio Streaming,Mms,Wma,我不确定音频单元是否可以在iPhone上的流式音频场景中用作编解码器 我在不同的地方读到过,这是可以做到的,但我没有看到任何例子或适当的文档。相反,我发现大多数发布的应用程序都使用了ffmpeg和libmms 非常感谢您能为我提供的任何帮助。再看一遍,iOS似乎只允许内置音频单元,与Mac OS X不同。内置音频单元在iOS音频单元托管指南->使用特定音频单元中进行了描述,可以在网上找到。音频单元是非常低级的,如果您想进行一些繁重的音频处理,如实时音频效果,它非常有用。据我所知,音频单元不支持w

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

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


非常感谢您能为我提供的任何帮助。

再看一遍,iOS似乎只允许内置音频单元,与Mac OS X不同。内置音频单元在iOS音频单元托管指南->使用特定音频单元中进行了描述,可以在网上找到。

音频单元是非常低级的,如果您想进行一些繁重的音频处理,如实时音频效果,它非常有用。据我所知,音频单元不支持wma音频编解码器。为此,您必须使用FFmpeg库

由于FFmpeg还支持彩信,因此无需使用其他库(如libmms)来连接彩信音频流。您可以使用FFmpeg连接到彩信音频流,如下所示:

const char *url = "mmst://somemmsurlhere.com";
avformat_open_input(formatCtx, url, NULL, NULL);
- (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);
    }
}
要解码音频数据,可以使用avcodec_decode_audio3功能。一旦解码的音频数据准备就绪,我建议您使用AudioQueue框架进行播放。AudioQueue通过调用您定义的回调函数来请求音频数据。其中一个回调函数是AudioQueueOutputCallback,您可以通过该函数传递解码的音频数据,如下所示:

const char *url = "mmst://somemmsurlhere.com";
avformat_open_input(formatCtx, url, NULL, NULL);
- (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);
    }
}