gpt4 book ai didi

android - 在 Android 上识别 HE-AAC 音频以进行正确解码和播放

转载 作者:行者123 更新时间:2023-11-29 01:26:43 29 4
gpt4 key购买 nike

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

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

不过,要在 AudioTrack 实例上播放音轨,我必须为其配置正确的(播放)采样率,即 44100 而不是 22050。

因此,我正在寻找一种方法来确定何时使用 API 目标级别 >= 16 对音频进行 HE-AAC 编码,以便我可以将 AudioTrack 的采样率设置为两倍报告的采样率。

编辑:当 MediaCodec 返回 MediaCodec.INFO_OUTPUT_FORMAT_CHANGED 时,我会检查 MediaFormat。格式将如下所示:

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 * sample-rate = 44100。

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

0x13 0xffffff90 0x56 0xffffffe5 0xffffffa0

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

最佳答案

您应该只将 MediaExtractor 返回的 MediaFormat 视为提示;您需要查看 MediaCodec 使用 INFO_OUTPUT_FORMAT_CHANGED 返回的内容,这应该返回真实的采样率。这意味着您只能在内容解码开始后配置 AudioTrack

关于android - 在 Android 上识别 HE-AAC 音频以进行正确解码和播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33609775/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com