首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android上识别HE-AAC音频,以便正确解码和播放。

在Android上识别HE-AAC音频,以便正确解码和播放。
EN

Stack Overflow用户
提问于 2015-11-09 13:05:33
回答 1查看 1.3K关注 0票数 2

我使用Android上的MediaExtractor / MediaCodec组合(目标API级别为>= 16)来解码音频流。现在,当播放包含MPEG-4、HE-AAC音频数据的mp4/m4a容器时,我遇到了一个微妙的问题。

当查询磁道的MediaFormat以获取MediaFormat.KEY_SAMPLE_RATE时,我实际上只得到了预期大小的一半,例如对于需要44100回放采样率的曲目,MediaFormat返回22050。在阅读了一些关于HE-AAC的文档之后,我了解到这在编解码器的工作方式上是“正确的”。

不过,要在AudioTrack实例上回放音频音轨,我必须使用正确的(回放)采样( 44100而不是22050 )来配置它。

因此,我正在寻找一种方法来确定什么时候音频是由API目标级别>= 16编码的,这样我就可以将AudioTrack的采样率设置为报告样本率的两倍。

编辑:,当MediaCodecMediaCodec.INFO_OUTPUT_FORMAT_CHANGED一起返回时,我会检查MediaFormat。格式如下:

代码语言:javascript
运行
复制
max-input-size=946, 
aac-profile=2, 
mime=audio/mp4a-latm, 
durationUs=158499410,
csd-0=java.nio.ByteArrayBuffer[position=0,limit=5,capacity=5], 
channel-count=2, 
sample-rate=22050

为了在AudioTrack上获得适当的回放,我需要将采样率设置为2*采样率= 44100。

我想知道csd-0是否包含更多的信息来推断概要文件/格式/等等。对于上面的示例,来自csd-0缓冲区的5个字节如下所示:

代码语言:javascript
运行
复制
0x13 0xffffff90 0x56 0xffffffe5 0xffffffa0

现在我想知道这个“编解码器特定数据”的具体结构

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-09 13:40:17

您只应将MediaExtractor返回的MediaExtractor视为提示;您需要查看MediaCodecINFO_OUTPUT_FORMAT_CHANGED返回的内容,这将返回真正的样本。这意味着您只能在内容解码启动后配置AudioTrack

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

https://stackoverflow.com/questions/33609775

复制
相关文章

相似问题

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