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

Wan*_*mbo 5 iphone ios

请原谅我,我在iOS上非常新 - 并且总体上以这种规模进行编程.

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

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

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

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

小智 7

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

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

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

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