1、鸿蒙媒体系统架构介绍
媒体系统提供用户视觉、听觉信息的处理能力,如音视频信息的采集、压缩存储、解压播放等。
在操作系统实现中,通常基于不同的媒体信息处理内容,将媒体划分为不同的模块,包括:音频、视频(也称播放录制)、图片等。
如下图所示,媒体系统面向应用开发提供音视频应用、图库应用的编程框架接口;面向设备开发提供对接不同硬件芯片适配加速功能;中间以服务形态提供媒体核心功能和管理机制。
-
**音频(audio):**提供音量管理、音频路由管理、混音管理接口与服务。
-
**视频(media):**提供音视频解压播放、压缩录制接口与服务。
-
**图片(image):**提供图片编解码、图片处理接口与服务。
2、音视频概述
在开发音频功能之前,尤其是要实现处理音频数据的功能前,建议开发者先了解声学相关的知识,帮助理解操作系统提供的API是如何控制音频系统,从而开发出更易用、体验更好的音视频类应用。建议了解的相关概念包括但不限于:
-
音频量化的过程:采样 > 量化 > 编码
-
音频量化过程的相关概念:模拟信号和数字信号、采样率、声道、采样格式、位宽、码率、常见编码格式(如AAC、MP3、PCM、WMA等)、常见封装格式(如WAV、MPA、FLAC、AAC、OGG等)
在开发音乐、视频播放功能之前,建议了解流媒体播放的相关概念包括但不限于:
-
播放过程:网络协议 > 容器格式 > 音视频编解码 > 图形/音频渲染
-
网络协议:比如HLS、HTTP/HTTPS;容器格式:比如mp4,mkv,mpeg-ts,webm。
-
编码格式:比如h263/h264/h265,MPEG4/MPEG2。
2.1、音频流介绍
在开发音频应用之前,还需要了解什么是音频流,它是HarmonyOS音频系统中的关键概念。
音频流,是音频系统中对一个具备音频格式和音频使用场景信息的独立音频数据处理单元的定义,可以表示播放,也可以表示录制,并且具备独立音量调节和音频设备路由切换能力。
音频流基础信息通过AudioStreamInfo结构表示(类结构如下图),包含采样、声道、位宽、编码信息,是创建音频播放或录制流的必要参数,描述了音频数据的基本属性。在配置时开发者需要保证基础信息与传输的音频数据是相匹配的,音频系统才能正确处理数据。
2.1.1、音频流使用场景信息
除了基本属性,音频流还需要具备使用场景信息。基础信息只能对音频数据进行描述,但在实际的使用过程中,不同的音频流,在音量大小,设备路由,并发策略上是有区别的。系统就是通过音频流所附带的使用场景信息,为不同的音频流制定合适的处理策略,以达到最佳的音频用户体验。
-
播放场景
音频播放场景的信息,通过StreamUsage和ContentType进行描述。
StreamUsage指音频流本身的用途类型,包括媒体、语音通信、语音播报、通知、铃声等。
ContentType指音频流中数据的内容类型,包括语音、音乐、影视、通知、铃声等。
-
录制场景
音频流录制场景的信息,通过SourceType进行描述。
SourceType指音频流中录音源的类型,包括麦克风音频源、语音识别音频源、语音通话音频源等。
2.1.2、支持的音频格式
audio模块下的接口支持PCM编码,包括AudioRenderer、AudioCapturer、TonePlayer、OpenSL ES等。
音频格式说明:
-
支持的常用的音频采样率(Hz):8000、11025、12000、16000、22050、24000、32000、44100、48000、64000、96000,具体参考枚举AudioSamplingRate。
不同设备支持的采样率规格会存在差异。
-
支持单声道、双声道,具体参考AudioChannel。
-
支持的采样格式:U8(无符号8位整数)、S16LE(带符号的16位整数,小尾数)、S24LE(带符号的24位整数,小尾数)、S32LE(带符号的32位整数,小尾数)、F32LE(带符号的32位浮点数,小尾数),具体参考AudioSampleFormat。
由于系统限制,S24LE、S32LE、F32LE仅部分设备支持,请根据实际情况使用。
小尾数指的是小端模式,即数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。这种存储模式将地址的高低和数据的位权有效结合起来,高地址部分权值高,低地址部分权值低。
media模块下的接口支持的音视频格式将在后文中详细介绍。
3、图片开发概述
应用开发中的图片开发是对图片像素数据进行解析、处理、构造的过程,达到目标图片效果,主要涉及图片解码、图片处理、图片编码等。
在学习图片开发前,需要熟悉以下基本概念。
-
图片解码
指将所支持格式的存档图片解码成统一的PixelMap,以便在应用或系统中进行图片显示或图片处理。当前支持的存档图片格式包括JPEG、PNG、GIF、RAW、WebP、BMP、SVG。
-
PixelMap
指图片解码后无压缩的位图,用于图片显示或图片处理。
-
图片处理
指对PixelMap进行相关的操作,如旋转、缩放、设置透明度、获取图片信息、读写像素数据等。
-
图片编码
指将PixelMap编码成不同格式的存档图片(当前仅支持JPEG和WebP),用于后续处理,如保存、传输等。
图片开发的主要流程如下图所示。
-
获取图片: 通过应用沙箱等方式获取原始图片。
-
创建ImageSource实例: ImageSource是图片解码出来的图片源类,用于获取或修改图片相关信息。
-
图片解码: 通过ImageSource解码生成PixelMap。
-
图片处理: 对PixelMap进行处理,更改图片属性实现图片的旋转、缩放、裁剪等效果。然后通过Image组件显示图片。
-
图片编码: 使用图片打包器类ImagePacker,将PixelMap或ImageSource进行压缩编码,生成一张新的图片。
后续,我们将展开讨论音视频与图片的开发,请持续关注“Harmony自习室”。