我正在使用Android 4.1上的MediaCodec将wcm文件的pcm轨道编码到aac中,在我的S3上,有两个编码器,OMX.google.aac.encoder和OMX.SEC.aac.enc,第一个用于if调用createEncoderByType,但它不起作用,输出无法播放(没有声音),如果使用“OMX.SEC.aac.enc”调用createByCodecName,则可以正常工作。在我的HTC ONE上,只有“OMX.google.aac.encoder”,但不起作用。我认为我的代码没有问题,因为它是从谷歌复制的,第二个编码器可以工作。
BTW,我在adac流中添加了adts标题。
答案 0 :(得分:0)
在我的Nexus 5上,MediaCodec.createByCodecName()在传递编码器名称时似乎不起作用(由MediaCodecList指定)。
我的Nexus 5上的AAC编码器(4.4.4):
名称:OMX.google.aac.encoder 类型:[audio / mp4a-latm]
name:AACEncoder 类型:[audio / mp4a-latm]
但这有效:
MediaCodec.createEncoderByType("audio/mp4a-latm");
注意:奇怪的是,当调用此方法时,日志会显示:
A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
这有点奇怪。
因此,如果这对你不起作用,那么可能是你的编码器实现而不是MediaCodec的创建。