# AVCodec支持的格式

音视频的编解码能力以及文件格式封装和解封装能力的支持情况，在不同平台存在能力和规格的差异。开发者可以通过获取支持的编解码能力来获取实际的支持情况和规格情况。

#### 音视频编解码

#### 视频解码

当前支持的解码能力如下：

| 视频解码类型 | 视频解码格式的MIME类型 |
| --- | --- |
| MSVIDEO122+ | OH_AVCODEC_MIMETYPE_VIDEO_MSVIDEO1 |
| WMV322+ | OH_AVCODEC_MIMETYPE_VIDEO_WMV3 |
| MJPEG22+ | OH_AVCODEC_MIMETYPE_VIDEO_MJPEG |
| MPEG2 | OH_AVCODEC_MIMETYPE_VIDEO_MPEG2 |
| MPEG4 | OH_AVCODEC_MIMETYPE_VIDEO_MPEG4 |
| H.263 | OH_AVCODEC_MIMETYPE_VIDEO_H263 |
| AVC(H.264) | OH_AVCODEC_MIMETYPE_VIDEO_AVC |
| HEVC(H.265) | OH_AVCODEC_MIMETYPE_VIDEO_HEVC |
| AV123+ | OH_AVCODEC_MIMETYPE_VIDEO_AV1 |
| VP923+ | OH_AVCODEC_MIMETYPE_VIDEO_VP9 |
| VP823+ | OH_AVCODEC_MIMETYPE_VIDEO_VP8 |
| RV3023+ | OH_AVCODEC_MIMETYPE_VIDEO_RV30 |
| RV4023+ | OH_AVCODEC_MIMETYPE_VIDEO_RV40 |
| WVC123+ | OH_AVCODEC_MIMETYPE_VIDEO_WVC1 |
| DVVIDEO23+ | OH_AVCODEC_MIMETYPE_VIDEO_DVVIDEO |
| RAWVIDEO23+ | OH_AVCODEC_MIMETYPE_VIDEO_RAWVIDEO |
| MPEG123+ | OH_AVCODEC_MIMETYPE_VIDEO_MPEG1 |
| Cinepak24+ | OH_AVCODEC_MIMETYPE_VIDEO_CINEPAK |
| VVC(H.266) | OH_AVCODEC_MIMETYPE_VIDEO_VVC |

通过MIME类型创建解码器时，如果系统平台支持硬件解码，系统平台会优先创建硬件解码器实例；如果系统平台不支持或者硬件解码器资源不足时，系统平台会创建软件解码器实例；如果系统平台无对应解码能力，会创建解码器实例失败。

系统平台提供的解码能力和设备强相关，开发者可以通过获取支持的编解码能力获取系统平台支持的软硬件解码能力和能力规格。

例如可以通过OH\_AVCODEC\_MIMETYPE\_VIDEO\_AVC、OH\_AVCODEC\_MIMETYPE\_VIDEO\_HEVC、OH\_AVCODEC\_MIMETYPE\_VIDEO\_VVC来查询系统平台支持的H.264、H.265、H.266的硬件解码能力。

具体开发指导请参考视频解码。

#### 视频编码

当前支持的编码能力如下：

| 视频编码类型 | 视频编码格式的MIME类型 |
| --- | --- |
| HEVC(H.265) | OH_AVCODEC_MIMETYPE_VIDEO_HEVC |
| AVC(H.264) | OH_AVCODEC_MIMETYPE_VIDEO_AVC |

如果系统平台无对应编码能力，会创建编码器实例失败。

基于MimeType创建编码器时，可以配置为H.264(OH\_AVCODEC\_MIMETYPE\_VIDEO\_AVC)和H.265(OH\_AVCODEC\_MIMETYPE\_VIDEO\_HEVC)。

系统平台支持情况和每种编码的能力范围，可以通过获取支持的编解码能力获取。

具体开发指导请参考视频编码。

#### 音频解码

当前支持的解码能力：

