Android上的MP3解码

Rob*_*ski 29 mp3 android decode android-ndk

我们正在实施Android手机程序,播放从互联网流式传输的音频.这是我们的大致工作:

  1. 下载自定义加密格式.
  2. 解密得到大量常规MP3数据.
  3. 将MP3数据解码为内存缓冲区中的原始PCM数据.
  4. 将原始PCM数据传输到AudioTrack

到目前为止,我们的目标设备是Droid和Nexus One.在Nexus One上一切都很棒,但在Droid上MP3解码速度太慢了.如果我们把Droid放在负载下,音频播放就会开始跳过.我们不允许将MP3数据解码为SD卡,但我知道这不是我们的问题.

我们没有编写自己的MP3解码器,而是使用了MPADEC(http://sourceforge.net/projects/mpadec/).它是免费的,很容易与我们的程序集成.我们用NDK编译它.

在使用各种分析工具进行详尽分析后,我们确信这个解码器落后了.

以下是我们正在考虑的选项:

  1. 找到我们可以使用Android NDK编译的另一个MP3解码器.此MP3解码器必须经过优化才能在移动ARM设备上运行,或者可能使用仅整数数学或其他一些优化来提高性能.

  2. 由于内置的​​Android MediaPlayer服务将采用URL,我们可能能够在我们的程序中实现一个小型HTTP服务器,并使用解密的MP3为MediaPlayer提供服务.这样我们就可以利用内置的MP3解码器.

  3. 通过NDK访问内置MP3解码器.我不知道这是否可行.

有没有人对我们如何加速MP3解码有任何建议?

- Rob Sz

twk*_*twk 0

我没有尝试过这个,但我相信你可以给媒体播放器一个文件描述符:

public void setDataSource (FileDescriptor fd, long offset, long length)
Run Code Online (Sandbox Code Playgroud)

也许您可以将解密的 mp3 写入文件并使用文件描述符播放它。假设您提前知道文件长度,这甚至可能适用于流媒体。如果它有效的话,它会比做一个本地主机网络服务器简单得多。