iOS和解码内存缓冲区中的MP3 / AAC数据

时间:2011-07-14 10:07:17

标签: iphone ios

原谅我,我在iOS上非常新 - 并且通常以这种规模进行编程。

我一直在挖掘iOS文档,我知道有一些像ExtAudiofile这样的函数用于解码MP3 / AAC文件,但有没有可以对已经在内存中的Mp3 / aac数据进行操作?

我可能不得不从另一个文件中提取媒体数据(逐字节; iOS确实允许这样做?),所以我不能只是给它提供URL。

编辑:mp3数据将采用非标准文件格式,Apple提供的功能应该无法读取它们。我听说iOS有一个可以在一个音频流上运行的硬件解码器,如果有多个流,操作系统将回退到软件解码。

我宁愿使用Apple提供的功能,然后将MP3解码器集成到应用程序中。

1 个答案:

答案 0 :(得分:7)

您可以使用ExtAudioFileRead读取内存中的文件,但必须使用AudioFileOpenWithCallbacks。我不是在我的工作电脑上,所以我不能给你确切的代码,但这是一般过程:

  • 使用fopen / fread将给定文件读入内存缓冲区数组。使用简单的C数组而不是NSArray或NSData - 您需要速度,并且需要它与下一步兼容。
  • 为read / get size创建一些基本的C函数回调。
  • 将AudioFileOpenWithCallbacks与您编写的回调一起使用 内存中的音频文件。
  • 使用ExtAudioFileWrapAudioFileID开始解码内存中的文件。 这取代了ExtAudioFileOpenURL。

如果您使用Google + AudioFileOpenWithCallbacks + ExtAudioFileWrapAudioFileID,您会发现有些人已经这样做并发布了他们的代码。

我不确定你的非标准mp3数据是什么意思,所以你应该尝试使用其他应用程序播放该文件以查看它是否兼容。