深度解读MediaBox SDKs如何实现技术架构升级
本专栏将分享阿里云视频云MediaBox系列技术文章,深度剖析音视频开发利器的技术架构、技术性能、开发能效和最佳实践,一起开启音视频的开发之旅。本文为MediaBox技术架构篇,重点从音视频终端SDK的技术架构、优化设计、架构优势等方面,介绍MediaBox SDKs如何实现技术架构升级。
善师|作者
流媒体时代,越来越多的企业,投入到短视频、直播、音视频通话等相关的业务研发中来,特别是手机移动端,作为用户流量的主要入口,成为愈发激烈的流媒体竞争战场。
在此浪潮下,众多App厂商纷纷涌入音视频赛道,并且往往接入不止一个音视频业务,可能涉及直播、播放器、音视频通话等多项音视频服务。
过去,厂商在接入多个音视频业务时,通常需要接入多个音视频SDK,带来的结果是包体积极速增大,同时接入效率低下,无法做到快速上线,从而导致在竞争中错失先机。
MediaBox音视频终端SDK正是为了解决企业这一痛点而生的。
01 概念说明
MediaBox音视频终端SDK(MediaBox SDKs),以统一的技术底座,形成一系列不同能力的SDK,为客户提供灵活、易用、高效的接入体验。音视频终端SDK,与音视频低代码开发AUI Kits,以及基于行业生态合作构建的音视频场景方案,共同组成了MediaBox音视频终端一体化套件大图。

从业务维度划分,MediaBox SDKs是阿里云视频云基础终端能力的集合,包含了播放器、直播、超低延迟直播、实时音视频通信、短视频创作等音视频服务能力。
从技术能力划分,音视频终端SDK提供音视频采集、前处理、音视频编码、封装/解封装、媒体网络传输、音视频解码、后处理、音视频渲染等各项技术能力。

02 技术架构
为了构建一个高性能、高可用、高灵活性、可插拔、易扩展性的SDK,我们将SDK的媒体引擎分为微内核、媒体组件和端基础能力组件三个部分。
微内核:作为业务SDK的核心和控制中枢,负责串联和管理各个媒体组件,形成业务的pipeline,主要由消息中心、调度中心、链接管理、队列管理、组件管理、插件管理和监控中心几个部分组成。
媒体组件:音视频媒体处理的基本能力单元,由音视频采集、前后处理、音视频编解码、文件封装解封装,媒体网络输出以及媒体渲染等部分组成。
端基础能力:端侧高可用配套基础能力,提供License、配置下发、异常管理、埋点等多种端侧能力。

03 优化设计
通常,音视频端侧SDK没有统一的内核、组件,每个SDK都是独立的业务开发,不存在功能复用,这就无法对组件进行统一迭代优化,而是需要对不同SDK分别进行性能、功能优化,或者进行兼容性适配,从而导致无法快速应用到业务上。
对此,阿里云视频云MediaBox对终端SDK的内核、组件进行优化设计,实现高性能、高稳定、高可用的架构升级:
• 微内核设计,将所有业务基于统一的微内核进行重构;
• 综合所有SDK的组件,统一抽离、沉淀媒体组件,保证所有组件能力一致、行为一致、性能稳定;
• 统一所有端侧基础能力,对SDK业务统一授权,增加端侧排障和异常预警能力,保证高可用。
1、微内核设计
在综合考虑各个SDK原本的引擎层设计之后,我们基于原有的业务模式,设计了一套可用于所有音视频SDK的微内核。
为了实现高性能和高稳定性,确保内核简单好用,且不对业务造成损伤,我们采用的微内核设计由以下几部分组成:
• 消息中心:负责各个业务组件间的消息分发;
• 调度中心:负责各个业务组件运行任务的线程调度;
• 链接管理:负责管理媒体引擎各个业务组件间的链接关系;
• 队列管理:消息队列管理,配合调度中心,管理当前的任务队列;
• 组件管理:负责管理业务的所有组件,负责注册、反注册组件;
• 监控管理:对组件的数据处理进行监控,及时发现消息处理或者数据处理的异常;
• 插件管理:预埋了插件化设计,方便定制插件,扩展能力。
2、组件抽离和复用
我们对视频云终端SDK用到的媒体组件进行组件化管理,统一抽离、复用以及统一优化迭代。各个音视频SDK中的组件分布情况如图所示:

