0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为OpenHarmony打造的一款新音视频引擎——HiStreamer

科技观点 来源:科技观点 作者:科技观点 2022-04-29 18:08 次阅读

原标题:OpenHarmony新音视频引擎——HiStreamer

OpenAtom OpenHarmony(以下简称“OpenHarmony”)是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。面对万物互联时代种类众多、且差异巨大的终端设备,我们为OpenHarmony打造了一款新的音视频引擎——HiStreamer。

一、 HiStreamer产生背景

数字多媒体技术在过去的数十年里得到了飞速的发展,音乐、电话、电视、电影、视频会议等等,伴随着我们度过每一天。为了给用户提供丰富的多媒体处理能力,业界已经有比较成熟的音视频引擎,比如开源的音视频引擎GStreamer。为什么我们还要打造一款新的音视频引擎呢?

随着万物互联时代的到来,越来越多的智能化设备出现在我们的生活中。比如:智能冰箱可以通过屏幕和声音,告诉人们储藏的菜品快要过期了;智能闸机可以通过人脸识别,自动完成检票工作;智能门锁可以通过语音和视频,提升开锁的效率和安全性......

与PC、手机等标准(Standard)设备不同,很多智能化设备的CPU处理能力比较弱、内存也比较小,传统的音视频引擎无法支持此类设备。HiStreamer应运而生,既支持轻量级的Mini/Small设备,也支持Standard设备(目前支持部分功能)。HiStreamer在不断发展和完善中,未来将会支持Standard设备的更多功能。

二、 “管道+插件”,实现弹性部署

为了支持Mini/Small/Standard设备,HiStreamer采用管道(Pipeline)和插件(plugin)的软件架构,从而可以根据设备的硬件和需求差异进行弹性部署。HiStreamer把音视频处理的每个过程抽象成节点,上一个节点的输出,作为下一个节点的输入,把多个节点连接起来,整体形成一个管道(Pipeline),完成音视频的数据读取、解封装、解码、输出的完整流程。同时,插件可以为Pipeline的节点提供丰富的扩展功能,让HiSteamer的音视频处理能力更强大。

1. Pipeline框架介绍

为了让大家理解HiStreamer的Pipeline框架,下面以MP3音频播放为例讲解:

输入是一个MP3文件,输出是播放出的音乐,这中间经过了很多步骤。

先来看一下MP3文件结构:

poYBAGJruTOASdpAAAAM27wnJ9k158.png

图1 MP3文件结构

MP3文件由ID3 Metadata容器头和若干MP3 Frame(MP3数据帧)构成。每个MP3 Frame又由MP3 Header(MP3头信息)和MP3 Data构成。这一系列的MP3 Frame称为ES Data( Element Stream Data)。

● ID3 Metadata:容器头,主要包括标题、艺术家、专辑、音轨数量等。

● MP3 Header:包含MP3 Sync word(标识MP3数据帧起始位置)和MPEG版本信息等。

● MP3 Data:包含压缩的音频信息。

播放MP3文件,首先需要把MP3文件数据读进来,然后去掉ID3 Metadata容器头(即解封装),再把一系列MP3 Frame解压缩成PCM(Pulse-Code Modulation)数据,最后驱动喇叭发声。这个过程按顺序可以抽象成如下四个节点:

pYYBAGJruTOAOG1VAAAiSXpEg1k424.png

图2 MP3音频播放的Pipeline

1. 输入节点(MediaSourceFilter): 读取MP3原始数据,传给下一个节点。

2. 解封装节点(DemuxerFilter): 解析ID3 Metadata容器头信息,作为后续节点的参数输入,并且把一帧帧MP3 Frame(即ES Data)传给后续的解码节点。

3. 解码节点(AudioDecoderFilter): 把ES Data解码成PCM数据,传给输出节点。

4. 输出节点(AudioSinkFilter): 输出PCM数据,驱动喇叭发声。

