鸿蒙 Media Kit(媒体服务):音视频播放、录制
鸿蒙MediaKit是音视频开发核心模块,提供七大功能:AVPlayer支持多种格式音视频播放;SoundPool实现短音频播放;AVRecorder/AvScreenCapture分别完成音视频录制和屏幕录制;AVMetadataExtractor提取元数据;AVImageGenerator获取视频缩略图;AVTranscoder实现视频转码。该套件具有轻量引擎、HDR支持、低时延播放等特点,支
本文同步发表于微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
Media Kit(媒体服务)是鸿蒙系统中用于开发音视频播放或录制功能的核心模块。无论是开发音乐播放器、视频播放器,还是实现音视频录制、屏幕录制,都离不开Media Kit。
一、Media Kit
Media Kit(媒体服务)用于开发音视频播放或录制的各类功能。例如:
-
使用SoundPool实现简单的提示音,当设备接收到新消息时发出短促的"滴滴"声
-
使用AVPlayer实现音乐播放器,循环播放一首音乐
Media Kit 七大模块
| 模块 | 功能 |
|---|---|
| AVPlayer | 播放音视频 |
| SoundPool | 播放短音频 |
| AVRecorder | 录制音视频 |
| AVScreenCapture | 录制屏幕 |
| AVMetadataExtractor | 获取音视频元数据 |
| AVImageGenerator | 获取视频缩略图 |
| AVTranscoder | 视频转码 |
亮点/特征
| 特征 | 说明 |
|---|---|
| 轻量媒体引擎 | 使用较少的系统资源(线程、内存),支持pipeline灵活拼装 |
| 支持HDR视频 | 支持HDR Vivid的采集与播放,带来更炫彩的体验 |
| 支持音频池 | 一次加载,多次低时延播放(相机快门、系统通知等) |
说明
本文仅针对音视频播放或录制本身,由media模块提供相关能力,不涉及UI界面、图形处理、媒体存储或其他相关领域功能。
流媒体播放相关概念:
| 概念 | 说明 |
|---|---|
| 网络协议 | HLS、HTTP-FLV、HTTP/HTTPS |
| 容器格式 | mp4、mkv、mpeg-ts |
| 编码格式 | h264、h265 |
| 播放过程 | 网络协议 → 容器格式 → 音视频编解码 → 图形/音频渲染 |
二、AVPlayer(音视频播放)
AVPlayer主要工作是将Audio/Video媒体资源(如mp4、mp3、mkv、mpeg-ts等)转码为可供渲染的图像和可听见的音频模拟信号,并通过输出设备进行播放。应用只需要提供流媒体来源,不负责数据解析和解码就可达成播放效果。
音频播放交互流程
音乐应用 → AVPlayer接口 → Player Framework → Audio Framework → 音频HDI
↓
音频PCM数据流
说明:
-
应用将媒体资源传递给AVPlayer接口
-
Player Framework将音频PCM数据流输出给Audio Framework
-
Audio Framework输出给音频HDI,实现音频播放
视频播放交互流程
应用 → XComponent → AVPlayer接口 → Player Framework
↓
音频PCM → Audio Framework → 音频HDI
视频ES → 解码HDI → Graphic Framework → 显示HDI
参与模块:应用、XComponent、Player Framework、Graphic Framework、Audio Framework、显示HDI、音频HDI
支持的协议
| 协议类型 | 协议描述 |
|---|---|
| 本地点播 | 支持file descriptor,禁止file path |
| 网络点播 | 支持http/https/hls/dash |
| 网络直播 | 支持hls/http-flv |
支持的音频播放格式
| 音频容器 | 规格描述 |
|---|---|
| m4a | AAC |
| aac | AAC |
| mp3 | MP3 |
| ogg | VORBIS |
| wav | PCM |
| flac | FLAC |
| amr | AMR |
| ape | APE |
支持的视频播放格式
| 视频容器 | 规格描述 | 分辨率 |
|---|---|---|
| mp4 | 视频:H265/H264,音频:AAC/MP3 | 4K/1080P/720P/480P/270P |
| mkv | 视频:H265/H264,音频:AAC/MP3 | 4K/1080P/720P/480P/270P |
| ts | 视频:H265/H264,音频:AAC/MP3 | 4K/1080P/720P/480P/270P |
支持的字幕格式
| 字幕容器 | 支持的协议 | 加载方式 |
|---|---|---|
| srt | 本地点播(fd)/网络点播 | 外挂字幕 |
| vtt | 本地点播(fd)/网络点播 | 外挂字幕 |
| webvtt | 网络点播(dash协议) | 内置字幕 |
注意:当dash协议存在内置字幕时,不支持添加外挂字幕。
三、SoundPool(短音频播放)
SoundPool提供短音频的播放能力,应用只需要提供音频资源来源,不负责数据解析和解码就可达成播放效果。适用于相机快门音效、系统通知音效等场景。
交互流程
音乐应用 → SoundPool接口 → Player Framework → Audio Framework → 音频HDI
↓
音频PCM数据流
支持的协议
| 协议类型 | 协议描述 |
|---|---|
| 本地点播 | 支持file descriptor,禁止file path |
支持的音频播放格式
| 音频容器 | 规格描述 |
|---|---|
| m4a | AAC |
| aac | AAC |
| mp3 | MP3 |
| ogg | VORBIS |
| wav | PCM |
四、AVRecorder(音视频录制)
AVRecorder主要工作是捕获音频信号、接收视频信号,完成音视频编码并保存到文件中。支持开始录制、暂停录制、恢复录制、停止录制、释放资源等功能。
交互流程
音频录制:
应用 → AVRecorder接口 → 录制服务 → Audio Framework → 音频HDI → 编码封装 → 文件
**视频录制**:
应用 → AVRecorder接口 → 录制服务 ← 相机服务(Camera Framework) → 视频HDI
↓
视频编码HDI → 封装 → 文件
支持的音频源
| 音频源类型 | 说明 |
|---|---|
| mic | 系统麦克风作为音频源输入 |
支持的视频源
| 视频源类型 | 说明 |
|---|---|
| surface_yuv | 输入surface中携带的是raw data |
| surface_es | 输入surface中携带的是ES data |
支持的音视频编码格式
| 编码格式 | 说明 |
|---|---|
| audio/mp4a-latm | 音频/mp4a-latm类型 |
| video/hevc | 视频/hevc类型(H.265) |
| video/avc | 视频/avc类型(H.264) |
| audio/mpeg | 音频/mpeg类型 |
| audio/g711mu | 音频/g711-mulaw类型 |
| audio/3gpp | 音频/amr-nb类型 |
| audio/amr-wb | 音频/amr-wb类型 |
支持的输出文件格式
| 输出文件格式 | 说明 |
|---|---|
| mp4 | 视频容器格式 |
| m4a | 音频容器格式 |
| mp3 | 音频容器格式 |
| wav | 音频容器格式 |
| amr | 音频容器格式 |
五、AVScreenCapture(屏幕录制)
AVScreenCapture主要工作是捕获音频信号、视频信号,并通过音视频编码将屏幕信息保存到文件中,支持录屏存文件和录屏取码流两套接口。
交互流程
应用 → AVScreenCapture接口 → 录屏框架
↓
音频 → Audio Framework → 音频捕获
视频 → 图形图像服务 → 视频捕获
↓
编码封装 → 文件
支持的音频源
| 音频源类型 | 说明 |
|---|---|
| MIC | 系统麦克风作为音频源输入 |
| ALL_PLAYBACK | 系统内录作为音频源输入 |
支持的视频源
| 视频源类型 | 说明 |
|---|---|
| SURFACE_RGBA | 输出Buffer是rgba data |
支持的音频编码格式
| 音频编码格式 | 说明 |
|---|---|
| AAC_LC | AAC_LC类型 |
支持的视频编码格式
| 视频编码格式 | 说明 |
|---|---|
| H264 | H264类型 |
支持的输出文件格式
| 输出文件格式 | 说明 |
|---|---|
| mp4 | 视频容器格式 |
| m4a | 纯音频容器格式 |
六、AVMetadataExtractor(元数据提取)
AVMetadataExtractor主要用于获取音视频元数据,包括:
-
音频:标题、艺术家、专辑名称、时长等详细信息
-
视频:元数据获取流程与音频类似,但无法获取专辑封面
使用流程
创建AVMetadataExtractor
↓
设置资源
↓
获取元数据
↓
获取专辑封面(可选,仅音频)
↓
销毁资源
支持的音视频源
参考媒体数据解析。
七、AVImageGenerator(视频缩略图)
AVImageGenerator主要用于获取视频缩略图,可以从原始媒体资源中获取视频指定时间的视频帧。
支持的视频源
参考视频解码。
八、AVTranscoder(视频转码)
AVTranscoder主要用于将已压缩编码的视频文件按照指定参数转换为另一种格式的视频。
转码能力
| 能力 | 说明 |
|---|---|
| 编码参数转换 | 修改源视频文件的编码参数(格式、码率)和封装格式 |
| HDR转SDR | 支持将HDR VIVID视频转换为SDR视频 |
| 分辨率调整 | 支持转码时降低视频分辨率 |
分辨率限制
| 限制 | 说明 |
|---|---|
| 原视频分辨率 | 不高于4K |
| 目标视频分辨率 | 不低于240p |
| 宽高关系 | 目标视频宽、高不能大于源视频宽、高,且不能设置为奇数 |
支持的源视频格式
依赖于系统解码器和解封装支持的格式,参考AVCodec支持的格式。
支持的目标视频格式
| 封装格式 | 视频编码类型 | 音频编码类型 |
|---|---|---|
| mp4 | AVC(H.264)、HEVC(H.265) | AAC |
轨道数限制
| 限制 | 说明 |
|---|---|
| 字幕轨 | 不支持,转码后丢弃 |
| 视频轨 | 仅输出一条,默认选择第一条 |
| 音频轨 | 仅输出一条,默认选择第一条 |
九、汇总对比
| 模块 | 功能 | 输入 | 输出 |
|---|---|---|---|
| AVPlayer | 音视频播放 | 本地/网络媒体资源 | 音频/视频输出 |
| SoundPool | 短音频播放 | 本地音频文件 | 音频输出 |
| AVRecorder | 音视频录制 | 麦克风/相机 | mp4/m4a/mp3/wav/amr |
| AVScreenCapture | 屏幕录制 | 屏幕+麦克风/内录 | mp4/m4a |
| AVMetadataExtractor | 元数据提取 | 音视频文件 | 标题/艺术家/时长等 |
| AVImageGenerator | 视频缩略图 | 视频文件 | 视频帧图片 |
| AVTranscoder | 视频转码 | 视频文件 | 转码后视频文件 |
更多推荐


所有评论(0)