腾讯云低延时直播系统架构设计与弱网优化实践

“直播带货”多是2020年最具表明性的词汇之一,那么传统电商该如何融合直播系统,直播过程如何保障用户的最佳观看体验?本文由腾讯云资深架构师何书照在LiveVideoStack线上分享中的内容整理而成,详解了大规模、低延时电商直播系统架构设计以及电商直播的难点、技术挑战与突破。web


文 / 何书照浏览器

整理 / LiveVideoStack缓存

直播回放:服务器

http://scrmtech.gensee.com/webcast/site/vod/play-6ced83f94af24094b6d8329948addb09微信


本次主要为你们分享最近腾讯云在低延时电商直播系统架构的设计与弱网优化实践。网络


  • 电商直播的难点、挑战与技术突破架构

  • 大规模、低延时电商直播系统架构设计app

  • 低延时直播系统弱网优化与互动连麦实践异步

 电商直播的难点、挑战与技术突破ide




电商直播主要分为两种:其一,当前直播或短视频公司正在拥抱电商,其面临的挑战并不是直播相关技术,反而是电商系统的设计架构。其二,线下电商类客户正在接触直播,拥抱疫情期间出现的新形势,其面临的挑战是如何将直播引入到电商系统中。


电商直播实际上是“电商+直播”的过程,直播过程是实时的流媒体,该流媒体强烈依赖从主播端到观众端的整条链路,整条链路中任何一个环节出问题,均可能致使用户没法抢购商品、转化率下降。


 大规模、低延时电商直播系统架构设计



标准的电商系统的设计流程有7步:浏览产品 → 拍下订单 → 支付商品 → 查看订单 → 查看物流 → 确认收货 → 退货流程。

 

如上图所示有三个模块:便捷入口和渠道;快捷、交互、专家导购、购物体验;更好服务的支持。我认为直播属于第二模块的直播导购。

 

电商直播最近成为热点,一方面是疫情缘由;另外一方面,之前的页面式或货架式的电商,是客户经过发现需求寻找不一样的产品,再决定是否购买。随着新技术的逐渐引入,这个过程须要更加切合用户需求,而电商直播符合该趋势。趋势在于有一个专业导购,帮你匹配痛点,替代用户进行货比三家等购物时广泛的痛点,也就是将线下在商场中的体验搬到线上。

 

从个人观察来看,电商直播领域刚刚开始,由于目前电商直播的模式刚刚兴起,你们开始探讨其中的一些体验、互动甚至试穿等,将来还有很大的发展空间,电商直播将会是一个比较火热的趋势。



若要在现有的直播技术基础上作好电商直播,首先须要了解业界的直播架构是怎样的。如上图,业界端到端的直播架构主要分为四部分,总体的直播流程是:主播端和源站经过推流SDK或开源工具,经过RTMP协议推流到流媒体处理中心(一个中心节点或中心机房),其中会进行不少处理,后经过CDN进行分发,最后观众端经过SDK或者Web页面的H5观看直播。

 

经过图中的四大接入流程,将直播融入电商,最重要的接入流程是主播端和观众端。主播端须要经过APP进行宏观的定制开发,将之前的电商系统结合到直播系统中,进行界面的互动,而且集成一些SDK等的推流支持。最重要的是观众体验要好,让观众经过直播引发购买欲直至下单。所以,观众端须要将当前电商能力与音视频领域的技术能力良好结合。

 

另外直播后台须要与电商后台互通,作到人、货、主播间的管理良好匹配,当出现大规模秒杀时,能够及时更新数据。


如图是根据近期的客户需求整理的流程以及工做量

 

  • 主播端 的工做量主要在产品和UI侧,须要设计比较好的产品,产生较好的用户体验。剩余的技术工做能够基于原有系统迭代,根据云上的直播SDK接口很容易接入。
  • 服务端 的挑战是研发能力,是在电商能力基础上快速迭代直播CDN能力。因为能力所有云化,所以集成工做很简单,其次须要作的是对房间和用户的管理。腾讯云有不少DSMO可直接使用,集成工做完成后,再与电商系统相结合便可。
  • 用户端 主要将商品相关和UI能力复用。

 

对于产品评估,我的认为方向有两方面:一是产品和UI侧,根据能力设计体验。二是技术调研,即主播端、服务端、用户端平行开发利用云的能力。


 低延时直播系统弱网优化与互动连麦实践


图中架构省略了某些直播过程当中须要关注的、须要处理的点

 

