1

我在 Android 4.1 上使用 MediaCodec 将 wav 文件的 pcm 轨道编码为 aac,在我的 S3 上,有两个编码器,OMX.google.aac.encoder 和 OMX.SEC.aac.enc,如果调用 createEncoderByType,则使用第一个,但它不起作用,无法播放输出(没有声音),如果用“OMX.SEC.aac.enc”调用createByCodecName,它可以工作。在我的 HTC ONE 上,只有“OMX.google.aac.encoder”,并且不起作用。我认为我的代码没有问题,因为它是从 google 复制的,并且第二个编码器可以工作。

顺便说一句,我在 aac 流中添加了 adts 标头。

4

1 回答 1

0

在我的 Nexus 5 上,MediaCodec.createByCodecName() 在传递编码器的名称(由 MediaCodecList 指定)时似乎永远不会工作。

我的 Nexus 5 (4.4.4) 上的 AAC 编码器:

名称:OMX.google.aac.encoder 类型:[audio/mp4a-latm]

名称:AACEncoder 类型:[audio/mp4a-latm]

但是,这有效:

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

注意:奇怪的是,调用此方法时,日志显示:

A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.

这有点奇怪。

因此,如果这对您不起作用,那么它可能是您的编码器实现而不是 MediaCodec 创建。

于 2014-09-24T06:29:44.553 回答