HarmonyOS AVCodec Kit 音视频编解码完全指南
HarmonyOS AVCodec Kit 音视频编解码完全指南
本文基于华为开发者联盟官方文档整理,全面介绍 HarmonyOS AVCodec Kit(音视频编解码服务)的核心能力、支持格式与开发要点。
一、AVCodec Kit 简介
AVCodec Kit 是 HarmonyOS 提供的音视频编解码服务套件,为开发者提供了统一的 Native API 接口,用于实现音频和视频的编码与解码功能。作为多媒体处理流程中的核心环节,AVCodec Kit 承担着将原始音视频数据压缩编码以降低存储和传输成本,以及将压缩码流解码还原为可播放数据的关键角色。
AVCodec Kit 的主要特点包括:
- 统一的 Native API:提供 C/C++ 接口,开发者可通过一致的编程模型处理不同格式的音视频数据
- 软硬件协同:系统自动优先使用硬件编解码器,在硬件资源不足时回退到软件编解码
- 丰富的格式支持:覆盖主流的视频编码格式(H.264、H.265、H.266 等)和音频编码格式(AAC、MP3、Opus 等)
- 同步与异步模式:支持同步和异步两种调用模式,满足不同业务场景的需求
- 高级特性:支持 HDR Vivid、Audio Vivid、ROI 编码、B 帧编码、时域可分层编码等高级功能