由以上示例可知,HiStreamer通过Pipeline框架把音视频处理的每个过程抽象成一个个节点。这些节点是解耦的,可以灵活拼装,从而可以根据业务需要拼装出不同的Pipeline。同时,为了使多个节点能更好地协同工作,HiStreamer还支持节点间的参数自动协商。

2. HiStreamer插件介绍

了解了HiStreamer的Pipeline框架后,我们再来看看HiStreamer插件。

HiStreamer的Pipeline框架的很多节点(比如输入节点、解封装节点、解码节点、输出节点等)都支持插件扩展。通过插件,节点的功能变得更加丰富、更加强大。

插件的应用场景非常广泛,比如:

● 媒体格式非常多,且以后还会有新的格式产生,可以通过插件支持新的媒体格式。

● 不同OS平台或设备,处理方式存在差异,可以通过插件支持不同的处理方式。

● 不同类型的设备,需求不同,能提供的CPU/ROM/RAM资源多少也不同,也可以通过插件来支持。

3. 弹性部署

HiStreamer基于管道(Pipeline)和插件(plugin)的软件架构,可以根据设备的硬件和需求差异实现弹性部署。

poYBAGJruTSAAYpdAABdizdcPBg701.png

图3 HiStreamer弹性部署

如图3所示,Mini设备(比如音箱),它的CPU处理能力很弱,ROM/RAM资源很少,需要的功能也比较少,只需要音频播放功能。HiStreamer可以配置成只支持音频播放,并且选择轻量级的插件,配置同步解码模式,减少资源消耗。而Small设备,CPU处理能力强一些,ROM/RAM空间大一些,需要音频播放和视频播放功能。HiStreamer可以配置成支持音视频播放,并且选择功能更强的插件。

三、HiStreamer逻辑架构

经过上面的介绍,我们了解了HiStreamer的“管道+插件”的软件架构。下面我们再来看看HiStreamer的详细的逻辑架构。

pYYBAGJruTSAPAEOAABi6ACHWnQ384.png

图4 HiStreamer逻辑架构图

HiStreamer主要由HiStreamer引擎和HiStreamer插件构成。

其中,HiStreamer引擎又分为以下四层:

业务封装层:基于Pipeline封装实现播放器、录音机功能,简化上层应用使用。

Pipeline框架层:提供Pipeline和若干个节点(输入、解封装、解码和输出)的实现,支持把多个节点连接在一起形成Pipeline。

插件管理层:用于插件生命周期管理,支持动态加载或静态链接两种方式使用插件。

工具库层:提供框架依赖的工具,隔离操作系统差异,提供调测功能。

HiStreamer插件,则分为平台软件插件和厂商硬插件两类:

平台软件插件:由OpenHarmony平台提供,可跨产品复用的软件算法插件。

厂商硬插件:由厂商提供的基于硬件加速的插件,如硬件加速的编解码插件。

应用开发者可以直接使用现成的插件来实现多媒体功能,节省大量的开发时间。插件越丰富,HiStreamer的音视频处理能力会更强大。OpenHarmony欢迎广大开发者参与HiStreamer插件的开发,一起来丰富HiStreamer插件!

四、HiStreamer插件开发及实例

下面就为大家介绍HiStreamer插件的开发过程及实例讲解,感兴趣的小伙伴们赶紧学起来,一起参与HiStreamer插件开发吧~

1. 插件的开发

HiStreamer插件的开发主要分为插件定义功能实现两个部分。

(1)插件定义

HiStreamer插件是通过PLUGIN_DEFINITION宏来定义的。以输入插件FileSource为例,定义代码如下:

poYBAGJruTWAEF0CAACWDcaTwUA091.png

使用PLUGIN_DEFINITION宏定义插件(即上面最后一行代码)时,传入了四个参数:

a) 插件名称:即示例中的“FileSource”。

b) License信息:即示例中的“LicenseType::APACHE_V2”。

c) 插件注册函数:即示例中的“FileSourceRegister”,该函数描述了插件基本信息,包括插件对象创建函数,并且还调用AddPlugin把插件注册到系统中。

