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

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

3天内不再提示

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

OpenAtom OpenHarmony 来源:OpenAtom OpenHarmony 作者:OpenAtom OpenHarmony 2022-06-17 11:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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 文件结构:

93650b22-ddbd-11ec-ba43-dac502259ad0.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)数据,最后驱动喇叭发声。这个过程按顺序可以抽象成如下四个节点:

93851dea-ddbd-11ec-ba43-dac502259ad0.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)的软件架构,可以根据设备的硬件和需求差异实现弹性部署。

93c96c34-ddbd-11ec-ba43-dac502259ad0.png

图3 HiStreamer弹性部署

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

三、HiStreamer逻辑架构

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

93ff6e6a-ddbd-11ec-ba43-dac502259ad0.png

图4 HiStreamer逻辑架构图

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

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

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

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

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

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

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

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

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

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

四、HiStreamer插件开发及实例

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

1. 插件的开发

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

(1)插件定义

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


std::shared_ptr FileSourcePluginCreator(const std::string& name){    return std::make_shared(name);}Status FileSourceRegister(const std::shared_ptr& reg){    SourcePluginDef definition;    definition.name = "FileSource";    definition.description = "File source";    definition.rank = 100; // 100: max rank    definition.protocol.emplace_back(ProtocolType::FILE);    definition.creator = FileSourcePluginCreator;    return reg->AddPlugin(definition);}//PLUGIN_DEFINITION传入四个参数PLUGIN_DEFINITION(FileSource,LicenseType::APACHE_V2,FileSourceRegister,[]{});

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

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

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

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

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

(2)功能实现

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


// 定义FileSourcePlugin类继承SourcePlugin类class FileSourcePlugin : public SourcePlugin {// 实现SetSource接口, 设置要打开的文件路径Status SetSource(std::shared_ptr source) {return OpenFile(source->GetSourceUri());}// 实现Read接口,它会读取数据用于后续处理Status Read(std::shared_ptr& buffer, size_t expectedLen){std::fread(bufData->GetWritableAddr(expectedLen), sizeof(char), expectedLen, fp_);return Status::OK;}}

FileSource插件的完整代码可参考:

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 设备增强更多功能,敬请期待!

本期关于 HiStreamer 的介绍就到这里了。

更多HiStreamer信息,请参考:

https://gitee.com/openharmony/multimedia_histreamerhttps://gitee.com/openharmony/multimedia_histreamerhttps://gitee.com/openharmony/multimedia_histreamer

审核编辑 :李倩


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

    关注

    4

    文章

    606

    浏览量

    31474
  • OpenHarmony
    +关注

    关注

    33

    文章

    3971

    浏览量

    21341

原文标题:OpenHarmony 3.1 Release版本关键特性解析——OpenHarmony新音视频引擎——HiStreamer

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MAX4079:完整的音视频后端解决方案

    解决方案。Maxim 公司的 MAX4079 芯片就是这样一款优秀的产品,它为音视频处理提供完整的解决方案。本文将详细介绍 MAX4079 的特点、应用、电气特性等方面的内容,希望能为电子工程师在设计相关产品时提供参考。 文件
    的头像 发表于 04-03 12:50 190次阅读

    车载音视频系统环境试验方法全解析:从高温到EMC测试

    车载音视频系统环境试验是指通过模拟车辆在实际使用过程中可能遇到的各种极端环境条件(如温度、湿度、振动、电磁干扰等),对车载信息娱乐系统(IVI)、显示屏、音响、摄像头等音视频设备进行可靠性、安全性
    的头像 发表于 03-25 16:49 381次阅读
    车载<b class='flag-5'>音视频</b>系统环境试验方法全解析:从高温到EMC测试

    从 “卡脖子” 到 “自主可控”,音视频分布式系统国产化实践之路

    在当前全球音视频芯片市场格局中,国外企业长期占据主导地位,核心技术与核心器件的垄断的局面,曾是国内音视频行业发展的重要制约因素。近年来,随着国际形势的深刻变化,国外对我国芯片行业的技术封锁与市场打压
    的头像 发表于 03-02 11:18 332次阅读
    从 “卡脖子” 到 “自主可控”,<b class='flag-5'>音视频</b>分布式系统国产化实践之路

    高清混合转换器:模块化技术重塑音视频信号转换行业格局

    近日,一款全新的高清混合转换器在成都某产品发布中心正式亮相。作为国内首采用模块化、插卡式设计的高清数模混合转换器,该产品的推出在音视频行业引发广泛关注,其创新设计打破了传统信号转换器的固有模式,为
    的头像 发表于 02-11 11:09 406次阅读
    高清混合转换器:模块化技术重塑<b class='flag-5'>音视频</b>信号转换行业格局

    洲明科技荣获2025年度音视频行业品牌评选九项大奖

    2025年12月20日,由DAV数字音视工程网与《数字音视工程》杂志联合主办的第17届音视频行业品牌评选结果正式揭晓。
    的头像 发表于 12-28 11:45 792次阅读

    打破国外垄断!自主分布式音视频方案筑牢行业安全根基

    了全系列国产化的替代升级,为国内音视频行业的安全、快速发展提供强大的支持。 分布式可视化综合管理系统是种由多个拥有独立运算能力的节点组成的去中心化音视频可视化综合管理系统,具有高可
    的头像 发表于 12-19 11:28 466次阅读
    打破国外垄断!自主分布式<b class='flag-5'>音视频</b>方案筑牢行业安全根基

    PXIe板卡科普:解锁专业音视频处理的核心力量

    、KS-PXIe638:8通道音视频采集的“数据捕捉能手” 在航空航天测控、工业自动化等对数据采集精度要求极高的领域,一款稳定高效的音视频采集板卡至关重要,KS-PXIe638型8通
    的头像 发表于 12-04 17:04 999次阅读
    三<b class='flag-5'>款</b>PXIe板卡科普:解锁专业<b class='flag-5'>音视频</b>处理的核心力量

    音视频编解码封装解封装部件介绍

    是否有探索开源鸿蒙音视频编解码技术的欲望?是否对开源鸿蒙音视频编解码格式支持有诉求?别急——今天这份开源鸿蒙AVCodec Kit介绍文章,就是解答疑惑的指南!参考这份指南,可以使用开源鸿蒙的音视频编解码能力,进行应用开发;也可
    的头像 发表于 10-31 09:15 642次阅读
    <b class='flag-5'>音视频</b>编解码封装解封装部件介绍

    从 “单控制” 到 “智能可视”:分布式系统与传统音视频控制系统的关键区别

    和通信。而传统的音视频控制系统通常采用集中式架构,将所有的音视频处理、数据通信等功能集中在台服务器上进行处理。 2.灵活性:分布式可视化控制系统由于采用了分布式架构,可以更加灵活地适应不同的场景需求,可以随时增
    的头像 发表于 10-21 10:52 523次阅读

    音视频开发全栈解析

    Media Kit 让开发者可以调用系统的音视频能力,涵盖播放、录制、录屏、元数据提取与转码六大核心功能模块,支撑系统应用与第三方应用在视频播放、内容创作、教学录屏、直播互动等典型场景下的音视频处理需求。
    的头像 发表于 09-18 14:42 1027次阅读
    <b class='flag-5'>音视频</b>开发全栈解析

    千视电子受邀亮相2025音视频产业链研讨会,引领全链路音视频IP化新趋势

    2025年8月22日,由中国电子音响行业协会和湖南省工业和信息化厅联合主办的“2025音视频产业链发展研讨暨对接会”在长沙举行。活动汇聚音视频产业链上下游企业,以及长沙市相关政府领导与行业
    的头像 发表于 08-27 11:33 1521次阅读
    千视电子受邀亮相2025<b class='flag-5'>音视频</b>产业链研讨会,引领全链路<b class='flag-5'>音视频</b>IP化新趋势

    雷曼光电COB超高清显示屏落地马栏山音视频实验室

    雷曼光电凭借在Micro LED领域的深厚技术积累和雷曼COB超高清显示产品的卓越性能,为湖南长沙马栏山音视频实验室打造核心显示方案。
    的头像 发表于 07-09 17:05 1288次阅读

    泰芯半导体推出星闪音视频无线SOC芯片TXW828

    在短距离无线通信技术加速迭代的浪潮中,珠海泰芯半导体有限公司全球首先发布支持星闪(NearLink)标准的音视频无线SOC芯片——TXW828。这款集WiFi/蓝牙BLE/星闪三模融合音视频无线芯片
    的头像 发表于 06-20 15:51 3030次阅读

    中国音视频产业迈向高质量发展

    随着超高清先锋计划的逐步推进,截至2024年底,中国音视频产业规模超5万亿,包括个人消费电子、家庭影音娱乐、行业多媒体应用及车载视听产业和相关衍生应用等行业企业超过百万家,音视频产业已经成为国家数字经济发展的重要支柱。
    的头像 发表于 04-24 11:10 1408次阅读

    音视频体化解决方案

    随着数字化转型加速,音视频技术在各行业深度应用,传统音视频分散式管理系统面临多源异构设备接入困难、数据孤岛林立、运维复杂、协作效率低下等挑战,各行业对信息技术的需求逐渐从单化向集成化、系统化转变
    的头像 发表于 04-24 09:14 1325次阅读