| 音频解码类型 | 音频解码格式的MIME类型 |
| --- | --- |
| AAC | OH_AVCODEC_MIMETYPE_AUDIO_AAC |
| MPEG(MP3) | OH_AVCODEC_MIMETYPE_AUDIO_MPEG |
| Flac | OH_AVCODEC_MIMETYPE_AUDIO_FLAC |
| Vorbis | OH_AVCODEC_MIMETYPE_AUDIO_VORBIS |
| AMR(amrnb、amrwb) | OH_AVCODEC_MIMETYPE_AUDIO_AMR_NB、OH_AVCODEC_MIMETYPE_AUDIO_AMR_WB |
| G711mu | OH_AVCODEC_MIMETYPE_AUDIO_G711MU |
| APE | OH_AVCODEC_MIMETYPE_AUDIO_APE |
| G711a20+ | OH_AVCODEC_MIMETYPE_AUDIO_G711A |
| ALAC22+ | OH_AVCODEC_MIMETYPE_AUDIO_ALAC |
| AC322+ | OH_AVCODEC_MIMETYPE_AUDIO_AC3 |
| WMA22+(V1、V2、PRO) | OH_AVCODEC_MIMETYPE_AUDIO_WMAV1、OH_AVCODEC_MIMETYPE_AUDIO_WMAV2、OH_AVCODEC_MIMETYPE_AUDIO_WMAPRO |
| GSM22+ | OH_AVCODEC_MIMETYPE_AUDIO_GSM |
| GSM_MS22+ | OH_AVCODEC_MIMETYPE_AUDIO_GSM_MS |
| Audio ViVid11+ | OH_AVCODEC_MIMETYPE_AUDIO_VIVID |
| opus | OH_AVCODEC_MIMETYPE_AUDIO_OPUS |

如果系统平台无对应解码能力，会创建解码器实例失败。

系统平台提供的解码能力和设备强相关，开发者可以通过获取支持的编解码能力获取系统平台支持的解码能力和能力规格。

从API version 23开始支持：TWINVQ、ILBC、TRUEHD、DVAUDIO、DTS、COOK。

具体开发指导请参考音频解码。

#### 音频编码

当前支持的编码能力：

| 音频编码类型 | 音频编码格式的MIME类型 |
| --- | --- |
| AAC | OH_AVCODEC_MIMETYPE_AUDIO_AAC |
| Flac | OH_AVCODEC_MIMETYPE_AUDIO_FLAC |
| MPEG(MP3) | OH_AVCODEC_MIMETYPE_AUDIO_MPEG |
| G711mu | OH_AVCODEC_MIMETYPE_AUDIO_G711MU |
| AMR(amrnb、amrwb) | OH_AVCODEC_MIMETYPE_AUDIO_AMR_NB、OH_AVCODEC_MIMETYPE_AUDIO_AMR_WB |
| opus | OH_AVCODEC_MIMETYPE_AUDIO_OPUS |
| Audio ViVid（从API版本26.0.0开始支持） | OH_AVCODEC_MIMETYPE_AUDIO_VIVID |

如果系统平台无对应编码能力，会创建编码器实例失败。

系统平台提供的编码能力和设备强相关，开发者可以通过获取支持的编解码能力获取系统平台支持的编码能力和能力规格。

具体开发指导请参考音频编码。

#### 媒体数据封装与解封装

#### 媒体数据解封装

支持的解封装格式如下：

