首页 > 其他分享 >深度解读MediaBox SDKs如何实现技术架构升级

深度解读MediaBox SDKs如何实现技术架构升级

时间:2023-10-26 18:05:57浏览次数:55  
标签:SDKs 架构 MediaBox 业务 音视频 终端 组件 SDK

本专栏将分享阿里云视频云MediaBox系列技术文章,深度剖析音视频开发利器的技术架构、技术性能、开发能效和最佳实践,一起开启音视频的开发之旅。本文为MediaBox技术架构篇,重点从音视频终端SDK的技术架构、优化设计、架构优势等方面,介绍MediaBox SDKs如何实现技术架构升级。

::: hljs-right

善师|作者

:::

流媒体时代,越来越多的企业,投入到短视频、直播、音视频通话等相关的业务研发中来,特别是手机移动端,作为用户流量的主要入口,成为愈发激烈的流媒体竞争战场。

在此浪潮下,众多App厂商纷纷涌入音视频赛道,并且往往接入不止一个音视频业务,可能涉及直播、播放器、音视频通话等多项音视频服务。

过去,厂商在接入多个音视频业务时,通常需要接入多个音视频SDK,带来的结果是包体积极速增大,同时接入效率低下,无法做到快速上线,从而导致在竞争中错失先机。

MediaBox音视频终端SDK正是为了解决企业这一痛点而生的。

01 概念说明

MediaBox音视频终端SDK(MediaBox SDKs),以统一的技术底座,形成一系列不同能力的SDK,为客户提供灵活、易用、高效的接入体验。音视频终端SDK,与音视频低代码开发AUI Kits,以及基于行业生态合作构建的音视频场景方案,共同组成了MediaBox音视频终端一体化套件大图。

图片 1.png 从业务维度划分,MediaBox SDKs是阿里云视频云基础终端能力的集合,包含了播放器、直播、超低延迟直播、实时音视频通信、短视频创作等音视频服务能力。

从技术能力划分,音视频终端SDK提供音视频采集、前处理、音视频编码、封装/解封装、媒体网络传输、音视频解码、后处理、音视频渲染等各项技术能力。

图片 2.png

02 技术架构

为了构建一个高性能、高可用、高灵活性、可插拔、易扩展性的SDK,我们将SDK的媒体引擎分为微内核、媒体组件和端基础能力组件三个部分。

微内核:作为业务SDK的核心和控制中枢,负责串联和管理各个媒体组件,形成业务的pipeline,主要由消息中心、调度中心、链接管理、队列管理、组件管理、插件管理和监控中心几个部分组成。

媒体组件:音视频媒体处理的基本能力单元,由音视频采集、前后处理、音视频编解码、文件封装解封装,媒体网络输出以及媒体渲染等部分组成。

端基础能力:端侧高可用配套基础能力,提供License、配置下发、异常管理、埋点等多种端侧能力。

图片 3.png

03 优化设计

通常,音视频端侧SDK没有统一的内核、组件,每个SDK都是独立的业务开发,不存在功能复用,这就无法对组件进行统一迭代优化,而是需要对不同SDK分别进行性能、功能优化,或者进行兼容性适配,从而导致无法快速应用到业务上。

对此,阿里云视频云MediaBox对终端SDK的内核、组件进行优化设计,实现高性能、高稳定、高可用的架构升级:

• 微内核设计,将所有业务基于统一的微内核进行重构;

综合所有SDK的组件,统一抽离、沉淀媒体组件,保证所有组件能力一致、行为一致、性能稳定;

统一所有端侧基础能力,对SDK业务统一授权,增加端侧排障和异常预警能力,保证高可用。

1、微内核设计

在综合考虑各个SDK原本的引擎层设计之后,我们基于原有的业务模式,设计了一套可用于所有音视频SDK的微内核。

为了实现高性能和高稳定性,确保内核简单好用,且不对业务造成损伤,我们采用的微内核设计由以下几部分组成:

消息中心:负责各个业务组件间的消息分发;

调度中心:负责各个业务组件运行任务的线程调度;