如上图为腾讯云直播架构,主播端经过SDK推流到上行接入点的数据中心,在数据中心进行相关处理后,进行转码,再利用CDN三级回源架构,经过用户被动触发进行拉流。腾讯云的设计宗旨是不作无谓的浪费,只有当观众须要某一条数据流,发起拉流转码时,再转码。



围绕整个腾讯云直播架构进行拆分,上行分为三种方式:


  1. 最经常使用的经过RTMP推流方式推到云端。
  2. 经过RTMP拉流的方式,拥有本身的上行源站。
  3. 经过HLS拉流方式,上行推到腾讯云,腾讯云处理加速以后经过协议分发。


最经常使用的是经过HTTP-FLV协议分发;经过HLS协议分发大多用在Web端或长视频的处理,较少的使用RTMP协议处理。

 

 

主要看下行进行对应协议的选择,若关心延时问题,则正常状况下会选择RTMP上行推流,端到端的延时可控制在2-5秒,下行通常选择HTTP-FLV协议,其时延在2-5秒之间,缺点是Web端的兼容问题稍差。

 

Web端较为经常使用的是HLS协议,基于HTTP切片,集合一段时间的数据进行,其不足是若切片大小不一致会形成总体延时较大,通常在10秒以上。RTP协议是目前的终极优化方案,其延时可达到100毫秒如下,大部分连麦是使用这种方式进行。


腾讯云直播架构中的延时分为三部分


  1. 主播端的采集、预处理、编码、发送以及上行的网络等推流端引入的延时;
  2. 云处理部分产生的延时,包括链路延时、转码引入的延时、不一样的协议引入的延时不一样,映射为上行-转码-下行;
  3. 下行的接收端与网络强相关,映射为接收-解码-后处理-展现,都会产生相应延时。


对以上产生延时的点进行分析,以发现可优化部分。

 


低延时直播主要的优化方向和技术方向:


  1. 上行或者下行通常基于原有的CDN架构进行正常优化;
  2. Quic相较于HTTP/2更好一点,Quic优化的效果很明显;
  3. 使用WebRTC进行优化。

 

将来随着5G甚至6G技术的发展,对于直播方面的优化方向会更多……

 

 

直播主要的质量监控和评测方式有如下6点:卡顿率、时延、开播失败率、首帧时间、视频帧率、视频码率,前四项,就能够反映出本场直播的质量问题。

 

 

在未进行低延时优化以前的CDN上出现卡顿,如图为卡顿的断定路径,首先须要关注出现卡顿的状况,若房间全部用户都出现卡顿仍是部分用户卡顿。

 

所有用户卡顿的状况则须要检查上行过程,上行卡顿会致使整个房间都卡顿,首先进行同频对比,其次确认上行推流的帧率、码率是否正常,检查流畅度,这些经过腾讯云的后台能够获取。

 

部分用户卡顿的状况须要检测下行拉流状况,根据用户检查其回源状况,经过检查拉流节点或者检查用户的卡顿日志。

 

 

对于卡顿的优化,主播推流端须要进行的工做是:


  • 网络诊断:选用质量好的网络
  • 设置合理的参数:编码设置,如帧率设置为15以上。
  • GOP设置为合理的值。大型秀场或电商类直播通常设置为1-2秒。

 

用户端须要进行的工做:


  • 查看CPU使用率,CPU被占用较大,会出现卡顿
  • 使用适合的码率帧率对应使用的网络环境
  • 对于软解码建议开启硬件加速
  • 播放缓冲调整,可将播放端的缓冲加大,当网络延时比较大时,可使用足够的缓存消除卡顿 
  • 网络状况诊断,进行网络状况较差,建议切换等提示
  • 动态调整播放码率:当正常使用HLS拉流,能够与多种码率匹配,使用FLV拉流,腾讯云SDK能够无缝切换码率。

 

以上各类工做状况均可以经过腾讯云的后台进行状态查询。

 

 

对于标准直播的延时,经过CDN的时延优化一样分为两部分:

 

主播推流端:


  • 网络诊断:选用质量好的网络
  • GOP设置为合理的值,若全部GOP值,延时也会缩小相应倍数,但同时会出现卡顿率变大的问题,所以须要设置合理的值。通常推荐为1-2秒左右。
  • 调整buffer,特别在OBS推流时,是自适应buffer,另外SDK的buffer也须要进行适配。
  • 服务器避免转码,选择中等码率直接推流。

 

