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的基础上,更新支持以下能力: 标准系统基础能力增强 本地基础音视频播放能力.视频硬编解码.相 ...
随机推荐
- Redis 使用规范
Redis 使用规范围绕如下几个纬度展开: 键值对使用规范: 命令使用规范: 数据保存规范: 运维规范. 键值对使用规范 有两点需要注意: 好的 key 命名,才能提供可读性强.可维护性高的 key, ...
- rancher接管已部署的集群
1.选择一台服务器部署rancher服务 docker pull rancher/rancher:v2.5.6 #拉取rancher镜像 docker run --privileged -d -v / ...
- 2022IDEA配置启动lilishop的swagger展示
目录 一.概述 二.基本构建 三.Git 导入编译器 四.模块描述浅析 五.配置文档 1.注释配置文件 2.添加配置 3.暂时关闭权限 4.浏览器测试访问 5.其他需要修改模块 六.参考文献 结语 一 ...
- Vscode的使用小技巧
命令行启动code 如果你的系统是Linux系统(我使用的是Ubuntu 16.04)这样就可以直接使用 code + filename来编辑文件(就像vi + filename) 如果你的系统是Ma ...
- C++ md5 函数
转 http://www.zedwood.com/article/cpp-md5-function MD5 is no longer considered cryptographically safe ...
- 判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下?
#!/bin/bashread -p "Input file name: " FILENAMEif [ -c "$FILENAME" ];then cp $FI ...
- JSP是什么?有什么特点?
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.在Servlet当中开发嵌入html的脚本,会非常的繁琐.JSP支持在h ...
- java-开发规约
public class TenTen { /** * 代码中的命名不能用下划线或美元符号开始和结束:例如 _name name_ $name name$ */ /** * 类名必须使用UpperCa ...
- Spring-boot-菜鸟-properties配置
如果测试结果出现中文乱码: 结果": Person{lastName='张胜男', age=11, boss=false, birth=Wed Nov 11 00:00:00 CST 202 ...
- 简述 Memcached 内存管理机制原理?
早期的 Memcached 内存管理方式是通过 malloc 的分配的内存,使用完后通过 free 来回收内存,这种方式容易产生内存碎片,并降低操作系统对内存的管理效 率.加重操作系统内存管理器的负担 ...