OpenHarmony 3.1 Beta版本关键特性解析——HiStreamer框架大揭秘
(以下内容来自开发者分享,不代表 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 共同丰富多媒体生态,共同创造万物互联的新世界!
扫码添加开发者小助手微信
获取更多OpenHarmony开发资源和开发者活动资讯
OpenHarmony 3.1 Beta版本关键特性解析——HiStreamer框架大揭秘的更多相关文章
- OpenHarmony 3.1 Beta版本关键特性解析——HAP包安装实现剖析
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 石磊 随着社会的不断发展,人们逐渐注重更加高效.舒适.便捷.有趣的生活和工作体验. OpenAtom OpenHa ...
- OpenHarmony 3.1 Beta 版本关键特性解析——ArkUI canvas组件
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 江英杰 华为技术有限公司 canvas 是 ArkUI 开发框架里的画布组件,常用于自定义绘制图形.因为其轻量.灵活. ...
- OpenHarmony 3.1 Beta版本关键特性解析——探秘隐式查询
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 徐浩 隐式查询是 OpenAtom OpenHarmony(以下简称"OpenHarmony" ...
- OpenHarmony 3.1 Beta版本关键特性解析——OpenHarmony图形框架
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 李煜 华为技术有限公司 崔坤华为技术有限公司 众所周知,动画是系统和应用与用户交互的重要环节.动画效果的好坏会直接影响 ...
- OpenHarmony 3.1 Beta版本关键特性解析——ArkUI容器类API介绍
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 刘鑫 容器类,顾名思义就是存储的类,用于存储各种数据类型的元素,并具备一系列处理数据元素的方法.在 ArkUI 开发框 ...
- OpenHarmony 3.1 Beta版本关键特性解析——分布式DeviceProfile
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 成翔 OpenAtom OpenHarmony(以下简称"OpenHarmony")作为分布式操作 ...
- OpenHarmony3.1 Release版本关键特性解析——Enhanced SWAP内存管理
樊成阳 华为技术有限公司内核专家 陈杰 华为技术有限公司内核专家 OpenAtom OpenHarmony(以下简称"OpenHarmony")是面向全场景泛终端设备的操作系统,终 ...
- Unity 5.6 beta版本新特性
http://manew.com/thread-98549-1-1.html 最新发布的beta版改进了编辑器和2D功能,图形性能更佳,加入新的视频播放器,并添加了对Facebook Gameroom ...
- OpenHarmony 3.1 Release版本发布
OpenHarmony 3.1 Release 版本概述 当前版本在OpenHarmony 3.1 Beta的基础上,更新支持以下能力: 标准系统基础能力增强 本地基础音视频播放能力.视频硬编解码.相 ...
随机推荐
- http请求中的三种参数类型
1.URL参数:实际就是querry string的方式,参数拼接在url之后以?隔开,参数之间以&连接. 优点:简单,页面跳转比较快. 缺点:1.基于浏览器对urk长度有限制,不能超过204 ...
- 修改vue的url
1.修改router的index.js文件,增加base url的配置 2.修改config的index.js文件. bulid的index,assetsRoots和assetsPublicPath的 ...
- knife4j只用此插件的最简洁开发方式
一.POM添加 在pom文件里添加包 1 <!--引入knife4j以来--> 2 <dependency> 3 <groupId>com.github.xiaoy ...
- 分治FFT/NTT
粘板子: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; t ...
- 【Ansible】ansible容器学习环境搭建
想要学习ansible,只有一个节点肯定是不行的,而搭建虚拟机又是一件非常费时费力费资源的事情,所以通过docker 快速搭建一个容器学习环境是一个不错的选择 1. 了解ansible部署 1.1 需 ...
- [vmware to openstack] 安装virtio驱动
描述 从vmware的虚拟机迁移到opensatck,由于vmware虚拟机磁盘类型采用的是scsi,要迁移到opensatck平台运行,发现虚拟机无法起来,原因是vmware虚拟机没有安装vir ...
- redis事务及相关命令介绍
redis事务及相关命令介绍 一.概述:和众多其它数据库一样,Redis作为NoSQL数据库也同样提供了事务机制.在Redis中,MULTI/EXEC/DISCARD/WATCH这四个命令是我们实现事 ...
- Oracle数据常用的备份与恢复?
Oracle的备份与恢复有三种标准的模式,大致分为两大类,备份恢复(物理上的)以及导入导出(逻辑上的),而备份恢复又可以根据数据库的工作模式分为非归档模式(Nonarchivelog-style)和归 ...
- 如果你的Serializable类包含一个不可序列化的成员,会发生什么?你是如何解决的?
任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(trancient)变量来轻松解决. Java 序列化相关的常 ...
- JavaScript的访问器
一.访问器属性: 1.Configurable:表示能否通过delete删除属性,从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性.对于直接在对象上定义的属性,这个特性的默认值为tr ...