以直播场景和短视频拍摄场景下的业务Pipeline为例,展示各组件的串联效果:
直播场景下的业务Pipeline
短视频拍摄场景下的业务Pipeline
3、组件开发设计
在应用端开发过程中,研发同学往往会将一个功能复杂的库,分割为若干个功能责职单一的小组件,并通过Maven(Android)或者 Cocoapod(iOS)进行组件的管理。然后Gradle 和Xcode 会自动梳理组件间的依赖关系,让业务同学不用关心各个组件,只需关心业务本身即可。

但是,视频云终端SDK,构建的目标产物是SDK,而不是App。因此,我们在面对SDK这种跨多平台终端时,需要对多平台代码进行管理,功能组件代码分布为:C++代码(主要代码)、object-c代码(iOS)、Java代码(Android)以及 WebAssembly。截止到目前为止,还没有一款好的工具,具备管理混合代码能力,满足多个平台的开发需求。
为此,我们参考CPM,Java Maven,Cocoapod以及Npm等包管理方案,为MediaBox终端SDK量身定制了一套具备多平台的组件管理和依赖的解决方案,通过可调试、高效编译、依赖冲突预警等能力,使得组件可以大规模复用,并实现统一版本迭代。

* 针对不同平台的组件做同一的组件化使用管理,后续会有ACPM组件的专项文章介绍,敬请期待。
4、统一基础能力建设
除了媒体处理部分的统一外,基础能力也进行了整合和统一。比如License管理,以前,每个SDK都有自己的License管理,客户使用时,需要在不同的地方开通授权,而我们增加统一授权后,客户只需通过统一的控制台申请授权,并下载对应类型的MediaBox音视频终端SDK即可。
1)统一授权

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

除此之外,我们还增加了线上异常预警、配置下发及埋点能力,针对客户突发异常或者线上兼容性问题实现排障和适配。
04 架构优势
经过音视频终端SDK架构的优化设计后,我们实现了MediaBox一个内核、多个业务引擎,统一的媒体组件和完整的端侧基础能力建设。主要成果如下:
• 高复用率。端侧媒体组件全复用,代码复用率高达80%,整体SDK包大小下降60%;
• 高可靠性。经过几个版本的迭代,MediaBox SDK的线上稳定性提升,SDK崩溃下降至十万之一;
• 高灵活性。MediaBox SDK可以满足客户各种业务的组合能力,比如直播和播放器的组合,直播和实时音视频的组合,更灵活地满足客户的需求;
• 高性能。通过统一的微内核,统一监管性能指标,内存和CPU占用都有所下降。

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

