鸿蒙 Media Kit(媒体服务):音视频播放、录制
本文同步发表于微信公众号微信搜索 程语新视界 即可关注每个工作日都有文章更新Media Kit媒体服务是鸿蒙系统中用于开发音视频播放或录制功能的核心模块。无论是开发音乐播放器、视频播放器还是实现音视频录制、屏幕录制都离不开Media Kit。一、Media KitMedia 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 FrameworkAudio 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支持的音频播放格式音频容器规格描述m4aAACaacAACmp3MP3oggVORBISwavPCMflacFLACamrAMRapeAPE支持的视频播放格式视频容器规格描述分辨率mp4视频H265/H264音频AAC/MP34K/1080P/720P/480P/270Pmkv视频H265/H264音频AAC/MP34K/1080P/720P/480P/270Pts视频H265/H264音频AAC/MP34K/1080P/720P/480P/270P支持的字幕格式字幕容器支持的协议加载方式srt本地点播(fd)/网络点播外挂字幕vtt本地点播(fd)/网络点播外挂字幕webvtt网络点播(dash协议)内置字幕注意当dash协议存在内置字幕时不支持添加外挂字幕。三、SoundPool短音频播放SoundPool提供短音频的播放能力应用只需要提供音频资源来源不负责数据解析和解码就可达成播放效果。适用于相机快门音效、系统通知音效等场景。交互流程音乐应用 → SoundPool接口 → Player Framework → Audio Framework → 音频HDI ↓ 音频PCM数据流支持的协议协议类型协议描述本地点播支持file descriptor禁止file path支持的音频播放格式音频容器规格描述m4aAACaacAACmp3MP3oggVORBISwavPCM四、AVRecorder音视频录制AVRecorder主要工作是捕获音频信号、接收视频信号完成音视频编码并保存到文件中。支持开始录制、暂停录制、恢复录制、停止录制、释放资源等功能。交互流程音频录制应用 → AVRecorder接口 → 录制服务 → Audio Framework → 音频HDI → 编码封装 → 文件 **视频录制** 应用 → AVRecorder接口 → 录制服务 ← 相机服务(Camera Framework) → 视频HDI ↓ 视频编码HDI → 封装 → 文件支持的音频源音频源类型说明mic系统麦克风作为音频源输入支持的视频源视频源类型说明surface_yuv输入surface中携带的是raw datasurface_es输入surface中携带的是ES data支持的音视频编码格式编码格式说明audio/mp4a-latm音频/mp4a-latm类型video/hevc视频/hevc类型H.265video/avc视频/avc类型H.264audio/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_LCAAC_LC类型支持的视频编码格式视频编码格式说明H264H264类型支持的输出文件格式输出文件格式说明mp4视频容器格式m4a纯音频容器格式六、AVMetadataExtractor元数据提取AVMetadataExtractor主要用于获取音视频元数据包括音频标题、艺术家、专辑名称、时长等详细信息视频元数据获取流程与音频类似但无法获取专辑封面使用流程创建AVMetadataExtractor ↓ 设置资源 ↓ 获取元数据 ↓ 获取专辑封面可选仅音频 ↓ 销毁资源支持的音视频源参考媒体数据解析。七、AVImageGenerator视频缩略图AVImageGenerator主要用于获取视频缩略图可以从原始媒体资源中获取视频指定时间的视频帧。支持的视频源参考视频解码。八、AVTranscoder视频转码AVTranscoder主要用于将已压缩编码的视频文件按照指定参数转换为另一种格式的视频。转码能力能力说明编码参数转换修改源视频文件的编码参数格式、码率和封装格式HDR转SDR支持将HDR VIVID视频转换为SDR视频分辨率调整支持转码时降低视频分辨率分辨率限制限制说明原视频分辨率不高于4K目标视频分辨率不低于240p宽高关系目标视频宽、高不能大于源视频宽、高且不能设置为奇数支持的源视频格式依赖于系统解码器和解封装支持的格式参考AVCodec支持的格式。支持的目标视频格式封装格式视频编码类型音频编码类型mp4AVCH.264、HEVCH.265AAC轨道数限制限制说明字幕轨不支持转码后丢弃视频轨仅输出一条默认选择第一条音频轨仅输出一条默认选择第一条九、汇总对比模块功能输入输出AVPlayer音视频播放本地/网络媒体资源音频/视频输出SoundPool短音频播放本地音频文件音频输出AVRecorder音视频录制麦克风/相机mp4/m4a/mp3/wav/amrAVScreenCapture屏幕录制屏幕麦克风/内录mp4/m4aAVMetadataExtractor元数据提取音视频文件标题/艺术家/时长等AVImageGenerator视频缩略图视频文件视频帧图片AVTranscoder视频转码视频文件转码后视频文件