首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用媒体解码器的Aac编码器使用一个通道初始化,但输出为两个通道

使用媒体解码器的Aac编码器使用一个通道初始化,但输出为两个通道
EN

Stack Overflow用户
提问于 2014-12-17 21:04:43
回答 1查看 1.5K关注 0票数 1

aac解码器初始化如下:

代码语言:javascript
复制
MediaFormat outfmt = new MediaFormat();
outfmt.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm");
outfmt.setInteger(MediaFormat.KEY_AAC_PROFILE, mAudioProfile);
mSampleRate = format.getInteger(MediaFormat.KEY_SAMPLE_RATE);
outfmt.setInteger(MediaFormat.KEY_SAMPLE_RATE, mSampleRate);
mChannels = format.getInteger(MediaFormat.KEY_CHANNEL_COUNT);
outfmt.setInteger(MediaFormat.KEY_CHANNEL_COUNT, mChannels);
outfmt.setInteger(MediaFormat.KEY_BIT_RATE, 64000);
audioEncoder.configure(outfmt, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
            audioEncoder.start();

但是编码器在两个设备上的行为是不同的。

一个输出正常显示: 64000 128000 192000 256000 320000

另一个输出为两个通道: 64000 64000 128000 128000 192000 192000 256000 256000 320000 320000

在两种设备上,使用MediaExtractor提取的格式是不同的:

正常情况是{max-input-size=1572864,aac-profile=2,csd-0=java.nio.ByteArrayBufferposition=0,limit=2,capacity=2,sample-rate=16000,durationUs=8640000,channel-count=1,mime=音频/MP4a-latm,isDMCMMExtractor=1}

另一个是{max-input-size=798,durationUs=8640000,channel-count=1,mime=音频/MP4a-latm,csd-0=java.nio.ByteArrayBufferposition=0,limit=2,capacity=2,采样率=16000}

因此,原始音频只有一个声道,编码器配置了一个声道too.But,编码器以两个声道的方式输出。

这与isDMCMMExtractor标志有关系吗?

救命!救命!@fadden

EN

回答 1

Stack Overflow用户

发布于 2014-12-18 17:42:49

首先,这个问题很难理解--列出的两个MediaFormat内容都显示了channel-count=1,所以对问题本身的实际解释很少,只对周围的其他细节进行了解释。

然而,在一些android版本中的软件AAC解码器(如果我没记错的话是4.1,也可能是4.2 )将单声道AAC解码成立体声-不确定一些硬件AAC解码器是否也做同样的事情。你可以争论这是一个bug还是一个意想不到的行为,但这是你必须接受的。在解码器返回立体声数据的情况下,即使输入是单声道,两个立体声通道将具有相同的(单声道)内容。

因此,基本上,您必须准备好处理此问题-要么将实际格式信息从解码器(而不是从MediaExtractor)传递给使用数据的人(例如,将音频输出重新配置为立体声),要么准备将立体声重新混合为单声道,如果您确实需要单声道格式的输出。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27526267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档