相关疑难解决方法(0)

如何使用Android MediaCodec生成AAC ADTS基本流

我要做的是:使用Android的MediaCodec将原始PCM音频样本编码为原始AAC文件.

遇到的问题:当我使用FFMPEG将生成的原始AAC文件打包到M4A容器中时,FFMPEG抱怨文件中缺少编解码器参数.

细节:

由于我找不到生成输出AAC文件的音频编码器的任何MediaCodec示例代码,我尝试将视频编码器修改为音频编码器.原始代码在这里:source_code

我配置了这样的音频编码器:

    mEncoderFormat = MediaFormat.createAudioFormat("audio/mp4a-latm", (int)mAudioSampleRate, 2);

    // redundant?
    mEncoderFormat.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm");
    mEncoderFormat.setInteger(MediaFormat.KEY_AAC_PROFILE, 
                      MediaCodecInfo.CodecProfileLevel.AACObjectELD);
    mEncoderFormat.setInteger(MediaFormat.KEY_SAMPLE_RATE, kSampleRates);
    mEncoderFormat.setInteger(MediaFormat.KEY_BIT_RATE, kBitRates);
    mEncoderFormat.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 2);
    testEncoderWithFormat("audio/mp4a-latm", mEncoderFormat);

    try {
        codec.configure(
                mEncoderFormat,
                null /* surface */,
                null /* crypto */,
                MediaCodec.CONFIGURE_FLAG_ENCODE);
    } catch (IllegalStateException e) {
        Log.e(TAG, "codec '" + componentName + "' failed configuration.");
        return;
    }
    Log.d(TAG, "  testEncoder configured with format = " + format);
Run Code Online (Sandbox Code Playgroud)

然后我给编码器每帧提供10ms的PCM采样.编码器获取每个帧,生成一个比特流帧,然后将比特流写入FileOutputStream.循环一直持续到输入文件结束.

代码运行完成.我'adb pull'将生成的AAC文件从设备传送到我的PC,并使用FFMPEG来读取它.下面是命令和错误FFMPEG吐出:

$ ffmpeg -f aac -i BlessedNoColor_nexus7_api18.aac
ffmpeg version N-45739-g04bf2e7 …
Run Code Online (Sandbox Code Playgroud)

audio encoding android mediacodec

20
推荐指数
1
解决办法
2万
查看次数

在Android上使用MediaCodec API解码AAC

我正在尝试在Android上使用MediaCodec API来解码AAC流.(它是原始的AAC.)我尝试使用MediaFormat.createAudioFormat()创建格式对象以传递给MediaCodec.configure(),但是在使用AAC(audio/mp4a-latm)时我一直遇到错误.(它适用于MP3(音频/ mpeg)虽然...)

最后,我为AAC文件创建了一个MediaExtractor,并查看了它正在生成的格式对象.我看到它包含了一个ByteBuffer的密钥"csd-0",它由两个字节组成,值均为0x12.如果我在用于配置AAC编解码器的格式对象中包含该键和值,则一切正常.

有谁知道发生了什么?文档说明我不应该配置该密钥.有没有人有一个指向MediaCodec示例的指针来解码AAC文件而不使用MediaExtractor来生成格式对象?

android aac

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

android ×2

aac ×1

audio ×1

encoding ×1

mediacodec ×1