了解更多音视频终端SDK产品信息,欢迎前往官网体验:
深度解读MediaBox SDKs如何实现技术架构升级的更多相关文章
- 如何用区块链技术解决信任问题?Fabric 架构深度解读
阿里妹导读:区块链技术,随着比特币的兴起而为大家所知.但是具体到技术本身,大家相对熟悉的几个词可能是“数据不可篡改”.“公开链”.“分布式数据”.“共识机制”等. 这篇文章将抛砖引玉,通过深度解读Hy ...
- 支持 gRPC 长链接,深度解读 Nacos 2.0 架构设计及新模型
支持 gRPC 长链接,深度解读 Nacos 2.0 架构设计及新模型 原创 杨翊(席翁) 阿里巴巴云原生 2020-12-28
- 深度为君剖析CTO、技术总监、首席架构师的区别
CTO.技术总监.首席架构师的区别 经常有创业公司老板来拜访我,常常会拜托给我一句话:帮我找一个CTO. 我解释的多了,所以想把这个写下来,看看你到底需要的应该是啥. 一.高级程序员 如果你是一个 ...
- 我就是认真:Linux SWAP 深度解读(必须收藏)
我就是认真:Linux SWAP 深度解读(必须收藏) http://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651660097& ...
- SQL Server 2019 深度解读:微软数据平台的野望
本文为笔者在InfoQ首发的原创文章,主要利用周末时间陆续写成,也算近期用心之作.现转载回自己的公众号,请大家多多指教. 11 月 4 日,微软正式发布了其新一代数据库产品 SQL Server 20 ...
- 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)
转自:http://blog.csdn.net/v_july_v/article/details/6704077 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到 ...
- 从Hadoop骨架MapReduce在海量数据处理模式(包括淘宝技术架构)
从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,认为它们非常是神奇.而神奇的东西常能勾 ...
- AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(上篇)
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 张钦坤 腾讯研究院秘书长蔡雄山 腾讯研究院法律研究中心副主任祝林华 腾讯研究院法律研究中心助理研究员曹建峰 腾讯研究院法律研究中心高级研究员 ...
- 001_谈阿里核心业务监控平台SunFire的技术架构
<1>阿里全球运行指挥中心(GOC)的SunFire出品 <2>在2016年双11全球购物狂欢节中,天猫全天交易额1207亿元,前30分钟每秒交易峰值17.5万笔,每秒支付峰值 ...
- 宜人贷PaaS数据服务平台Genie:技术架构及功能
上篇:架构及组件 一.数据平台的发展 1.1 背景介绍 随着数据时代的到来,数据量和数据复杂度的增加推动了数据工程领域的快速发展.为了满足各类数据获取/计算等需求,业内涌现出了诸多解决方案.但大部分方 ...
随机推荐
- mysql高级进阶(存储过程、游标、触发器)
废话不多说,直接进入正题... 一.存储过程 a.概述 存储过程可以看成是对一系列 SQL 操作的批处理: 使用存储过程的好处 代码封装,保证了一定的安全性: 代码复用: 由于是预先编译,因此具有很高 ...
- CF371D Vessels题解
思路: 定义一个权值并查集,权值保存这个集合还可以存下多少水. 如果这个集合可以存放的水已经小于要装入的水,就将这个集合与下一个集合合并. 否则,直接把这个集合可以存放的水减去要装入的水的体积. 代码 ...
- Parallel 与 ConcurrentBag<T> 这对儿黄金搭档
〇.前言 日常开发中经常会遇到数据统计,特别是关于报表的项目.数据处理的效率和准确度当然是首要关注点. 本文主要介绍,如何通过 Parallel 来并行处理数据,并组合 ConcurrentBag&l ...
- Cookie相关基础
1) 创建Cookie对象, public Cookie(java.lang.String name, java.lang.String value) 参数1:表示cookie名称 参数2:表示coo ...
- 使用Locust进行性能测试
当涉及到评估应用程序或服务的性能时,Locust是一个功能强大且易于使用的开源工具.本文将介绍Locust的基本概念和使用方法. 什么是Locust? Locust是一个用于编写.运行和分析负载测试的 ...
- Vue-treeselect 实现下拉树懒加载,末节点不要箭头
项目需要,可选择的下拉树,由于数据过多,显示要有层级感,所以使用了懒加载模式 vue-treeselect官网:https://www.vue-treeselect.cn/ 1.前端代码 1.下载依赖 ...
- MASA Blazor中MSwitch如何实现二次确认
<MSwitch @bind-Value="switch" Readonly OnClick="OnClick"> </MSwitch> ...
- pip安装pyinstaller失败的解决方法
错误情况: 从下面错误来看,是安装build的依赖失败 解决方法: 下载setup.py文件来安装 1.先下载 pyinstaller的安装文件,下载地址:http://www.pyinstaller ...
- 一分钟学一个 Linux 命令 - rm
前言 大家好,我是 god23bin,欢迎回到咱们的<一分钟学一个 Linux 命令>系列,今天我要讲的是一个比较危险的命令,rm 命令,没错,你可以没听过 rm 命令,但是删库跑路你不可 ...
- Health Kit基于数据提供专业方案,改善用户睡眠质量
什么是CBT-I? 中国社科院等机构今年发布的<中国睡眠研究报告2023>内容显示,2022年,受访者的每晚平均睡眠时长为7.40小时,近半数受访者的每晚平均睡眠时长不足8小时(47.55 ...