​(以下内容来自开发者分享,不代表 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框架大揭秘的更多相关文章

  1. OpenHarmony 3.1 Beta版本关键特性解析——HAP包安装实现剖析

    ​(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)​ 石磊 随着社会的不断发展,人们逐渐注重更加高效.舒适.便捷.有趣的生活和工作体验. OpenAtom OpenHa ...

  2. OpenHarmony 3.1 Beta 版本关键特性解析——ArkUI canvas组件

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 江英杰 华为技术有限公司 canvas 是 ArkUI 开发框架里的画布组件,常用于自定义绘制图形.因为其轻量.灵活. ...

  3. OpenHarmony 3.1 Beta版本关键特性解析——探秘隐式查询

    ​(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)​ 徐浩 隐式查询是 OpenAtom OpenHarmony(以下简称"OpenHarmony" ...

  4. OpenHarmony 3.1 Beta版本关键特性解析——OpenHarmony图形框架

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 李煜 华为技术有限公司 崔坤华为技术有限公司 众所周知,动画是系统和应用与用户交互的重要环节.动画效果的好坏会直接影响 ...

  5. OpenHarmony 3.1 Beta版本关键特性解析——ArkUI容器类API介绍

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 刘鑫 容器类,顾名思义就是存储的类,用于存储各种数据类型的元素,并具备一系列处理数据元素的方法.在 ArkUI 开发框 ...

  6. OpenHarmony 3.1 Beta版本关键特性解析——分布式DeviceProfile

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 成翔 OpenAtom OpenHarmony(以下简称"OpenHarmony")作为分布式操作 ...

  7. OpenHarmony3.1 Release版本关键特性解析——Enhanced SWAP内存管理

    樊成阳 华为技术有限公司内核专家 陈杰 华为技术有限公司内核专家 OpenAtom OpenHarmony(以下简称"OpenHarmony")是面向全场景泛终端设备的操作系统,终 ...

  8. Unity 5.6 beta版本新特性

    http://manew.com/thread-98549-1-1.html 最新发布的beta版改进了编辑器和2D功能,图形性能更佳,加入新的视频播放器,并添加了对Facebook Gameroom ...

  9. OpenHarmony 3.1 Release版本发布

    OpenHarmony 3.1 Release 版本概述 当前版本在OpenHarmony 3.1 Beta的基础上,更新支持以下能力: 标准系统基础能力增强 本地基础音视频播放能力.视频硬编解码.相 ...

随机推荐

  1. petite-vue源码剖析-逐行解读@vue/reactivity之reactive

    在petite-vue中我们通过reactive构建上下文对象,并将根据状态渲染UI的逻辑作为入参传递给effect,然后神奇的事情发生了,当状态发生变化时将自动触发UI重新渲染.那么到底这是怎么做到 ...

  2. 模块 序列化模块:json pickle

    模块:一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀 模块的形象: 内置模块:安装Python解释器的时候一起安装上的 第三方模块(扩展模块):需要自己安装 自 ...

  3. JVM的垃圾回收算法有哪些

    常用的垃圾回收算法有如下四种:标记-清除.复制.标记-整理和分代收集. 标记-清除算法从算法的名称上可以看出,这个算法分为两部分,标记和清除.首先标记出所有需要被回收的对象,然后在标记完成后统一回收掉 ...

  4. 在Spring的事务体系中,事务传播特性:Required和RequiresNew有何不同?

    Required 如果当前存在一个事务,则加入当前事务.如果不存在任何事务,则创建一个新的事务.总之,要至少保证在一个事务中运行.PROPAGATION_REQUIRED通常作为默认的事务传播行为.p ...

  5. python 字典dict 增删改查操作

    初始化: a. data_dict = {} b. data_dict1 = dict() c. data_dict2 = {'key':'value'} 新增: a. data_dict[key]= ...

  6. JWT jti和kid属性的说明

    jti chaim=== JWT ID " jti"(JWT ID)声明为JWT提供了唯一的标识符. 标识符值的分配方式必须确保将相同值偶然分配给不同数据对象的可能性可以忽略不计: ...

  7. 通过pink构造简易部署脚本

    安装git        https://www.cnblogs.com/youxiu326/p/10540753.html 安装maven https://www.cnblogs.com/youxi ...

  8. Netty学习摘记 —— 初识编解码器

    本文参考 本篇文章是对<Netty In Action>一书第十章"编解码器框架"的学习摘记,主要内容为解码器和编码器 编解码器实际上是一种特殊的ChannelHand ...

  9. Python - 文档格式转换(CSV与JSON)

  10. IE中的编码位置

    进入设置 找到Editor 找到File Encodings