【鸿蒙开发】第十八章 Media媒体服务(一)

目录

[1 简介](#1 简介)

[1.1 亮点/特征](#1.1 亮点/特征)

[1.2 开发说明](#1.2 开发说明)

[1.3 AVPlayer](#1.3 AVPlayer)

[1.3.1 音频播放](#1.3.1 音频播放)

[1.3.2 视频播放](#1.3.2 视频播放)

[1.3.3 支持的格式与协议](#1.3.3 支持的格式与协议)

[1.4 AVRecorder](#1.4 AVRecorder)

[1.4.1 支持的格式](#1.4.1 支持的格式)


1 简介

Media Kit(媒体服务)提供了AVPlayer和AVRecorder用于播放、录制音视频。

在Media Kit的开发指导中,将介绍各种涉及音频、视频播放或录制功能场景的开发方式,指导开发者如何使用系统提供的音视频API实现对应功能。比如使用SoundPool实现简单的提示音,当设备接收到新消息时,会发出短促的"滴滴"声;使用AVPlayer实现音乐播放器,循环播放一首音乐。

1.1 亮点/特征

  • 使用轻量媒体引擎

使用较少的系统资源(线程、内存),可支持音视频播放/录制,支持pipeline灵活拼装,支持插件化扩展source/demuxer/codec。

  • 支持HDR视频

系统原生数据结构与接口支持hdr vivid的采集与播放,方便三方应用在业务中使用系统的HDR能力,为用户带来更炫彩的体验。

  • 支持音频池

针对开发中常用的短促音效播放场景,如相机快门音效、系统通知音效等,应用可调用SoundPool,实现一次加载,多次低时延播放。

1.2 开发说明

本开发指导仅针对音视频播放或录制本身,由media模块提供相关能力,不涉及UI界面、图形处理、媒体存储或其他相关领域功能。

在开发音乐、视频播放功能之前,建议了解流媒体播放的相关概念包括但不限于:

  1. 播放过程:网络协议 > 容器格式 > 音视频编解码 > 图形/音频渲染
  2. 网络协议 :比如HLSHTTP/HTTPS
  3. 容器格式 :比如mp4mkvmpeg-ts
  4. 编码格式 :比如h264/h265

1.3 AVPlayer

AVPlayer主要工作是将Audio/Video媒体资源(比如mp4/mp3/mkv/mpeg-ts等)转码为可供渲染的图像和可听见的音频模拟信号,并通过输出设备进行播放。

AVPlayer提供功能完善一体化播放能力,应用只需要提供流媒体来源,不负责数据解析和解码就可达成播放效果。

1.3.1 音频播放

当使用AVPlayer开发音乐应用播放音频时,其交互关系如图所示。

音乐类应用通过调用JS接口层提供的AVPlayer接口实现相应功能时,框架层会通过播放服务(Player Framework)将资源解析成音频数据流(PCM),音频数据流经过软件解码后输出至音频服务(Audio Framework),由音频服务输出至音频驱动渲染,实现音频播放功能。完整的音频播放需要应用、Player Framework、Audio Framework、音频HDI共同实现。

图中,数字标注表示需要数据与外部模块的传递。

音乐应用将媒体资源传递给AVPlayer接口。

Player Framework将音频PCM数据流输出给Audio Framework,再由Audio Framework输出给音频HDI。

1.3.2 视频播放

当使用AVPlayer开发视频应用播放视频时,其交互关系如图所示。

应用通过调用JS接口层提供的AVPlayer接口实现相应功能时,框架层会通过播放服务(Player Framework)解析成单独的音频数据流和视频数据流,音频数据流经过软件解码后输出至音频服务(Audio Framework),再至硬件接口层的音频HDI,实现音频播放功能。视频数据流经过硬件(推荐)/软件解码后输出至图形渲染服务(Graphic Framework),再输出至硬件接口层的显示HDI,完成图形渲染。

完整的视频播放需要:应用、XComponent、Player Framework、Graphic Framework、Audio Framework、显示HDI和音频HDI共同实现。

图中,数字标注表示需要数据与外部模块的传递。

  1. 应用从XComponent组件获取窗口SurfaceID,获取方式参考XComponent。
  2. 应用把媒体资源、SurfaceID传递给AVPlayer接口。
  3. Player Framework把视频ES数据流输出给解码HDI,解码获得视频帧(NV12/NV21/RGBA)。
  4. Player Framework把音频PCM数据流输出给Audio Framework,Audio Framework输出给音频HDI。
  5. Player Framework把视频帧(NV12/NV21/RGBA)输出给Graphic Framework,Graphic Framework输出给显示HDI。

1.3.3 支持的格式与协议

推荐使用以下主流的播放格式,以免产生无法播放、卡顿、花屏等兼容性问题。若发生此类问题不会影响系统,退出播放即可。

支持的协议如下:

|------|------------------------------------|
| 协议类型 | 协议描述 |
| 本地点播 | 协议格式:支持file descriptor,禁止file path |
| 网络点播 | 协议格式:支持http/https/hls |
| 网络直播 | 协议格式:支持hls |

支持的音频播放格式如下:

|--------|-------------|
| 音频容器规格 | 规格描述 |
| m4a | 音频格式:AAC |
| aac | 音频格式:AAC |
| mp3 | 音频格式:MP3 |
| ogg | 音频格式:VORBIS |
| wav | 音频格式:PCM |

说明:

视频播放支持的视频格式分为必选规格和可选规格。必选规格为所有厂商均支持的视频格式。对于可选规格,厂商将基于实际情况决定是否实现。建议开发者做对应的兼容处理,保证应用功能全平台兼容。

1.4 AVRecorder

AVRecorder主要工作是捕获音频信号,接收视频信号,完成音视频编码并保存到文件中,帮助开发者轻松实现音视频录制功能,包括开始录制、暂停录制、恢复录制、停止录制、释放资源等功能控制。它允许调用者指定录制的编码格式、封装格式、文件路径等参数。

  • 音频录制:应用通过调用JS接口层提供的AVRecorder接口实现音频录制时,框架层会通过录制服务(Player Framework),调用音频服务(Audio Framework)通过音频HDI捕获音频数据,通过软件编码封装后保存至文件中,实现音频录制功能。
  • 视频录制:应用通过调用JS接口层提供的AVRecorder接口实现视频录制时,先通过Camera接口调用相机服务(Camera Framework)通过视频HDI捕获图像数据送至框架层的录制服务,录制服务将图像数据通过视频编码HDI编码,再将编码后的图像数据封装至文件中,实现视频录制功能。

通过音视频录制组合,可分别实现纯音频录制纯视频录制音视频录制

图中,数字标注表示需要数据与外部模块的传递。

  1. 应用通过AVRecorder接口从录制服务获取SurfaceID。
  2. 应用将SurfaceID设置给相机服务,相机服务可以通过SurfaceID获取到Surface。相机服务通过视频HDI捕获图像数据送至框架层的录制服务。
  3. 相机服务通过Surface将视频数据传递给录制服务。
  4. 录制服务通过视频编码HDI模块将视频数据编码。
  5. 录制服务将音频参数设置给音频服务,并从音频服务获取到音频数据。

1.4.1 支持的格式

支持的音频源如下:

|-------|--------------|
| 音频源类型 | 说明 |
| mic | 系统麦克风作为音频源输入 |

支持的视频源如下:

|-------------|------------------------|
| 视频源类型 | 说明 |
| surface_yuv | 输入surface中携带的是raw data |
| surface_es | 输入surface中携带的是ES data |

支持的音视频编码格式如下:

|-----------------|----------------|
| 音视频编码格式 | 说明 |
| audio/mp4a-latm | 音频/mp4a-latm类型 |
| video/hevc | 视频/hevc类型 |

支持的输出文件格式如下:

|--------|-------------|
| 输入文件格式 | 说明 |
| mp4 | 视频的容器格式,MP4 |
| m4a | 音频的容器格式,M4A |

参考文献:

1\]OpenHarmoney应用开发文档

相关推荐
别说我什么都不会13 小时前
ohos.net.http请求HttpResponse header中set-ccokie值被转成array类型
网络协议·harmonyos
码是生活13 小时前
鸿蒙开发排坑:解决 resourceManager.getRawFileContent() 获取文件内容为空问题
前端·harmonyos
鸿蒙场景化示例代码技术工程师14 小时前
基于Canvas实现选座功能鸿蒙示例代码
华为·harmonyos
小脑斧爱吃鱼鱼15 小时前
鸿蒙项目笔记(1)
笔记·学习·harmonyos
鸿蒙布道师15 小时前
鸿蒙NEXT开发对象工具类(TS)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
zhang10620915 小时前
HarmonyOS 基础组件和基础布局的介绍
harmonyos·基础组件·基础布局
马剑威(威哥爱编程)16 小时前
在HarmonyOS NEXT 开发中,如何指定一个号码,拉起系统拨号页面
华为·harmonyos·arkts
GeniuswongAir17 小时前
Flutter极速接入IM聊天功能并支持鸿蒙
flutter·华为·harmonyos
90后的晨仔20 小时前
鸿蒙ArkUI框架中的状态管理
harmonyos
别说我什么都不会2 天前
OpenHarmony 5.0(API 12)关系型数据库relationalStore 新增本地数据变化监听接口介绍
api·harmonyos