二、视频编解码格式支持
2.1 视频解码
AVCodec Kit 支持丰富的视频解码格式,开发者可以通过 MIME 类型创建对应的解码器。系统会优先创建硬件解码器实例,硬件资源不足时自动回退到软件解码。
| 视频解码类型 | MIME 类型常量 | API 版本要求 |
|---|---|---|
| AVC (H.264) | OH_AVCODEC_MIMETYPE_VIDEO_AVC |
- |
| HEVC (H.265) | OH_AVCODEC_MIMETYPE_VIDEO_HEVC |
- |
| VVC (H.266) | OH_AVCODEC_MIMETYPE_VIDEO_VVC |
- |
| MPEG2 | OH_AVCODEC_MIMETYPE_VIDEO_MPEG2 |
- |
| MPEG4 | OH_AVCODEC_MIMETYPE_VIDEO_MPEG4 |
- |
| H.263 | OH_AVCODEC_MIMETYPE_VIDEO_H263 |
- |
| AV1 | OH_AVCODEC_MIMETYPE_VIDEO_AV1 |
API 23+ |
| VP9 | OH_AVCODEC_MIMETYPE_VIDEO_VP9 |
API 23+ |
| VP8 | OH_AVCODEC_MIMETYPE_VIDEO_VP8 |
API 23+ |
| MJPEG | OH_AVCODEC_MIMETYPE_VIDEO_MJPEG |
API 22+ |
| MSVIDEO1 | OH_AVCODEC_MIMETYPE_VIDEO_MSVIDEO1 |
API 22+ |
| WMV3 | OH_AVCODEC_MIMETYPE_VIDEO_WMV3 |
API 22+ |
| RV30 | OH_AVCODEC_MIMETYPE_VIDEO_RV30 |
API 23+ |
| RV40 | OH_AVCODEC_MIMETYPE_VIDEO_RV40 |
API 23+ |
| WVC1 | OH_AVCODEC_MIMETYPE_VIDEO_WVC1 |
API 23+ |
| DVVIDEO | OH_AVCODEC_MIMETYPE_VIDEO_DVVIDEO |
API 23+ |
| RAWVIDEO | OH_AVCODEC_MIMETYPE_VIDEO_RAWVIDEO |
API 23+ |
| MPEG1 | OH_AVCODEC_MIMETYPE_VIDEO_MPEG1 |
API 23+ |
| Cinepak | OH_AVCODEC_MIMETYPE_VIDEO_CINEPAK |
API 24+ |
2.2 视频编码
视频编码方面,当前主要支持两种主流编码格式:
| 视频编码类型 | MIME 类型常量 |
|---|---|
| HEVC (H.265) | OH_AVCODEC_MIMETYPE_VIDEO_HEVC |
| AVC (H.264) | OH_AVCODEC_MIMETYPE_VIDEO_AVC |
视频编码支持多种高级特性,包括:
- 时域可分层视频编码:支持在单个码流中包含多个时间分辨率的层
- B 帧视频编码:支持双向预测帧,提升压缩效率
- ROI 视频编码:感兴趣区域编码,对重要区域分配更多码率
- 一入二出编码:支持一路输入产生两路不同分辨率的输出
- 编码前处理:支持缩放、裁剪等预处理操作
- 智能流畅倍速解码:智能变速播放,提升用户体验
三、音频编解码格式支持
3.1 音频解码
AVCodec Kit 支持广泛的音频解码格式,涵盖从常见的 AAC、MP3 到无损压缩格式 FLAC、APE 等:
| 音频解码类型 | MIME 类型常量 | API 版本要求 |
|---|---|---|
| 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 (NB/WB) | OH_AVCODEC_MIMETYPE_AUDIO_AMR_NB / OH_AVCODEC_MIMETYPE_AUDIO_AMR_WB |
- |
| G711mu | OH_AVCODEC_MIMETYPE_AUDIO_G711MU |
- |
| APE | OH_AVCODEC_MIMETYPE_AUDIO_APE |
- |
| Opus | OH_AVCODEC_MIMETYPE_AUDIO_OPUS |
- |
| G711a | OH_AVCODEC_MIMETYPE_AUDIO_G711A |
API 20+ |
| ALAC | OH_AVCODEC_MIMETYPE_AUDIO_ALAC |
API 22+ |
| AC3 | OH_AVCODEC_MIMETYPE_AUDIO_AC3 |
API 22+ |
| WMA (V1/V2/PRO) | OH_AVCODEC_MIMETYPE_AUDIO_WMAV1 / WMAV2 / WMAPRO |
API 22+ |
| GSM | OH_AVCODEC_MIMETYPE_AUDIO_GSM |
API 22+ |
| GSM_MS | OH_AVCODEC_MIMETYPE_AUDIO_GSM_MS |
API 22+ |
| Audio Vivid | OH_AVCODEC_MIMETYPE_AUDIO_VIVID |
API 11+ |
提示:从 API version 23 开始,新增支持 TWINVQ、ILBC、TRUEHD、DVAUDIO、DTS、COOK 等格式。
3.2 音频编码
音频编码支持以下格式:
| 音频编码类型 | MIME 类型常量 | 说明 |
|---|---|---|
| AAC | OH_AVCODEC_MIMETYPE_AUDIO_AAC |
最常用的音频编码格式 |
| Flac | OH_AVCODEC_MIMETYPE_AUDIO_FLAC |
无损音频编码 |
| MPEG (MP3) | OH_AVCODEC_MIMETYPE_AUDIO_MPEG |
MP3 编码 |
| G711mu | OH_AVCODEC_MIMETYPE_AUDIO_G711MU |
语音通信常用 |
| AMR (NB/WB) | OH_AVCODEC_MIMETYPE_AUDIO_AMR_NB / OH_AVCODEC_MIMETYPE_AUDIO_AMR_WB |
语音编码 |
| Opus | OH_AVCODEC_MIMETYPE_AUDIO_OPUS |
低延迟高音质编码 |
| Audio Vivid | OH_AVCODEC_MIMETYPE_AUDIO_VIVID |
从 API 26.0.0 开始支持 |
四、媒体数据封装与解封装
4.1 媒体数据解封装
AVCodec Kit 支持多种容器格式的解封装(Demuxing),能够从媒体文件中提取出视频轨、音频轨、字幕轨等数据。
音视频容器格式:
| 封装格式 | 视频轨支持 | 音频轨支持 |
|---|---|---|
| MP4 | AVC、HEVC、VVC、MPEG4 | AAC、MP3、Audio Vivid、ALAC |
| FMP4 | AVC、HEVC | AAC、MP3、Audio Vivid |
| MKV | AVC、HEVC、MSVIDEO1 | AAC、MP3、OPUS、ADPCM、ALAC |
| MPEG-TS | AVC、HEVC、MPEG2、MPEG4 | AAC、MP3、Audio Vivid |
| FLV | AVC、HEVC | AAC、Audio Vivid |
| MPEG-PS | AVC、MPEG2 | MP2、MP3、DTS |
| AVI | H.263、AVC、MPEG2、MPEG4、MJPEG | AAC、MP2、MP3、PCM、GSM、DTS |
| 3GP / 3G2 | H.263、AVC、MPEG4 | AAC、AMR |
| M4V | AVC、HEVC、MPEG4 | AAC、ALAC、AC3 |
| WMV | AVC、WMV3 | WMAV1、WMAV2、WMAPRO |
| RM / RMVB | RV30、RV40 | AAC、AC3、COOK |
纯音频格式:M4A、AAC、MP3、OGG、FLAC、WAV、AMR、APE、WMA、DTS、SunAU 等。
外挂字幕:SRT、WEBVTT。
4.2 媒体数据封装
封装(Muxing)是将编码后的音视频数据打包到容器文件中的过程。支持的封装格式包括:
| 封装格式 | 视频编码 | 音频编码 | 封面支持 |
|---|---|---|---|
| MP4 | H.264、H.265 | AAC、MP3 | JPG、PNG、BMP |
| M4A | - | AAC | JPG、PNG、BMP |
| MP3 | - | MP3 | JPG |
| AMR | - | AMR-NB/WB | - |
| WAV | - | G711mu、PCM | - |
| AAC | - | AAC | - |
| FLAC | - | FLAC | JPG、PNG、BMP |
| OGG | - | Vorbis、OPUS | - |
| FLV | H.264、H.265 | AAC、Audio Vivid | - |
说明:从 API 版本 26.0.0 开始支持 FLV 格式封装。MP4 封装支持 moov 前置、地理位置元数据(经纬度、海拔)等高级特性。
五、编解码能力查询
由于不同设备的硬件能力存在差异,开发者在使用编解码器之前,应先查询系统支持的编解码能力,确保应用在不同设备上的兼容性。
5.1 获取能力实例的三种方式
方式一:获取系统推荐的编解码器
通过 OH_AVCodec_GetCapability 获取系统推荐的编解码器能力实例:
// 获取系统推荐的音频 AAC 解码器能力实例
OH_AVCapability *capability = OH_AVCodec_GetCapability(
OH_AVCODEC_MIMETYPE_AUDIO_AAC, false);
方式二:按软硬件类别获取
通过 OH_AVCodec_GetCapabilityByCategory 指定软硬件类别:
// 获取硬件视频 AVC 编码器能力实例
OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(
OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
方式三:获取全量能力列表(API 24+)
通过 OH_AVCodec_GetCapabilityList 获取指定类型的全部编解码器列表:
uint32_t count = 0;
OH_AVCapability **capabilityList = OH_AVCodec_GetCapabilityList(
OH_AVCODEC_TYPE_VIDEO_DECODER, &count);
5.2 软硬件编解码器的差异化配置
软件编解码器和硬件编解码器各有优势:
| 类型 | 特点 | 适用场景 |
|---|---|---|
| 软件编解码器 | 在 CPU 上运行,迭代灵活、兼容性好、扩展能力强 | 格式特殊、硬件不支持的场景 |
| 硬件编解码器 | 在专有硬件上运行,低功耗、高性能、减少 CPU 负载 | 主流格式、追求性能和功耗优化的场景 |
开发者可根据编解码器类别配置不同的参数,例如硬件编码器可配置更高的帧率:
OH_AVCapability *capability = OH_AVCodec_GetCapability(
OH_AVCODEC_MIMETYPE_VIDEO_AVC, true);
bool isHardware = OH_AVCapability_IsHardware(capability);
double frameRate = isHardware ? 60.0 : 30.0;
OH_AVFormat_SetDoubleValue(format, OH_MD_KEY_FRAME_RATE, frameRate);
5.3 常见查询场景
- 创建指定名称的编解码器:当系统存在多个相同 MIME 类型的编解码器时,可先获取编解码器名称,再通过
CreateByName系列接口创建指定实例 - 创建多路编解码器:查询设备支持的最大实例数,避免超出系统资源限制
- 控制编码质量:查询支持的码率模式(CBR/VBR/CQ 等)和质量参数范围
- 查询档次和级别:确认支持的 Profile 和 Level,确保兼容性
- 设置正确的视频参数:查询支持的分辨率、帧率、像素格式范围
六、核心高级特性
6.1 HDR Vivid
HDR Vivid 是华为提出的高动态范围视频标准,AVCodec Kit 支持 HDR Vivid 视频的编解码,以及 HDR Vivid 到 SDR 的转换,提升视频观看体验。
6.2 Audio Vivid
Audio Vivid 是华为的音频标准,支持三维音效,从 API 11 开始支持解码,从 API 26.0.0 开始支持编码,为用户带来沉浸式音频体验。
6.3 DRM 安全解码
支持 DRM 解密的解封装格式包括 MP4(H.264、H.265、AAC)和 MPEG-TS(H.264、H.265、AAC),可筛选特定 MIME 类型的安全解码器。
七、开发准备
7.1 链接动态库
在 CMake 脚本中链接所需的动态库:
target_link_libraries(sample PUBLIC libnative_media_codecbase.so)
target_link_libraries(sample PUBLIC libnative_media_core.so)
target_link_libraries(sample PUBLIC libnative_media_venc.so) # 视频编码
target_link_libraries(sample PUBLIC libnative_media_vdec.so) # 视频解码
target_link_libraries(sample PUBLIC libnative_media_acodec.so) # 音频编解码
7.2 引入头文件
#include <multimedia/player_framework/native_avcapability.h>
#include <multimedia/player_framework/native_avcodec_audiocodec.h>
#include <multimedia/player_framework/native_avcodec_videoencoder.h>
#include <multimedia/player_framework/native_avcodec_videodecoder.h>
八、总结
HarmonyOS AVCodec Kit 提供了功能强大、格式丰富的音视频编解码能力,开发者可以通过统一的 Native API 高效实现音视频处理功能。在实际开发中,建议:
- 先查询能力,再使用:通过能力查询接口确认设备支持的编解码格式和规格
- 优先使用硬件编解码:硬件编解码性能更好、功耗更低
- 合理选择同步/异步模式:异步模式适合复杂场景,同步模式使用更简单
- 关注版本兼容性:部分格式和特性需要特定 API 版本支持
更多推荐



所有评论(0)