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-
MPEG2OH_AVCODEC_MIMETYPE_VIDEO_MPEG2-
MPEG4OH_AVCODEC_MIMETYPE_VIDEO_MPEG4-
H.263OH_AVCODEC_MIMETYPE_VIDEO_H263-
AV1OH_AVCODEC_MIMETYPE_VIDEO_AV1API 23+
VP9OH_AVCODEC_MIMETYPE_VIDEO_VP9API 23+
VP8OH_AVCODEC_MIMETYPE_VIDEO_VP8API 23+
MJPEGOH_AVCODEC_MIMETYPE_VIDEO_MJPEGAPI 22+
MSVIDEO1OH_AVCODEC_MIMETYPE_VIDEO_MSVIDEO1API 22+
WMV3OH_AVCODEC_MIMETYPE_VIDEO_WMV3API 22+
RV30OH_AVCODEC_MIMETYPE_VIDEO_RV30API 23+
RV40OH_AVCODEC_MIMETYPE_VIDEO_RV40API 23+
WVC1OH_AVCODEC_MIMETYPE_VIDEO_WVC1API 23+
DVVIDEOOH_AVCODEC_MIMETYPE_VIDEO_DVVIDEOAPI 23+
RAWVIDEOOH_AVCODEC_MIMETYPE_VIDEO_RAWVIDEOAPI 23+
MPEG1OH_AVCODEC_MIMETYPE_VIDEO_MPEG1API 23+
CinepakOH_AVCODEC_MIMETYPE_VIDEO_CINEPAKAPI 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 版本要求
AACOH_AVCODEC_MIMETYPE_AUDIO_AAC-
MPEG (MP3)OH_AVCODEC_MIMETYPE_AUDIO_MPEG-
FlacOH_AVCODEC_MIMETYPE_AUDIO_FLAC-
VorbisOH_AVCODEC_MIMETYPE_AUDIO_VORBIS-
AMR (NB/WB)OH_AVCODEC_MIMETYPE_AUDIO_AMR_NB / OH_AVCODEC_MIMETYPE_AUDIO_AMR_WB-
G711muOH_AVCODEC_MIMETYPE_AUDIO_G711MU-
APEOH_AVCODEC_MIMETYPE_AUDIO_APE-
OpusOH_AVCODEC_MIMETYPE_AUDIO_OPUS-
G711aOH_AVCODEC_MIMETYPE_AUDIO_G711AAPI 20+
ALACOH_AVCODEC_MIMETYPE_AUDIO_ALACAPI 22+
AC3OH_AVCODEC_MIMETYPE_AUDIO_AC3API 22+
WMA (V1/V2/PRO)OH_AVCODEC_MIMETYPE_AUDIO_WMAV1 / WMAV2 / WMAPROAPI 22+
GSMOH_AVCODEC_MIMETYPE_AUDIO_GSMAPI 22+
GSM_MSOH_AVCODEC_MIMETYPE_AUDIO_GSM_MSAPI 22+
Audio VividOH_AVCODEC_MIMETYPE_AUDIO_VIVIDAPI 11+

提示:从 API version 23 开始,新增支持 TWINVQ、ILBC、TRUEHD、DVAUDIO、DTS、COOK 等格式。

3.2 音频编码

音频编码支持以下格式:

音频编码类型MIME 类型常量说明
AACOH_AVCODEC_MIMETYPE_AUDIO_AAC最常用的音频编码格式
FlacOH_AVCODEC_MIMETYPE_AUDIO_FLAC无损音频编码
MPEG (MP3)OH_AVCODEC_MIMETYPE_AUDIO_MPEGMP3 编码
G711muOH_AVCODEC_MIMETYPE_AUDIO_G711MU语音通信常用
AMR (NB/WB)OH_AVCODEC_MIMETYPE_AUDIO_AMR_NB / OH_AVCODEC_MIMETYPE_AUDIO_AMR_WB语音编码
OpusOH_AVCODEC_MIMETYPE_AUDIO_OPUS低延迟高音质编码
Audio VividOH_AVCODEC_MIMETYPE_AUDIO_VIVID从 API 26.0.0 开始支持

四、媒体数据封装与解封装

4.1 媒体数据解封装

AVCodec Kit 支持多种容器格式的解封装(Demuxing),能够从媒体文件中提取出视频轨、音频轨、字幕轨等数据。

音视频容器格式:

封装格式视频轨支持音频轨支持
MP4AVC、HEVC、VVC、MPEG4AAC、MP3、Audio Vivid、ALAC
FMP4AVC、HEVCAAC、MP3、Audio Vivid
MKVAVC、HEVC、MSVIDEO1AAC、MP3、OPUS、ADPCM、ALAC
MPEG-TSAVC、HEVC、MPEG2、MPEG4AAC、MP3、Audio Vivid
FLVAVC、HEVCAAC、Audio Vivid
MPEG-PSAVC、MPEG2MP2、MP3、DTS
AVIH.263、AVC、MPEG2、MPEG4、MJPEGAAC、MP2、MP3、PCM、GSM、DTS
3GP / 3G2H.263、AVC、MPEG4AAC、AMR
M4VAVC、HEVC、MPEG4AAC、ALAC、AC3
WMVAVC、WMV3WMAV1、WMAV2、WMAPRO
RM / RMVBRV30、RV40AAC、AC3、COOK

纯音频格式:M4A、AAC、MP3、OGG、FLAC、WAV、AMR、APE、WMA、DTS、SunAU 等。

外挂字幕:SRT、WEBVTT。

4.2 媒体数据封装

封装(Muxing)是将编码后的音视频数据打包到容器文件中的过程。支持的封装格式包括:

封装格式视频编码音频编码封面支持
MP4H.264、H.265AAC、MP3JPG、PNG、BMP
M4A-AACJPG、PNG、BMP
MP3-MP3JPG
AMR-AMR-NB/WB-
WAV-G711mu、PCM-
AAC-AAC-
FLAC-FLACJPG、PNG、BMP
OGG-Vorbis、OPUS-
FLVH.264、H.265AAC、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、测试、元服务和应用上架分发等。

更多推荐