| 媒体格式 | 封装格式 | 轨道格式 |
| --- | --- | --- |
| 音视频 | mp4 | 视频轨：AVC(H.264)、HEVC(H.265)、VVC(H.266)、MPEG4 音频轨：AAC、MPEG(MP3)、Audio Vivid、ALAC22+ 字幕轨：WEBVTT 辅助轨：AUXL（音频RAW信息、视频深度信息等。） timed metadata轨：有时间属性的描述信息，如帧级的维测信息、传感器信息等。 |
| 音视频 | fmp4 | 视频轨：AVC(H.264)、HEVC(H.265) 音频轨：AAC、MPEG(MP3)、Audio Vivid |
| 音视频 | mkv | 视频轨：AVC(H.264)、HEVC(H.265)、MSVIDEO122+ 音频轨：AAC、MPEG(MP3)、OPUS、ADPCM_YAMAHA22+、ADPCM_G72222+、ALAC22+ |
| 音视频 | mpeg-ts | 视频轨：AVC(H.264)、HEVC(H.265)、MPEG2、MPEG4 音频轨：AAC、MPEG(MP3)、Audio Vivid |
| 音视频 | flv | 视频轨：AVC(H.264)、HEVC(H.265) 音频轨：AAC、Audio Vivid（从API版本26.0.0开始支持） |
| 音视频 | mpeg-ps | 视频轨：AVC(H.264)、MPEG2 音频轨：MPEG(MP2、MP3)、DTS23+ |
| 音视频 | avi | 视频轨：H.263、AVC(H.264)、MPEG2、MPEG4、MJPEG22+、MSVIDEO122+ 音频轨：AAC、MPEG(MP2、MP3)、PCM、GSM_MS22+、ADPCM_YAMAHA22+、ADPCM_G72222+、DVAUDIO23+、DTS23+ |
| 音视频 | 3gp22+ | 视频轨：H.263、AVC(H.264)、MPEG4 音频轨：AAC、AMR(amrnb、amrwb) |
| 音视频 | 3g222+ | 视频轨：H.263、AVC(H.264)、MPEG4 音频轨：AAC、AMR(amrnb、amrwb) |
| 音视频 | m4v22+ | 视频轨：AVC(H.264)、HEVC(H.265)、MPEG4 音频轨：AAC、ALAC、AC3 |
| 音视频 | wmv22+ | 视频轨：AVC(H.264)、WMV3 音频轨：WMAV1、WMAV2、WMAPRO |
| 音视频 | rm23+、rmvb23+ | 视频轨：RV30、RV40 音频轨：AAC、AC3、COOK |
| 音频 | m4a | 音频轨：AAC、Audio Vivid、ALAC22+ |
| 音频 | aac | 音频轨：AAC |
| 音频 | mp3 | 音频轨：MPEG(MP3) |
| 音频 | ogg | 音频轨：Vorbis |
| 音频 | flac | 音频轨：Flac |
| 音频 | wav | 音频轨：PCM、G711mu、G711a、GSM_MS22+、ADPCM_YAMAHA22+、ADPCM_G72222+、ADPCM_G72622+、DVAUDIO23+、DTS23+ |
| 音频 | amr | 音频轨：AMR(amrnb、amrwb) |
| 音频 | ape | 音频轨：APE |
| 音频 | wma22+ | 音频轨：AC3、WMAV1、WMAV2、Vorbis、Flac、AMR(amrnb、amrwb)、AAC、MPEG(MP2、MP3)、GSM_MS、G711mu、G711a、PCM、ADPCM_G722、ADPCM_G726、ADPCM_IMA_WAV、ADPCM_MS、ADPCM_YAMAHA、DVAUDIO23+、DTS23+ |
| 音频 | sunAU24+ | 音频轨：PCM、ADPCM_G722、ADPCM_G726LE、G711mu、G711a |
| 音频 | dts23+ | 音频轨：DTS |
| 外挂字幕 | srt | 字幕轨：SRT |
| 外挂字幕 | webvtt | 字幕轨：WEBVTT |

DRM解密能力支持的解封装格式：mp4(H.264，H.265，AAC)、mpeg-ts(H.264，H.265，AAC)。

具体开发指导请参考媒体数据解封装。

#### 媒体数据封装

当前支持的封装能力如下：

| 封装格式 | 视频编解码类型 | 音频编解码类型 | 封面类型 |
| --- | --- | --- | --- |
| mp4 | AVC（H.264）、HEVC（H.265） | AAC、MPEG（MP3） | jpg、png、bmp |
| m4a | - | AAC | jpg、png、bmp |
| mp3 | - | MPEG（MP3） | jpg |
| amr | - | AMR(amrnb、amrwb) | - |
| wav | - | G711mu(pcm-mulaw) 、raw(pcm) | - |
| aac | - | AAC | - |
| flac | - | Flac | jpg、png、bmp |
| ogg23+ | - | Vorbis、OPUS | - |
| flv | AVC（H.264）、HEVC（H.265） | AAC、Audio Vivid | - |

*   封装格式为mp4时，音频编解码类型为MPEG（MP3）时采样率需大于等于16000Hz。
*   封装格式为mp4/m4a时，音频编解码类型为AAC时声道数范围为\[1, 7\]。
*   从API版本26.0.0开始，支持flv格式封装。封装格式为flv时，仅支持一个音频轨和一个视频轨，不支持设置旋转角度，不支持封面轨和辅助轨。

