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 高效实现音视频处理功能。在实际开发中,建议:

  1. 先查询能力,再使用:通过能力查询接口确认设备支持的编解码格式和规格
  2. 优先使用硬件编解码:硬件编解码性能更好、功耗更低
  3. 合理选择同步/异步模式:异步模式适合复杂场景,同步模式使用更简单
  4. 关注版本兼容性:部分格式和特性需要特定 API 版本支持

参考资料:华为开发者联盟 - AVCodec Kit

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