【问题标题】:Is it possible to decode an MMS+WMA2 stream using audio units on the iPhone?是否可以使用 iPhone 上的音频单元解码 MMS+WMA2 流?
【发布时间】:2011-01-27 14:29:50
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        • 1970-01-01
        • 2016-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多