文件级数据已定义的key如下所示：

| key | 描述 |
| --- | --- |
| OH_MD_KEY_CREATION_TIME | 媒体文件创建时间的元数据，值类型为string（API14开始支持）。 |
| OH_MD_KEY_COMMENT | 媒体文件注释的键，值类型为string（API20开始支持）。 |
| OH_MD_KEY_ENABLE_MOOV_FRONT | 媒体文件moov元数据是否前置标志，值类型为int32_t（API20开始支持）。 |
| OH_MD_KEY_LATITUDE | 纬度的键，值类型为float，范围为[-90.0, 90.0]。表示地理位置信息中的纬度（从API version 24开始支持）。 |
| OH_MD_KEY_LONGITUDE | 经度的键，值类型为float，范围为[-180.0, 180.0]。表示地理位置信息中的经度（从API version 24开始支持）。 |
| OH_MD_KEY_ALTITUDE | 海拔的键，值类型为float，该键是可选的。表示地理位置信息中的海拔（从API version 24开始支持）。 |

封装格式为mp4时，用户自定义的key必须以"com.openharmony."为开头。值类型可以为int32\_t、float、string，从API version 20开始增加支持uint8\_t\*。

封装格式为flv时，用户自定义的key必须以"com.openharmony."为开头。值类型为string。

配置选项key值说明：

mp4封装格式：

| key | 描述 | aac | mp3 | H.264 | H.265 | 封面类型（jpg、png、bmp） |
| --- | --- | --- | --- | --- | --- | --- |
| OH_MD_KEY_AUD_SAMPLE_RATE | 采样率 | 必须 | 必须 | - | - | - |
| OH_MD_KEY_AUD_CHANNEL_COUNT | 声道数 | 必须 | 必须 | - | - | - |
| OH_MD_KEY_AUDIO_SAMPLE_FORMAT | 输出音频流格式 | 可选 | 可选 | - | - | - |
| OH_MD_KEY_CHANNEL_LAYOUT | 通道布局 | 可选 | 可选 | - | - | - |
| OH_MD_KEY_PROFILE | 编码档次 | 可选 | - | - | - | - |
| OH_MD_KEY_BITRATE | 码率 | 可选 | 可选 | 可选 | 可选 | - |
| OH_MD_KEY_CODEC_CONFIG | 编解码器特定数据 | 可选 | - | 可选 | 可选 | - |
| OH_MD_KEY_WIDTH | 宽度 | - | - | 必须 | 必须 | 必须 |
| OH_MD_KEY_HEIGHT | 高度 | - | - | 必须 | 必须 | 必须 |
| OH_MD_KEY_FRAME_RATE | 视频流帧率 | - | - | 可选 | 可选 | - |
| OH_MD_KEY_COLOR_PRIMARIES | 视频色域 | - | - | 可选 | 可选 | - |
| OH_MD_KEY_TRANSFER_CHARACTERISTICS | 视频传递函数 | - | - | 可选 | 可选 | - |
| OH_MD_KEY_MATRIX_COEFFICIENTS | 视频矩阵系数 | - | - | 可选 | 可选 | - |
| OH_MD_KEY_RANGE_FLAG | 值域标志 | - | - | 可选 | 可选 | - |
| OH_MD_KEY_VIDEO_IS_HDR_VIVID | 视频轨是否为HDR VIVID | - | - | - | 可选 | - |

mp4封装辅助轨格式：

