ZEGO自研RTC+直播系统架构,如何支撑一场高质量直播
近年来得益于网络基础设施的进步,实时音视频(Real-Time Communication,以下简称 RTC)和直播(采用 CDN 进行内容分发)在各行业迅速落地,在疫情的催化下更是推动传统的教育、会议等场景往线上转移。
RTC 通常采用私有 UDP 协议,端到端延时低同时弱网适应能力强,不过成本高昂。直播 CDN一般基于标准的 TCP 协议,采用多级分发、时延高、抗弱网能力相对较差,但优在在成本低廉。虽然终端网络能力有了长足的进步,但是用户对直播质量的要求也越来越高,支撑一场高质量的直播并不简单。
那么,今天我们来聊一聊 ZEGO 如何优化弱网观看体验,解决内容分发异常等问题,支撑起一场高质量直播。
直播质量的拦路虎
我们先来看一下常见的直播系统架构(如下图),通常是主播通过 TCP 协议推流到 CDN,然后经过 CDN 的流媒体处理系统(比如转码,合流,多码率转换等),再经过 CDN 多级分发最后到观众端。
图1:传统直播系统架构图
显然如果主播数据源异常或者到 CDN 推流点这段链路质量异常,那么整个直播效果都将大打折扣。根据我们线上实际观察,影响这段链路质量的主要因素有:
- 主播侧的源数据异常
- 主播侧网络抖动
- 公网链路抖动
- CDN节点异常(网络抖动或负载过高)
- DNS解析不准确导致主播获取的推流点并不合适主播网络
那么,为什么会出现上述问题呢,简单总结为以下三点:
主播系统设备五花八门,Android 、iOS、Windows 等系统的各个版本齐上阵,加上各个手机厂商的定制版系统,兼容适配各类设备是令开发者非常头痛的问题,一旦有兼容性问题则通常会导致主播侧推流源数据异常甚至无法推流;
主播侧网络和公网链路大概率会抖动或间歇性异常,本地域名解析线路识别也有一定误差,再加上域名劫持等,这类问题通常是开发者或者 PaaS 厂商无法预测和掌控的,我们能做的只有规避或适应这种变化;
CDN 节点故障无法避免,同时厂商也无法保障到每一个主播的接入质量,一旦个别用户出现接入质量问题时,排查定位需要拉起多方人员:用户、开发者、CDN 技术人员,如果用了第三方音视频 PaaS 厂商,则还会需要厂商人员参与,整个流程下来效率低,用户满意度也低。
ZEGO 自研RTC+系统,保障主播推流持续高质量
ZEGO 并没有沿用传统的直播系统架构,而是采用完全自研的 RTC+ 系统。RTC+ 套系统不仅承载 RTC 流量,也能够无缝接入传统直播流量。ZEGO 优化后的系统架构如下图:
图2:ZEGO RTC+ 直播系统架构
依托这套架构,ZEGO 对上述痛点进行各个击破,下面将为您介绍 ZEGO 具体做了什么。
1、音视频算法&传输协议优化主播推流质量
主播推流到 ZEGO RTC 推流节点,节点采用完全自研的音视频引擎,自研引擎拥有业界领先的 3A 算法,具体优势有:
- 优异的回音消除算法在多讲场景下拥有比竞品更优异的双工体验;
- 结合心理学模型的噪音抑制策略,在不损失音质的情况下提高 20dB+ 信噪比;
- 自动音量调节确保在嘈杂环境下用户的音频体验。
同时 ZEGO 摒弃了传统的 TCP 协议,自研的 AVERTP 音视频协议基于私有 UDP 协议,其抗丢包能力更强;在弱网环境中面对网络抖动及丢包时通过抖动缓冲、前向纠错和丢帧补偿,极大提升通话质量,保证 80% 网络丢包下音频可正常连通,70% 网络丢包下视频可正常连通。
同时 ZEGO 流媒体节点支持按流级别进行质量监控,当 CDN 节点或者公网链路异常时,能够自动切换转推节点,无需主播介入。
2、全球智能调度优化主播第一公里接入
主播推流前 ZEGO SDK 会请求调度服务,调度服务实时解析主播地理位置和运营商信息,匹配调度覆盖策略,过滤出负载最优节点列表后返回给主播端。不止于此,针对重点主播,ZEGO 还支持为其配置个性化的调度策略,实现流量的精准调控。网络是时刻变化的,多年来 ZEGO 依托海量音视频数据分析平台 Ocean 并结合 SDK 的网络探测能力,能够实时感知区域网络变化并动态调整节点覆盖策略,保障主播最佳接入质量。
当前 ZEGO 在全球 150+ 地区部署有流媒体节点,覆盖了全球各大主流的运营商和人口密集区。与此同时 ZEGO 还同各大云厂商及主要的传统 IDC 厂商保持紧密合作,确保能够及时上线优质机房。
3、Navigator 智能解析优化转推CDN链路
为了解决多方沟通效率低下和 Local DNS 结果不可控的问题,ZEGO 引入了智能 CDN 域名解析系统 —— Nagivator,系统架构如下:
图3:Navigator 智能化解析架构图
Navigator 相比较于传统 DNS 有如下优势:
- 解析结果可自定义,支持按探测质量设置质量梯度返回,支持优先或禁用节点,确保在异常时能够快速调整;
- 解析策略修改秒级生效,无需等待 DNS 扩散;
- 杜绝了本地域名劫持、运营商线路识别异常等问题。
通过上述的各类优化,整体直播转推异常率从百分之一下降到万分之五,极大的提升了推流质量。
SDK 动态感知为观众带来流畅观看体验
观众端网络情况相较于主播端更加复杂,整体网络质量相对较差,ZEGO 主要从三个方面优化用户体验。
1、引擎动态感知&自动切换
为了适应客户端网络,ZEGO 音视频引擎实时计算拉流质量,可根据质量情况动态切换拉流帧率及码率,并在必要情况下切换拉流节点或者传输协议(支持 TCP、QUIC 及 ZEGO 私有 AVERTP 协议),无需开发者调用接口。
当切换到 ZEGO 私有 AVERTP 协议时,拉流用户可享受到媲美 RTC 的接入质量。对于长距离或者跨国场景的流量回源,ZEGO 构建了 Massive Serial Data Network(海量有序数据网络,简称 MSDN ),保障流量的可靠传输。
2、云控系统精准把控调节范围
通过云控系统,客户可根据地区调整默认拉流协议及切换策略,在为用户提供更为流畅的观看体验的同时实现精准的成本控制(云控系统能力远不止于此,限于篇幅,此处仅提及部分功能,后续将有专题与您分享 ZEGO 云控系统及其能力)。
3、SDK 极致的兼容能力和机型适配
在机型适配方面,ZEGO SDK 团队经过多年打磨,目前完美适配 15000+ 终端设备及外设,兼容 25 种平台,让用户在直播或观看直播时应用不假死不崩溃。
以上就是关于 ZEGO 即构科技如何支撑一场高质量直播的内容分享。
ZEGO 在音视频行业深耕多年,通过自研音视频引擎,结合智能调度系统、Navigator 解析系统、云控系统等业务系统实现了从主播数据采集、推流、内容分发、观众播放的全链路质量优化。后续我们将继续打磨系统细节,提升系统可靠性和服务质量。
如果您对上述内容感兴趣想要深入了解可到 ZEGO官网 体验,我们也将在后续的文章中同大家分享更多 ZEGO 后台技术及解决方案!
ZEGO自研RTC+直播系统架构,如何支撑一场高质量直播的更多相关文章
- 阿里云推出SRT+杜比全景声直播方案,低成本打造高质量直播观感体验
超过200个国家和地区共5144万人观看:浙江卫视.东方卫视55城总收视达2.39,稳居同时段市场第一:优酷直播间63%观看晚会的用户参与了互动:微博68.2亿的主话题阅读量:2019天猫双11狂欢夜 ...
- Android进阶(十一)Android系统架构讲解
如果说一个成功男人的背后会有一个默默支持的女人的话,那么一个优越稳定的平台背后必有一个成熟的系统架构所支撑着.那么,Android的系统架构是怎么样的呢?从下图我们可以从整体上有个大致的了解(图片来源 ...
- 利用ffmpeg一步一步编程实现摄像头采集编码推流直播系统
了解过ffmpeg的人都知道,利用ffmpeg命令即可实现将电脑中摄像头的画面发布出去,例如发布为UDP,RTP,RTMP等,甚至可以发布为HLS,将m3u8文件和视频ts片段保存至Web服务器,普通 ...
- 互联网公司IT系统架构进化之路
一日,与一高手在茶馆聊天.他问道:在鞋厂剑派这两年,可习的什么高深的剑法?我不由一愣,细细想来,这两年每日练习的都是简单的劈砍动作和一些简练的套路.并没有去练什么高深的剑法.不过鞋厂剑派在江湖上也算小 ...
- vivo 全球商城:优惠券系统架构设计与实践
一.业务背景 优惠券是电商常见的营销手段,具有灵活的特点,既可以作为促销活动的载体,也是重要的引流入口.优惠券系统是vivo商城营销模块中一个重要组成部分,早在15年vivo商城还是单体应用时,优惠券 ...
- 直播CDN架构随想
互联网内容载体变迁历程,文字--图片/声音--视频--VR/AR----从直播1.0秀场时代(YY).2.0游戏直播(斗鱼.虎牙.熊猫)到如今全民直播3.0泛生活娱乐时代(映客.花椒),国外直播App ...
- Android之路-------浅淡Android历史、系统架构与开发特色
前言 离上一篇发表的博客差不多有两个星期了吧,相信有些博友差点就对LP失望了,因为上一篇博文中说了,这次不管怎样,LP都会坚持写博客的. 由于工作关系LP才隔了这么久才再次发表博文,这篇博文主要是总结 ...
- 从游击队到正规军:马蜂窝旅游网的IM系统架构演进之路
本文引用自马蜂窝公众号,由马蜂窝技术团队原创分享. 一.引言 今天,越来越多的用户被马蜂窝持续积累的笔记.攻略.嗡嗡等优质的分享内容所吸引,在这里激发了去旅行的热情,同时也拉动了马蜂窝交易的增长.在帮 ...
- 我是如何一步步编码完成万仓网ERP系统的(一)系统架构
https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...
- CC视频CTO栗伟:CDN系统架构及CC视频应用实践
2017 年 11 月9日,CC视频获2.08 亿元C轮融资. EGO 北京分会会员.CC视频CTO栗伟获邀作为 EGO 线上分享第三季嘉宾,与大家交流了CDN系统架构及CC 视频的应用实践. \\ ...
随机推荐
- 浅谈对属性描述符__get__、__set__、__delete__的理解
1.属性描述符的基础介绍 1.1 何为属性描述符? 属性描述符是一种Python语言中的特殊对象,用于定义和控制类属性的行为.属性描述符可以通过定义__get__.__set__.__delete__ ...
- 由 Base64 展开的知识探讨
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值.. 本文作者:霜序(掘金) 前言 在我们的业务应用中越来越多的应用到编 ...
- Python程序笔记20230306
判断闰年 初始版本 year = input('请输入一个年份:') while not year.isdigit(): year = input("抱歉,您的输入有误,请输入一个整数:&q ...
- React redux toolkit: Uncaught Error:[Immer] An immer producer returned a new...
React在写一个购物车的redux toolkit时遇到了问题.核心代码如下: import { createSlice } from "@reduxjs/toolkit"; c ...
- vite项目优化----- 解决终端optimized dependencies changed. reloading问题
写在前面网上都说vite要比webpack快,但个人感受,默认情况下, vite项目的启动确实比webpack快,但如果某个界面是首次进入,且依赖比较多/比较复杂的话,那就会比较慢了. 这篇文章就是用 ...
- 容易忽视的细节:Log4j 配置导致的零点接口严重超时
作者:vivo 互联网服务器团队- Jiang Ye 本文详细的记录了一次0点接口严重超时的问题排查经历.本文以作者自身视角极具代入感的描绘了从问题定位到具体的问题排查过程,并通过根因分析并最终解决问 ...
- Node.js躬行记(27)——接口管理
在页面发生线上问题时,你要做的事情就是去查接口,响应数据是否正确,查接口的方法有两种: 第一种是在浏览器中打开地址,但是你必须得知道详细的 URL,并且有些页面还需要附带参数. 第二种是打开编辑器,启 ...
- 沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟
目录 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置 沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟 CH32V 存储容量命 ...
- C++ | 类继承
1. 概述 C++有3种继承方式:公有继承(public).保护继承(protected).私有继承(private). 一个B类继承于A类,或称从类A派生类B.这样的话,类A称为基类(父类),类B称 ...
- Vue跨域详解
碰到这种问题,其实你的接口已经通了,但是在页面上就是访问不通过. 你可以把API请求地址单独拎出来新开个网站打开看请求是否成功,成功,但是你的项目不通. 有那么几个可能吧: 1.请求头设置错误 hea ...