代码之家  ›  专栏  ›  技术社区  ›  Nick Toumpelis

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

  •  2
  • Nick Toumpelis  · 技术社区  · 14 年前

    我不确定音频单元是否可以作为iPhone流媒体音频场景中的编解码器。

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

    我很感激你能给我任何帮助。

    2 回复  |  直到 12 年前
        1
  •  5
  •   Kemal Taskin    12 年前

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

    由于ffmpeg也支持mms,因此不必使用libmms等其他库来连接mms音频流。您可以使用ffmpeg连接到mms音频流,如下所示:

    const char *url = "mmst://somemmsurlhere.com";
    avformat_open_input(formatCtx, url, NULL, NULL);
    

    对于解码音频数据,您可以使用 AVCODEC解码音频3 功能。一旦解码的音频数据准备就绪,我建议您使用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);
        }
    }
    
        2
  •  0
  •   Nick Toumpelis    14 年前

    再看一遍,似乎ios只允许内置音频单元,不像mac os x。内置音频单元在“ios音频单元托管指南”中有描述->“使用特定的音频单元”,可以在网上找到 here .