| key | 描述 | aac | mp3 | H.264 | H.265 |
| --- | --- | --- | --- | --- | --- |
| OH_MD_KEY_TRACK_TYPE | 轨道媒体类型 | 必须 | 必须 | 必须 | 必须 |
| OH_MD_KEY_TRACK_REFERENCE_TYPE | 轨道引用类型 | 必须 | 必须 | 必须 | 必须 |
| OH_MD_KEY_TRACK_DESCRIPTION | 轨道标识 | 必须 | 必须 | 必须 | 必须 |
| OH_MD_KEY_REFERENCE_TRACK_IDS | 引用轨道编号 | 必须 | 必须 | 必须 | 必须 |
| OH_MD_KEY_AUD_SAMPLE_RATE | 采样率 | 必须 | 必须 | - | - |
| OH_MD_KEY_AUD_CHANNEL_COUNT | 声道数 | 必须 | 必须 | - | - |
| OH_MD_KEY_AUDIO_SAMPLE_FORMAT | 输出音频流格式 | 可选 | 可选 | - | - |
| OH_MD_KEY_CHANNEL_LAYOUT | 通道布局 | 可选 | 可选 | - | - |
| OH_MD_KEY_PROFILE | 编码档次 | 可选 | - | - | - |
| OH_MD_KEY_BITRATE | 码率 | 可选 | 可选 | 可选 | 可选 |
| OH_MD_KEY_CODEC_CONFIG | 编解码器特定数据 | 可选 | - | 可选 | 可选 |
| OH_MD_KEY_WIDTH | 宽度 | - | - | 必须 | 必须 |
| OH_MD_KEY_HEIGHT | 高度 | - | - | 必须 | 必须 |
| OH_MD_KEY_FRAME_RATE | 视频流帧率 | - | - | 可选 | 可选 |
| OH_MD_KEY_COLOR_PRIMARIES | 视频色域 | - | - | 可选 | 可选 |
| OH_MD_KEY_TRANSFER_CHARACTERISTICS | 视频传递函数 | - | - | 可选 | 可选 |
| OH_MD_KEY_MATRIX_COEFFICIENTS | 视频矩阵系数 | - | - | 可选 | 可选 |
| OH_MD_KEY_RANGE_FLAG | 值域标志 | - | - | 可选 | 可选 |
| OH_MD_KEY_VIDEO_IS_HDR_VIVID | 视频轨是否为HDR VIVID | - | - | - | 可选 |

m4a封装格式：

| key | 描述 | aac | 封面类型（jpg、png、bmp） |
| --- | --- | --- | --- |
| OH_MD_KEY_AUD_SAMPLE_RATE | 采样率 | 必须 | - |
| OH_MD_KEY_AUD_CHANNEL_COUNT | 声道数 | 必须 | - |
| OH_MD_KEY_AUDIO_SAMPLE_FORMAT | 输出音频流格式 | 可选 | - |
| OH_MD_KEY_CHANNEL_LAYOUT | 通道布局 | 可选 | - |
| OH_MD_KEY_PROFILE | 编码档次 | 可选 | - |
| OH_MD_KEY_BITRATE | 码率 | 可选 | - |
| OH_MD_KEY_CODEC_CONFIG | 编解码器特定数据 | 可选 | - |
| OH_MD_KEY_WIDTH | 宽度 | - | 必须 |
| OH_MD_KEY_HEIGHT | 高度 | - | 必须 |

amr封装格式：

| key | 描述 | amr_nb | amr_wb |
| --- | --- | --- | --- |
| OH_MD_KEY_AUD_SAMPLE_RATE | 采样率 | 必须 | 必须 |
| OH_MD_KEY_AUD_CHANNEL_COUNT | 声道数 | 必须 | 必须 |
| OH_MD_KEY_AUDIO_SAMPLE_FORMAT | 输出音频流格式 | 可选 | 可选 |
| OH_MD_KEY_CHANNEL_LAYOUT | 通道布局 | 可选 | 可选 |
| OH_MD_KEY_BITRATE | 码率 | 可选 | 可选 |

mp3封装格式：

| key | 描述 | mp3 | 封面类型（jpg） |
| --- | --- | --- | --- |
| OH_MD_KEY_AUD_SAMPLE_RATE | 采样率 | 必须 | - |
| OH_MD_KEY_AUD_CHANNEL_COUNT | 声道数 | 必须 | - |
| OH_MD_KEY_AUDIO_SAMPLE_FORMAT | 输出音频流格式 | 可选 | - |
| OH_MD_KEY_CHANNEL_LAYOUT | 通道布局 | 可选 | - |
| OH_MD_KEY_BITRATE | 码率 | 可选 | - |
| OH_MD_KEY_WIDTH | 宽度 | - | 必须 |
| OH_MD_KEY_HEIGHT | 高度 | - | 必须 |

wav封装格式：

