(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)
陈国栋
数字多媒体技术在过去的数十年里得到了飞速的发展,多媒体终端设备如智能音箱、智能门锁、智能手表广泛应用于人们生活中。如此小的设备却能承载如此多功能是如何实现的呢?HiStreamer 轻量级可定制的媒体管线框架为你解答!
接下来,咱们一起探秘 HiStreamer 轻量级可定制的媒体管线框架。
一、媒体管线框架是什么?
在讲 HiStreamer 之前,咱们先来了解下媒体管线框架是什么?
媒体框架是处理数字媒体信息(如编解码音视频数据)的软件框架。为了更容易扩展媒体框架支持更多媒体格式或支持更多功能,出现了 Pipeline 架构的媒体框架,如开源 GStreamer 等。采用 Pipeline 架构的媒体框架,称为媒体管线框架。它通常的做法是将基础媒体处理,例如数据读取、编解码等封装成一个个处理单元,然后用管道将这些处理单元串起来,从而实现媒体文件播放等各种功能。
二、HiStreamer是什么?
随着 AI 技术的发展,语音识别、人脸识别、场景理解等技术的进步支撑了智能音箱等新设备和新应用的出现,对媒体框架提出了新的要求。因此 HiStreamer 应运而生了。
HiStreamer 是基于 Pipeline 架构,用来处理媒体数据的软件框架。它具有轻量级、可定制、可扩展、可跨不同芯片和 OS 平台部署的特点。
从逻辑架构上讲,HiStreamer 主要由 HiStreamer 引擎和插件构成。HiStreamer 引擎又由业务封装层、Pipeline 框架层、插件管理层和工具库组成。插件主要由平台软件插件和厂商扩展插件两部分组成。如图 1 所示。
图1 HiStreamer逻辑架构
HiStreamer 引擎功能可裁剪(如裁剪视频),处理流程可灵活拼装。它主要包括以下几部分内容:
- 业务封装层:基于 Pipeline 封装实现播放器、录音机功能,简化上层应用使用。
- Pipeline 框架层:提供 Pipeline 和若干个节点(输入、解封装、解码和输出)的实现,支持把多个节点连接在一起形成 Pipeline。
- 插件管理层:用于管理插件生命周期,支持动态加载或静态链接两种方式使用插件。
- 工具库:提供框架依赖的工具,隔离操作系统差异,提供调测功能。
插件可弹性部署、动态伸缩,主要包括以下几部分内容:
- 平台软件插件:可跨产品复用的软件算法插件。
- 厂商扩展插件:厂商提供的基于硬件加速的插件,如硬件加速的编解码插件。
以上是对 HiStreamer 的特点和整体逻辑结构的一个总的概述,接下来咱们详细剖析它的关键特性。
三、HiStreamer的关键特性
HiStreamer 之所以能成为业界首个轻量级设备上可用、可定制的媒体管线框架,是因为它有以下的关键特性。
1、轻量级,可弹性部署到物联网设备
HiStreamer 的轻量级特点主要体现在精简的核心框架、插件弹性部署。
如图 1 所示,HiStreamer 的 Pipeline 框架由抽象管道(Pipeline)和节点构成,负责根据业务编排关系连接各个节点,形成数据流处理管道。它只实现系统调度必要的功能,具体业务处理由插件实现,比如文件数据读取由 File 插件实现,网络流媒体数据读取由 http 插件实现,MP3 解封装由 MP3 Demuxer 插件实现,MP3 解码由 MP3 Decoder 插件实现,音频输出由 Sinker 插件实现。插件管理层主要负责插件的加载/卸载/查询和调用。
插件采用弹性部署方式,轻量级设备根据业务需求部署需要的插件,从而大大减少资源占用。
2、可定制,支持节点灵活拼装和参数自动协商
HiStreamer 采用 Pipeline 架构模式,各个节点解耦,支持节点灵活拼装,可以根据业务需要拼装出不同的 Pipeline。为了多个节点能更好地协同工作,支持参数自动协商。接下来咱们分别介绍 HiStreamer 如何支持节点灵活拼装和参数自动协商的?
- 节点灵活拼装
HiStreamer 可以用来支持音视频解码播放,或音视频编码录制等。以音视频文件播放为例,音视频解码播放本质上是通过媒体框架将数据(音频数据、视频数据)按顺序经过 Source(输入)、Demuxer(解封装)、Decoder(解码)和 Sink(输出)四个环节处理的过程。
这四个环节和下面四个节点一一对应:
1. 输入节点:读取音频文件,获取文件数据流。
2. 解封装节点:对文件数据流进行解封装,获得文件头信息和 ES 数据(即 Element Streams,编码过的数据流)。
3. 解码节点:解码器对 ES 数据进行解码,获得 PCM(Pulse-code modulation)码流。
4. 输出节点:PCM 码流送到音频输出模块,播放出声音。
这四个节点按顺序连接形成管道(Pipeline),如图2所示。
图2 音频播放管道
由于节点是支持灵活拼装的,你可以根据自己的需要,选择不同的节点,拼装出不同的管道。比如可以拼装出音视频录制的管道(如图 3),当然也可以是完成其它功能的管道。
图3 音频录制管道
- 参数自动协商
为了让管道中的各个节点互相配合,形成高效的数据处理通道,HiStreamer 支持参数自动协商。下面以解封装节点和解码节点的参数自动协商为例进行介绍,如图 4 所示。
图4 节点参数协商示意图
如上图所示,经过解封装节点后确定当前数据流是 AAC-HE 格式,在协商过程中,解码节点从备选插件列表中选择最匹配的插件(插件 2),形成最终的业务处理通道,使得它们可以高效的协同工作。
3、可扩展,支持插件按需扩展
上文已提到 HiStreamer 的主要业务功能在插件中实现,Pipeline 框架的每个节点,都有对应的插件。如播放场景有输入节点、解封装节点、解码节点和输出节点,它们对应的插件是:输入插件、解封装插件、解码插件和输出插件。
采用这种设计方式,公共的业务逻辑和上下游节点的连接在节点中完成,插件只需要实现业务功能差异化的部分,这使得插件实现更简单。已有的媒体解封装/解码算法,也可以封装成 HiStreamer 插件。同时 HiStreamer 已经适配了 FFMPEG(跨平台的媒体算法库),可以比较方便支持 FFMPEG 已经支持的媒体格式(如 mp3、aac 等)。
四、结束语
了解完 HiStreamer 的特性,你是否也对它产生了浓厚的兴趣呢?
目前多媒体行业存在大量的潜在的业务创新需求,欢迎广大开发者一起加入,使用 HiStreamer 共同丰富多媒体生态,共同创造万物互联的新世界!