d) 插件反注册函数:可以传为空实现。

(2)功能实现

实现插件功能时,需根据要实现的插件类型,继承对应插件接口类,并实现相关接口。比如实现输入插件FileSource,需要继承SourcePlugin,并实现SetSource、Read等接口,代码如下:

pYYBAGJruTaALNxxAAB-yZsWhtc126.png

FileSource插件的完整代码可参考码云平台OpenHarmony项目:

https://gitee.com/openharmony/multimedia_histreamer/tree/master/engine/plugin/plugins/source/file_source

2. 插件的部署

使用PLUGIN_DEFINITION定义的HiStreamer插件,可以是单一功能的插件,也可以是有多个功能的插件包。每个这样的插件或插件包,可以独立编译成.a或者.so,分别对应以下两种部署方式:

● 静态部署:一般用在mini设备上,插件编译成静态库.a,链接到系统中。

● 动态部署:一般用在small/standard设备上,插件编译成动态库.so,放到系统指定目录下,动态加载运行。

3. 插件的运行

插件开发完成且部署到系统之后,HiStreamer启动时就会自动完成插件的注册。下一步,就是运行插件了。

运行新实现的插件,需要先满足该插件的运行条件。比如:FileSource只会在播放本地文件时运行;MP3解码插件只会在播放MP3文件时运行......

开发者可以通过日志信息,查看是否运行了自己的插件。如果有别的插件注册到系统中,导致自己的插件无法运行时,可以卸载引起干扰的插件。卸载动态部署的插件,删除对应的.so即可;卸载静态部署的插件,需要修改编译脚本取消对应插件的编译。

五、结束语

OpenHarmony欢迎广大开发者一起加入HiStreamer插件开发,扩展自己想要的媒体功能,共同丰富HiStreamer媒体生态!

同时,预告大家: HiStreamer的下一个版本将为Standard设备增强更多功能,敬请期待!

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 音视频
    +关注

    关注

    4

    文章

    461

    浏览量

    29842
  • OpenHarmony
    +关注

    关注

    25

    文章

    3644

    浏览量

    16070
