配置MediaCodec时出错“无法设置标准组件角色'audio_encoder.aac'”

时间:2016-06-22 15:25:17

标签: mediacodec

以下代码用于配置AAC编码器:

mfAACEncoder = new MediaFormat();
mfAACEncoder.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm");
mfAACEncoder.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);
mfAACEncoder.setInteger(MediaFormat.KEY_SAMPLE_RATE, iClockRateAudio);
mfAACEncoder.setInteger(MediaFormat.KEY_BIT_RATE, 64 * 1024);//AAC-HE 64kbps
mfAACEncoder.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);

//https://stackoverflow.com/questions/21284874/illegal-state-exception-when-calling-mediacodec-configure
mfAACEncoder.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 0);

mcAACEncoder = MediaCodec.createDecoderByType("audio/mp4a-latm");
mcAACEncoder.configure(mfAACEncoder, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

mcAACEncoder.configure()在logcat中生成以下内容:

06-22 11:13:09.919 4203-4666/net.mydomain.myapp I/MediaCodec: Found 0 pieces of codec specific data.
06-22 11:13:09.919 4203-4666/net.mydomain.myapp D/ACodec: onConfigureComponent
06-22 11:13:09.919 4203-4666/net.mydomain.myapp E/OMXNodeInstance: setParameter(1:google.aac.decoder, ParamStandardComponentRole(0x1000017)) ERROR: Undefined(0x80001001)
06-22 11:13:09.920 4203-4666/net.mydomain.myapp W/ACodec: [OMX.google.aac.decoder] Failed to set standard component role 'audio_encoder.aac'.
06-22 11:13:09.920 4203-4666/net.mydomain.myapp E/ACodec: setComponentRole err 80000000
06-22 11:13:09.920 4203-4666/net.mydomain.myapp E/ACodec: [OMX.google.aac.decoder] configureCodec returning error 80000000
06-22 11:13:09.920 4203-4666/net.mydomain.myapp E/ACodec: signalError(omxError 0x80001001, internalError -2147483648)
06-22 11:13:09.920 4203-4666/net.mydomain.myapp E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 3
06-22 11:13:09.933 4203-4632/net.mydomain.myapp D/ACodec: [OMX.MTK.VIDEO.DECODER.AVC] onOutputBufferDrained ID 0xb4031220
06-22 11:13:09.933 4203-4632/net.mydomain.myapp D/ACodec: queue NativeWindow
06-22 11:13:09.941 4203-4665/net.mydomain.myapp E/MediaCodec: configure failed with err 0x80001001, resetting...

有人可以就如何解决这个问题提出建议吗?

如代码所示,the solution of this thread已经实施。

1 个答案:

答案 0 :(得分:1)

你的问题在于:

mcAACEncoder = MediaCodec.createDecoderByType("audio/mp4a-latm");
mcAACEncoder.configure(mfAACEncoder, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

您希望将其用作编码器,但实际上您实际创建了解码器组件,但尝试在编码器角色中使用它。要解决此问题,请将第一行改为:

mcAACEncoder = MediaCodec.createEncoderByType("audio/mp4a-latm");