用户播放端:


  • 缓存DNS解析的IP,或者并行解析DNS
  • 异步鉴权,先播放再鉴权。通常的鉴权服务器是3D设计,先推流,在后台进行鉴权,若鉴权失败断开后续推流便可。
  • 播放缓冲合理设置:缓冲越大时延越长。若使用IGK或其余开源播放器建议设置GB为1秒内,网络的catch按照用户对时延的要求对应设置,通常为1-4秒之间(若想要追求很是低的时延,例如RTMP连麦时延等,设置为1秒之内便可)。
  • 选择性丢帧:丢帧的策略在CDN和播放端都会使用,在CDN侧若发现用户是一个慢速用户,网络情况不好的状况下,CDN就会选择性丢帧,一样播放器也会选择一样策略,以下降延时播放。
  • SDK的快速播放策略:网络良好的状况下,按照1.5倍播放速度进行缓冲,网络情况下降时,再调整为慢播放,平衡选择,以下降延时、减小卡顿。

 

 

若使用腾讯云的SDK推流,上行速率掉底了,可是编码器的音视频码率没变化,这时就会出现卡顿,出现数据的堆积,当数据堆积超出红线以上,就说明会出现卡顿和延时的问题。

 

腾讯云的SDK主要关注3个参数:网络上行速率SPD、音视频编码时的VRA和ARA,正常状况下,VAR+ARA=SPD

 

 

腾讯云SDK的下行回调参数会更加丰富些,针对这些参数的调整能够优化延时和卡顿的问题。

 

腾讯云SDK对低门槛用户提供三种模式:自动模式(根据网络情况自动调整)、极速模式(不引入链路延时,Catch设置为1秒左右)、流畅模式,在电商或秀场类的直播情景一般会选择极速模式。

 


若对延时和卡顿有更高要求,还有两种匹配的优化方案。其一是基于QUIC的方式优化,其二是基于WebRTC进行优化,腾讯云目前已经支持QUIC加速,经过RTMP推流时加标志便可经过QUIC方式推流,这种加速方式通常要基于极速模式,下行能够经过QUIC或WebRTC加速。

 

 

目前主流模式是经过WebRTC进行加速,优势是SDK变更较小。基于标准OBS协议推流,上行处理过程即使每个过程都进行延时的缺省,也会有3-10秒的延时。

 

若利用WebRTC策略,上行经过RTMP标准协议计入成功后,经过WebRTC下行处理,同时优化转码、CDN分发等,经过代理的方式直接通到SDK,当客户端集成SDK或使用Chrome浏览器默认支持,延时能够控制在1秒之内。

 

第二个优化策略是使用TRTC技术,连麦互动时经过WebRTC或RTC进行上行承接,基于UDP加速,经过WebRTC到最近的服务端与经过TRTC的客户端到最近的服务端两种策略的时延都很小,这种策略适用于主播与观众连麦或者多个主播间PK的场景。

 

在TRTC基于UDP模式下进行的数据分析,端到端的延时大概在350毫秒左右,其优化点关注在350毫秒以上的优化。

 

 

对于推流端延时的解决方案,通常在SDK中埋点,推流端总体耗时在100毫秒之内;采集数据耗时通常在30毫秒左右;预处理耗时在30毫秒左右,有特效的耗时高于无特效耗时;编码耗时通常在50毫秒之内,低端机型耗时较高;推流端耗时较大的是jitter buffer。

 

对于网络耗时,经过分析后,使用WebRTC技术能够将整个网络的耗时维持在50毫秒之内。

 

 

对于播放端的耗时通常在100毫秒之内。


  • 播放的解码耗时通常在20毫秒之内,也有5%左右的超过50毫秒;
  • 渲染耗时通常在20毫秒之内,有特效的耗时高于无特效耗时;
  • 在播放端影响较大的是网络波动,引入的耗时是20-200毫秒不等。

 

 

图中表格数据为协议详细对比,网络质量波动时,播放延时不会愈来愈大,网络恢复后延迟能够及时恢复。

 

WebRTC技术的网络控制和播放策略是流畅优先,弱网环境下依然能够保障能播放,不会一直卡住。

 

 

在低延时直播领域,除了传统直播和WebRTC直播两个主要的优化方向以外,还有基于QUIC方式的优化。基于QUIC的模式,大部分应用于CDN下行。

 

在弱网条件下对打开和关闭QUIC两种状况下的卡顿率进行比较,能够看出,打开QUIC比关闭QUIC的卡顿率稍好。现阶段一些大型厂商,也都在进行QUIC相关的优化和测试。

 

 

一样,对打开QUIC和关闭QUIC条件下的时延状况进行对比,网络稳定状态下,打开QUIC时延能够下降100毫秒左右。

本文分享自微信公众号 - LiveVideoStack(livevideostack)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索