2020中国系统架构师大会活动回顾:ZEGO实时音视频服务架构实践

Wesley13
• 阅读 702

10月24日,即构科技后台架构负责人&高级技术专家祝永坚(jack),受邀参加2020中国系统架构师大会,在音视频架构与算法专场进行了主题为《ZEGO实时音视频服务架构实践》的技术分享。

以下为演讲内容的节选:

作为一家专业的音视频云服务商,即构服务了泛娱乐、在线教育、金融、产业互联网、IoT等行业的多家头部公司,例如映客、花椒、微博、好未来等。今年上半年受疫情影响,即构所服务的多家教育、泛娱乐客户都出现了流量暴增的现象。而即构提供的稳定后台服务,保障了客户线上业务0故障运营,这离不开我们成熟稳定、可用性高、能自动扩容的流媒体服务架构。

下面我从ZEGO流媒体服务简介、流媒体服务架构、调度逻辑设计和运营监控四部分进行分享:

一、ZEGO流媒体服务介绍

以这张图为例,我们来看ZEGO流媒体服务的全貌:

2020中国系统架构师大会活动回顾:ZEGO实时音视频服务架构实践

假设图中有三位主播A,B,C和观众,主播A,B,C要进行连麦互动,他们分别通过浏览器、原生App和微信/QQ小程序来推流。由于主播使用了不同的终端形式来进行推流,那么底层使用的音视频协议也是不同的,分别对应着WebRTC,AVERTP(ZEGO的私有音视频协议),RTMP。主播之间连麦互动需要互相拉流,为了获得良好的互动效果,需要很低的端到端拉流延迟(<400ms)。因此,主播们可以到即构全球实时网络来进行拉流,支持Web终端,和原生App拉流,国内的实际环境端到端延迟可以做到150-400ms。

而观众,因为量比较大,需要考虑成本,同时他不需要互动,可以接受较高的延迟。因此可以考虑从即构全球实时网络转推一路RTMP协议的码流到第三方CDN,观众再从CDN去拉流。

当然,如果观众也要很低的延迟,那么也可以从我们的实时网络拉流。此外,一些原来使用RTMP的客户,还可以通过第三方应用通过OBS来推流,很轻易的迁移到即构全球实时网络,用户就可以实现在全球区域范围内进行低延迟的音视频互动。

介绍完主要流媒体服务的全流程后,我们来看流媒体服务包含的具体职责:

调度:在用户推拉流前,需要发起调度请求,获得一个资源后才能够发起实际的码流推拉。用户体验的好坏,跟调度策略有很大关系。

实际推拉流:我们适配了RTMP,WebRTC,AVERTP等多种协议的推拉流标准,提供了更优的流控等算法。

转推CDN:即构全球实时网络和第三方的CDN需要进行协作来满足客户的多样化场景需求。

转码:RTMP使用的AAC音频编码,WebRTC使用的Opus音频编码,这两种格式互通,需要对音频进行转码。

转协议:我们RTMP和WebRTC是以网关的形式存在的,中间的网络传输都是以我们的AVERTP协议来进行。

目前我们支持H264,H265,VP8 3种格式的视频编码转码;AAC, Opus,SILK 3种格式的音频转码;RTMP、WebRTC、AVERTP3种协议格式的转协议。

混流:当出现多个主播连麦互动时,观众如果分别去拉主播的流,对带宽成本和用户的设备都有很高的要求。我们会让服务器混合成一条流,观众只需要拉混合后的流即可。

流管理:推拉流鉴权,禁推管理,我们提供了业务运营必需的多种流管理功能。

即构实时音视频服务的优势体现在4个方面:

第一,多云商架构设计

我们设计之初就确定了支持多云商的架构设计。不同云商有着不同的优势,他的数据中心和网络资源天然的存在着差异性,a云商在印度南部覆盖质量好,b云商在印度北部覆盖质量好。那么我们就都用起来,让a云商覆盖印度南部,b云商覆盖印度北部,从而让整体获得更好的接入质量。

第二,高可用设计保障质量

我们架构设计上加进了许多高可用的方案,来保障稳定的服务质量,后面会展开。

第三,弱网下抗丢包能力强

我们自研的音视频引擎,在弱网下的表现更优异,能实现“上/下行70%丢包下,保持10-15帧视频流畅通话;上/下行80%丢包下,保持音频流畅通话”。

第四,低延迟大规模分发

利用ZEGO自研引擎,我们做了低延迟大规模分发的流媒体服务架构设计,能极大的提高后台并发能力。

(未完待续……)

鉴于分享内容较丰富,更多ZEGO实时音视频服务架构实践中的“流媒体服务架构设计、调度逻辑设计以及运营监控”等内容,可以扫描下方二维码获取演讲资料包,包含演讲文字稿、演讲PPT以及即构全球主要国家的端到端延迟实测数据。

2020中国系统架构师大会活动回顾:ZEGO实时音视频服务架构实践

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这