| key | 描述 | g711mu | raw |
| --- | --- | --- | --- |
| OH_MD_KEY_AUD_SAMPLE_RATE | 采样率 | 必须 | 必须 |
| OH_MD_KEY_AUD_CHANNEL_COUNT | 声道数 | 必须 | 必须 |
| OH_MD_KEY_AUDIO_SAMPLE_FORMAT | 输出音频流格式 | 可选 | 必须 |
| OH_MD_KEY_CHANNEL_LAYOUT | 通道布局 | 可选 | 可选 |
| OH_MD_KEY_BITRATE | 码率 | 必须 | 可选 |

aac封装格式：

| key | 描述 | aac |
| --- | --- | --- |
| OH_MD_KEY_AUD_SAMPLE_RATE | 采样率 | 必须 |
| OH_MD_KEY_AUD_CHANNEL_COUNT | 声道数 | 必须 |
| OH_MD_KEY_AUDIO_SAMPLE_FORMAT | 输出音频流格式 | 可选 |
| OH_MD_KEY_CHANNEL_LAYOUT | 通道布局 | 可选 |
| OH_MD_KEY_BITRATE | 码率 | 可选 |
| OH_MD_KEY_PROFILE | 编码档次 | 必须 |
| OH_MD_KEY_AAC_IS_ADTS | 是否为ADTS格式 | 必须 |

flac封装格式：

| key | 描述 | flac | 封面类型（jpg、png、bmp） |
| --- | --- | --- | --- |
| OH_MD_KEY_AUD_SAMPLE_RATE | 采样率 | 必须 | - |
| OH_MD_KEY_AUD_CHANNEL_COUNT | 声道数 | 必须 | - |
| OH_MD_KEY_AUDIO_SAMPLE_FORMAT | 输出音频流格式 | 必须 | - |
| OH_MD_KEY_CHANNEL_LAYOUT | 通道布局 | 可选 | - |
| OH_MD_KEY_BITRATE | 码率 | 可选 | - |
| OH_MD_KEY_CODEC_CONFIG | 编解码器特定数据 | 可选 | - |
| OH_MD_KEY_WIDTH | 宽度 | - | 必须 |
| OH_MD_KEY_HEIGHT | 高度 | - | 必须 |

ogg封装格式（从API version 23开始支持）：

| key | 描述 | Vorbis | OPUS |
| --- | --- | --- | --- |
| OH_MD_KEY_AUD_SAMPLE_RATE | 采样率 | 必须 | 必须 |
| OH_MD_KEY_AUD_CHANNEL_COUNT | 声道数 | 必须 | 必须 |
| OH_MD_KEY_CODEC_CONFIG | 编解码器特定数据 | 必须 | 必须 |

flv封装格式（从API版本26.0.0开始支持）：

| key | 描述 | aac | Audio Vivid | H.264 | H.265 |
| --- | --- | --- | --- | --- | --- |
| OH_MD_KEY_AUD_SAMPLE_RATE | 采样率 | 必须 | 必须 | - | - |
| OH_MD_KEY_AUD_CHANNEL_COUNT | 声道数 | 必须 | - | - | - |
| OH_MD_KEY_CHANNEL_LAYOUT | 通道布局 | 可选 | - | - | - |
| OH_MD_KEY_PROFILE | 编码档次 | 可选 | - | - | - |
| OH_MD_KEY_BITRATE | 码率 | 可选 | 可选 | 可选 | 可选 |
| OH_MD_KEY_CODEC_CONFIG | 编解码器特定数据 | 可选 | 可选 | 可选 | 可选 |
| OH_MD_KEY_WIDTH | 宽度 | - | - | 必须 | 必须 |
| OH_MD_KEY_HEIGHT | 高度 | - | - | 必须 | 必须 |
| OH_MD_KEY_FRAME_RATE | 视频流帧率 | - | - | 可选 | 可选 |
| OH_MD_KEY_COLOR_PRIMARIES | 视频色域 | - | - | 可选 | 可选 |
| OH_MD_KEY_TRANSFER_CHARACTERISTICS | 视频传递函数 | - | - | 可选 | 可选 |
| OH_MD_KEY_MATRIX_COEFFICIENTS | 视频矩阵系数 | - | - | 可选 | 可选 |
| OH_MD_KEY_RANGE_FLAG | 值域标志 | - | - | 可选 | 可选 |

具体开发指导请参考媒体数据封装。