链接管理:负责管理媒体引擎各个业务组件间的链接关系;

队列管理:消息队列管理,配合调度中心,管理当前的任务队列;

• 组件管理:负责管理业务的所有组件,负责注册、反注册组件;

• 监控管理:对组件的数据处理进行监控,及时发现消息处理或者数据处理的异常;

• 插件管理:预埋了插件化设计,方便定制插件,扩展能力。

2、组件抽离和复用

我们对视频云终端SDK用到的媒体组件进行组件化管理,统一抽离、复用以及统一优化迭代。各个音视频SDK中的组件分布情况如图所示:

图片 4.png 以直播场景和短视频拍摄场景下的业务Pipeline为例,展示各组件的串联效果:

图片 5.png ::: hljs-center

直播场景下的业务Pipeline

:::

图片 6.png ::: hljs-center

短视频拍摄场景下的业务Pipeline

:::

3、组件开发设计

在应用端开发过程中,研发同学往往会将一个功能复杂的库,分割为若干个功能责职单一的小组件,并通过Maven(Android)或者 Cocoapod(iOS)进行组件的管理。然后Gradle 和Xcode 会自动梳理组件间的依赖关系,让业务同学不用关心各个组件,只需关心业务本身即可。

图片 7.png 但是,视频云终端SDK,构建的目标产物是SDK,而不是App。因此,我们在面对SDK这种跨多平台终端时,需要对多平台代码进行管理,功能组件代码分布为:C++代码(主要代码)、object-c代码(iOS)、Java代码(Android)以及 WebAssembly。截止到目前为止,还没有一款好的工具,具备管理混合代码能力,满足多个平台的开发需求。

为此,我们参考CPM,Java Maven,Cocoapod以及Npm等包管理方案,为MediaBox终端SDK量身定制了一套具备多平台的组件管理和依赖的解决方案,通过可调试、高效编译、依赖冲突预警等能力,使得组件可以大规模复用,并实现统一版本迭代。

图片 8.png

  • 针对不同平台的组件做同一的组件化使用管理,后续会有ACPM组件的专项文章介绍,敬请期待。

4、统一基础能力建设

除了媒体处理部分的统一外,基础能力也进行了整合和统一。比如License管理,以前,每个SDK都有自己的License管理,客户使用时,需要在不同的地方开通授权,而我们增加统一授权后,客户只需通过统一的控制台申请授权,并下载对应类型的MediaBox音视频终端SDK即可。

1)统一授权

图片 9.png 2)统一崩溃捕获

通过崩溃捕获的能力,可以捕捉到我们SDK的异常(非我们SDK的不捕获),并第一时间进行分析和修复,打造高稳定性的SDK。

图片 10.png 除此之外,我们还增加了线上异常预警、配置下发及埋点能力,针对客户突发异常或者线上兼容性问题实现排障和适配。

04 架构优势

经过音视频终端SDK架构的优化设计后,我们实现了MediaBox一个内核、多个业务引擎,统一的媒体组件和完整的端侧基础能力建设。主要成果如下:

高复用率。端侧媒体组件全复用,代码复用率高达80%,整体SDK包大小下降60%;

高可靠性。经过几个版本的迭代,MediaBox SDK的线上稳定性提升,SDK崩溃下降至十万之一;

高灵活性。MediaBox SDK可以满足客户各种业务的组合能力,比如直播和播放器的组合,直播和实时音视频的组合,更灵活地满足客户的需求;

高性能。通过统一的微内核,统一监管性能指标,内存和CPU占用都有所下降。

图片 11.png 基于这样的技术架构,MediaBox将分散的各个SDK,组合成全功能统一出包,并最终组建成视频云MediaBox SDKs产品大家族。

MediaBoxSDK卡片.png 了解更多音视频终端SDK产品信息,欢迎前往官网体验:

音视频终端SDK_智能媒体服务 IMS_视频服务_阿里云

标签:SDKs,架构,MediaBox,业务,音视频,终端,组件,SDK
From: https://blog.51cto.com/u_14968479/8042012

