You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android API 33中HE-AAC V1音频编码及新MIME类型有效性确认

在Android API 33中使用MIMETYPE_AUDIO_AAC_HE_V1调用createEncoderByType的合法性

结论

在Android API 33(Tiramisu)中,可以直接使用MediaFormat.MIMETYPE_AUDIO_AAC_HE_V1调用MediaCodec.createEncoderByType()方法,你提供的代码是合法的。

原因解析

API 33新增的MIMETYPE_AUDIO_AAC_HE_V1是专门用于标识HE-AAC v1编码格式的MIME类型,它的作用等价于旧版本中使用MediaFormat.MIMETYPE_AUDIO_AAC配合MediaFormat.KEY_AAC_PROFILE设置为MediaCodecInfo.CodecProfileLevel.AACObjectHE的写法——两者最终都会指向系统中的HE-AAC v1编码器。

注意事项

  1. 版本兼容性:该MIME类型仅在API 33及以上版本存在,直接在低版本设备上调用会抛出NoSuchFieldError,因此实际开发中必须添加版本判断分支,兼容低版本实现。
  2. 必要参数配置:即使使用新MIME类型,创建MediaFormat时仍需指定采样率、声道数等核心参数,仅靠MIME类型无法完成编码器的完整配置。

示例兼容代码

import android.media.MediaCodec;
import android.media.MediaCodecInfo;
import android.media.MediaFormat;
import android.os.Build;

// ...

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    // API 33及以上使用新MIME类型
    codec_ = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_AUDIO_AAC_HE_V1);
    MediaFormat format = MediaFormat.createAudioFormat(
        MediaFormat.MIMETYPE_AUDIO_AAC_HE_V1, 
        sampleRate, 
        channelCount
    );
    // 可选:设置比特率等参数
    format.setInteger(MediaFormat.KEY_BIT_RATE, 128000);
    codec_.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
} else {
    // 低版本使用原有兼容写法
    codec_ = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_AUDIO_AAC);
    MediaFormat format = MediaFormat.createAudioFormat(
        MediaFormat.MIMETYPE_AUDIO_AAC, 
        sampleRate, 
        channelCount
    );
    format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectHE);
    format.setInteger(MediaFormat.KEY_BIT_RATE, 128000);
    codec_.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
}

内容的提问来源于stack exchange,提问作者olojzyg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:51:07