收藏 人收藏

    评论

    相关推荐

    盘点那些常见音视频接口

    我们熟知的些常见音视频接口,发展至今在日常使用中已经渐渐少了。但是在工业领域的音视频连接,依然能看到其身影。这些看似消失的接口,它们现在发展成什么样子了?本期我们将做个大盘点。
    的头像 发表于 09-09 14:34 409次阅读

    常见音视频接口的静电浪涌防护和滤波方案

    音视频接口在现代多媒体设备中扮演着至关重要的角色,它们确保了音视频信号在不同设备间的顺畅传输,各种类型的音视频接口满足了多样化的应用场景需求。 在音视频接口的设计领域,静电浪涌防护与滤
    的头像 发表于 06-25 11:28 579次阅读

    音视频产品EMC整改案例解析

    音视频产品EMCRE整改案例解析
    的头像 发表于 05-20 16:49 353次阅读
    <b class='flag-5'>音视频</b>产品EMC整改案例解析

    高清HDMI转USB 3.0音视频多功能音采集卡-测评

    LCC380的设计理念在于全面考虑到各种用户场景下的需求。为了实现高品质的音视频采集效果,卡体搭载了业界领先的音频处理器解决方案。无论您是热衷于游戏直播、视频会议还是其他音视频应用,都能通过LCC380获得出色的音频输入输出体验
    的头像 发表于 05-14 17:45 735次阅读
    高清HDMI转USB 3.0<b class='flag-5'>音视频</b>多功能音采集卡-测评

    分享一款高清HDMI音视频采集编码卡,支持双码流

    “灵卡CAS”系列HDMI音视频采集卡。独具匠心的设计与功能配置,适用于各种规模的商务会议、多媒体教育以及数字化展示等各类场景。
    的头像 发表于 05-07 11:43 331次阅读
    分享<b class='flag-5'>一款</b>高清HDMI<b class='flag-5'>音视频</b>采集编码卡,支持双码流

    【RTC程序设计:实时音视频权威指南】音视频的编解码压缩技术

    音视频所载有的信息在通过传输的时候就需要压缩编码。 其中,文本压缩是指通过使用各种算法和技术,将文本数据表示更紧凑的形式,以减少存储空间。 霍夫曼编码是种无损压缩算法,它可以根据字符出现
    发表于 04-28 21:04

    音视频SoC与AI技术融合,带来更智能的音视频处理解决方案

    电子发烧友网报道(文/李弯弯)音视频SoC,即音视频系统级芯片或片上系统,是种高度集成化的芯片,它将电路板上的多块芯片以及嵌入式软件全部集成到块芯片中。
    的头像 发表于 04-26 01:20 4143次阅读

    【RTC程序设计:实时音视频权威指南】新书

    应用,开发者提供了完整的RTC解决方案。 首先RTC 是个涉及音视频编解码、网络传输、实时交互等多个领域的复杂技术。希望能通过这本书从基础知识开始,逐步深入到高级应用和系统设计。 其次,RTC 技术
    发表于 04-22 09:09

    分享一款VGA转USB3.0音视频采集卡

    LCC385是灵卡技术研发的⼀VGA转HDMI输出的音视频采集卡。其VGA输入和HDMI输出均支持1920x1080p@60fps视频;其输出接口采用USB3.0,兼容USB2.0,可输出
    发表于 04-22 09:08

    MS9604:一款 HDMI 视频处理器,包含 4 路独立 HDMI 音视频输入通道

    1.MS9604 是一款 HDMI 视频处理器,包含 4 路独立 HDMI 音视频输入通道、4 路独立 HDMI 音视频输出通道、路 SP
    的头像 发表于 04-16 16:19 769次阅读
    MS9604:<b class='flag-5'>一款</b> HDMI <b class='flag-5'>视频</b>处理器,包含 4 路独立 HDMI <b class='flag-5'>音视频</b>输入通道

    音视频解码生成:打造你的专属高清影院体验

    在数字化时代,人们对观影体验的要求越来越高。音视频解码生成技术,作为现代多媒体播放的核心,正是为了满足这种需求而不断发展和完善的。通过这项技术,我们可以轻松打造属于自己的高清影院体验。 、高清画质
    的头像 发表于 02-25 14:47 373次阅读

    音视频解码生成:打造极致观影体验的关键技术

    在现代多媒体时代,音视频解码生成技术已成为提供极致观影体验的核心要素。它不仅能够确保音视频数据的高效传输,还能保证播放的流畅性和画质清晰度,用户带来身临其境的观影享受。 1. 解码生成的重要性
    的头像 发表于 02-25 14:43 425次阅读

    音视频解码生成在多媒体制作中的应用

    视频编辑和后期制作中,音视频解码生成技术用于将原始素材解码可编辑的格式。编辑人员可以对这些解码后的素材进行剪辑、特效处理、色彩调整等操作,以制作出高质量的影视作品。 2. 音频处理 音频处理是多媒体制作中的另
    的头像 发表于 02-21 14:39 344次阅读

    音视频解码生成与流媒体传输的结合

    音视频数据首先被编码适合网络传输的格式,然后发送到用户端。在用户端,解码器负责将这些编码后的数据解码原始的音视频信号,以便用户可以观看或收听。因此,解码生成和流媒体传输是相互依存
    的头像 发表于 02-21 14:36 354次阅读

    音视频

    音视频技术都喜欢深究内部最核心的原理和机制,尤其是ffmpeg这个编解码库,可以说是音视频领域事实上的标准。语音智能算法,语言语义分析和理解,流媒体服务器等高端技术也都基于它而构建。希望有幸获得本书,深度学习ffmpeg核心技术,和作者
    发表于 11-23 08:51