适用于AC-3的Android MediaCodec

时间:2015-01-22 13:32:33

标签: android audio android-ndk mediacodec

我正在尝试使用Android MediaCodec API解码AC3音频。如果我将csd-0设置为elementary stream descriptor,我可以成功解码AAC。

尝试解码AC3,我在配置中使用以下MediaFormat:

AMEDIAFORMAT_KEY_MIME: "audio/ac3"
AMEDIAFORMAT_KEY_CHANNEL_COUNT: 6
AMEDIAFORMAT_KEY_SAMPLE_RATE: 48000
AMEDIAFORMAT_KEY_IS_ADTS: 0

在调用AMediaCodec_configure时,我收到以下错误消息:

01-22 12:37:58.760: E/ACodec(10548): [OMX.Nvidia.bypass.decoder] configureCodec returning error -2147483648
01-22 12:37:58.760: E/ACodec(10548): signalError(omxError 0x80001001, internalError -2147483648)
01-22 12:37:58.760: E/MediaCodec(10548): Codec reported err 0x80001001, actionCode 0, while in state 3
01-22 12:37:58.760: E/MediaCodec(10548): configure failed with err 0x80001001, resetting...

我需要一些额外的数据来提供解码器吗?我不熟悉AC3标准,也许有一个等同于csd-0必须提供的基本流描述符?

1 个答案:

答案 0 :(得分:2)

关于如何处理OpenMAX IL中的AC-3(这是MediaCodec内部使用的标准)没有官方规范,但尽管如此,一些制造商确实公开了这样的解码器。

我之前曾尝试在三星Galaxy S3上进行此类解码,它似乎确实有效,而且我不需要传递任何额外的数据。有关此实验的信息,请参阅https://github.com/mstorsjo/vlc/commit/omxil-ac3

我不知道这个特定的Nvidia解码器是否表现不同,或者如果ACodec / MediaCodec级别之间缺少其他东西,则无法使用。 (上面的示例直接使用内部OMX API,从MediaCodec可用之前。)为了完成答案,我想我应该通过OMX直接和通过MediaCodec,然后在Nvidia设备上重新测试Galaxy S3上的实验(是这是你正在测试的Nexus 9,还是别的?)。