【问题标题】:MediaCodec decoding AAC audio on Android - decodes but can't hear any outputMediaCodec 在 Android 上解码 AAC 音频 - 解码但听不到任何输出
【发布时间】:2015-02-11 12:25:31
【问题描述】:

我可以使用 NDK AMediaCodec API 成功解码 AAC,但没有播放音频。

这是我的配置:

AMediaFormat_setString( format, AMEDIAFORMAT_KEY_MIME, "audio/mp4a-latm" );
AMediaFormat_setInt32( format, AMEDIAFORMAT_KEY_CHANNEL_COUNT, 2 );
AMediaFormat_setInt32( format, AMEDIAFORMAT_KEY_SAMPLE_RATE, 44100 );
AMediaFormat_setInt32( format, AMEDIAFORMAT_KEY_IS_ADTS, 0 );

uint8_t es[2] = { 0x12, 0x12 };
AMediaFormat_setBuffer( format, "csd-0", es, 2 );

这就是我要做的解码:

ssize_t inputIndex = AMediaCodec_dequeueInputBuffer( decoder, kInputTimeout );
uint8_t* inputBuf = AMediaCodec_getInputBuffer( decoder, inputIndex, &inputSize );

// Copy AAC data into inputBuf ...

AMediaCodec_queueInputBuffer( decoder, inputIndex, 0, aacSize, pts, 0 );

ssize_t outputIndex = AMediaCodec_dequeueOutputBuffer( decoder, &outputBufferInfo, kOutputTimeout );

if( outputIndex >= 0 )
{
    AMediaCodec_releaseOutputBuffer( decoder, outputIndex, true );
}

我没有收到任何错误,outputBufferInfo.presentationTimeUs 正在适当更新,所以它似乎正在解码。但是没有音频输出。 releaseOutputBuffer 这样做是为了音频吗?我尝试将其 render 布尔参数设置为 truefalse,但我对两者都保持沉默。

MediaCodec 是否像输出视频一样输出音频?

【问题讨论】:

    标签: android audio android-ndk aac android-mediacodec


    【解决方案1】:

    不,MediaCodec 不会自动渲染音频 - releaseOutputBuffer 的渲染参数对音频没有任何作用。 (有关这些问题的更多解释,请参阅 MediaCodec 类的 Java 文档,这可能是 NDK 文档中缺少的。)

    您需要手动获取解码的输出缓冲区并将其提供给 AudioTrack 或 OpenSL ES 才能播放。

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 2018-07-14
      • 2013-11-18
      • 2021-12-01
      • 1970-01-01
      • 2014-11-22
      • 2021-04-20
      • 2013-02-22
      • 2014-04-19
      相关资源
      最近更新 更多