【问题标题】:How to play raw audio in Iphone? (using ffmpeg)如何在 Iphone 中播放原始音频? (使用 ffmpeg)
【发布时间】:2011-11-20 04:35:21
【问题描述】:

我是一名正在尝试制作彩信流音频应用的学生。
我使用 libmms 获得了 mms 流,并使用 ffmpeg 解码了 wma 音频。
但是我不知道下一步该怎么做。

我最近在 stackoverflow 网站上看到了类似的 question。 (作者是c4r1o5
但是他在avcodec_decode_audio2之后使用了cfwritestreamwrite。
那正确吗?我认为没有必要,因为网络问题在 mms_connect、ffmpeg 解码后完成。

有必要使用吗?
我试图将原始音频放入音频缓冲区。而在播放时,它只带有白噪声。

请帮帮我。
任何提示或评论将不胜感激。
提前致谢。

【问题讨论】:

  • 是否必须使用ffmpeg?还有其他方法可以使用 AVFoundation 和/或 CoreAudio
  • 在 Iphone 中解码 wma 音频的另一种方法?我没见过
  • 你说得对,wma 无法解码那些框架。我误读了这个问题。
  • 嗨,我正在做一个类似的项目。您是如何使用 ffmpeg 设法从 libmms 解码 wma 流的?你能发布一些示例代码来帮助我开始吗?

标签: iphone stream ffmpeg avaudioplayer mms


【解决方案1】:

请发布必要的代码。
而且,您不一定要使用 CFWriteStreamWrite。
尽管我没有使用 CFWriteStreamWrite 的经验,但在 mms 流中没有必要。
您只需要连接彩信、解码 wma 音频文件、排队音频缓冲区以在 iphone 中播放。
我想你必须了解 iphone Audio Queue Service
并且确保在获取音频帧时使用线程。
基本信息位于该站点。

最后,只有白噪声的原因是因为您设置了错误的 mAudioData。
使用memcpy复制音频记忆。

【讨论】:

    【解决方案2】:

    您必须实现 AudioQueueOutputCallback 才能将解码后的音频数据传递给 AudioQueue。

    - (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
      • 2018-08-21
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      相关资源
      最近更新 更多