【问题标题】:What is the fastest way to decode an MP3 file then encode to AAC on Android? [closed]在 Android 上解码 MP3 文件然后编码为 AAC 的最快方法是什么? [关闭]
【发布时间】:2016-02-10 17:34:46
【问题描述】:

我有一个使用 MediaCodec 和 MediaExtractor 的工作解决方案,但 6mb MP3 的解码需要 15 秒 + AAC 编码需要 15 秒。总计 > 30 秒。我需要一些非常快

编辑

我的瓶颈来自 Mediacodec 本身。他们提供的字节缓冲区太小了。将 MediaFormat 设置为 AAC 时,InputBytebuffers 一次只有 4096 个字节,对我来说太慢了。它适用于流式传输,但不适用于文件到文件。

我切换到一个 C lib 解码器,它在 3 秒而不是 15 秒内解码。但是编码器仍然需要 15 秒。任何人都有可以添加 ADTS 标头的 C lib AAC 编码器?

【问题讨论】:

    标签: android mp3 decoding android-mediacodec mediaextractor


    【解决方案1】:

    听起来您首先解码完整文件,然后对其进行编码。如果您同时执行这些操作,最终可能会更快,即当您从解码器有足够的输出数据以向编码器提供完整的输入帧时,将其传入。这有助于一些并行性,但我怀疑它足以帮助您获得所需的加速。

    【讨论】:

    • 我这样做了,但我的瓶颈来自 Mediacodec 本身。他们提供的字节缓冲区太小了。一次只有 4096 个字节对我来说太慢了。我切换到在 3 秒而不是 15 秒内解码的 C 解码器。但是编码器仍然需要 15 秒。有人有 C lib aac 编码器吗?
    • 这听起来有点像您正在同步使用 MediaCodec API - 在传递一个 4096 字节缓冲区作为输入之后,您是否在传递下一个输入缓冲区之前等待一个输出缓冲区?您需要提供尽可能多的输入缓冲区,并且只消耗出现的输出缓冲区,以便从 MediaCodec 获得适当的性能 - 请参阅 stackoverflow.com/a/34940871/3115956 以获取更详细的说明。
    • 这是我对编码器pastebin.com/uvCwKjGi 的逻辑。当我在 ACC 中使用 MediaFormat 设置我的编码器时。我这样做了`inputBuffers = encoder.getInputBuffers();`(因为我需要 API 16)我只有 4 个可用容量为 4096 字节的输入缓冲区。
    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 2010-09-08
    • 2012-02-28
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多