相关文章

  • 架构漫谈读后感
    首先,最近在课上老师推荐我们阅读王概凯老师的架构漫谈连载博客,通过详细的阅读,我确实收获颇丰。首先就是对于架构是什么,架构解决的是什么有了一个深入的了解。第一,什么架构呢?王概凯老师认为他没有一个确切的定义,在软件行业,每个人都有自己的理解,所以一百个人心目中就有一百个哈姆雷......
  • 关键数字技术架构2023
     1.关键数字技术分支架构 2.人工智能技术分支架构 3.高端芯片技术分支架构 4.量子信息技术分支架构 5.物联网技术分支架构  6.区块链技术分支架构 7.工业互联网技术分支架构  8.元宇宙技术分支架构 摘自《关键数字技术专利分类体系......
  • Kafka 简介、集群架构、安装部署、基本命令
    一、kafka是什么?在实时计算中,Kafka主要是用来缓存数据,storm可以通过消费kafka中的数据进行实时计算。一套开源的分布式的消息队列系统,由scala写成,支持javaAPI。Kafka读消息采用topic进行归类。二、kafka中有哪两种角色?发送消息:Producer(生产者)接收消息:Consumer(消费者)三......
  • 2.9 深入GPU硬件架构及运行机制
    五、GPU技术要点1.SMID和SIMTSIMD(SingleInstructionMultipleData)是单指令多数据,在GPU的ALU(在Core内)单元内,一条指令可以处理多维向量(一般是4D)的数据。比如,有以下shader指令:float4c=a+b;//a,b都是float4类型对于没有SIMD的处理单元,需要4条指令将4个float数值相加,汇编伪代码......
  • VMware Aria Automation 8.14 发布下载 - 现代基础架构自动化平台
    VMwareAriaAutomation8.14发布下载-现代基础架构自动化平台请访问原文链接:https://sysin.org/blog/vmware-aria-automation/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现代基础架构自动化平台VMwareAriaAutomation(以前称为vRealizeAutomation)借助现......
  • 软考系列(系统架构师)- 2016年系统架构师软考案例分析考点
    试题一软件架构(质量属性、架构风格对比、根据描述填空)试题二系统开发(用例图参与者、用例关系、类图关系)学生、教师、管理员、时间、打印机【问题2】(7分)用例是对系统行为的动态描述,用例获取是需求分析阶段的主要任务之一。请指出在面向对象系统建模中,用例之间的关系有......
  • react native的新架构
    Startingfromversion0.68,ReactNativeprovidestheNewArchitecture,whichoffersdevelopersnewcapabilitiesforbuildinghighlyperformantandresponsiveapps. (https://reactnative.dev/docs/the-new-architecture/landing-page) PillarsoftheNewArch......
  • Unity架构师必备开源框架:3天打造大厂商用框架
    现在Unity的相关技术已经都非常常熟了,如果你的技术能力与阅历够,搭建一个商用的游戏框架,你只需要3天的时间。今天给大家分享一个Unity老鸟3天能搭建一个自己的商用框架的几个必备的开源库,方便大家学习与使用,同时学习这些有前途的开源库也能让你在公司里面游刃有余。 对啦!这里有个......
  • Unity基于状态机的架构与设计
    我们做游戏的时候经常会有流程控制,流程控制的方法有很多,行为决策树,状态机等。本质差别都不大,就是把每一段执行逻辑做成一个一个的节点,根据条件执行某个节点,切换到某个节点。今天给大家分享一下基于状态机来做游戏流程的控制。 1一个简单的状态机案例 我们先来拆解一个使用......
  • JAVA架构师具备的技术和能力
    JAVA架构师是一种高级职位,需要具备深厚的技术实力和广泛的能力。以下是JAVA架构师常见的技术和能力要求:1、扎实的编程基础:JAVA架构师需要具备良好的编程能力和深入理解JAVA语言特性和编程范式,熟悉面向对象编程和设计模式。2、深入理解框架和技术栈:JAVA架构师需要熟练掌握常用的JAVA......