友荐云推荐

在国内错综复杂的网络情况下,如何构建一个高并发、稳定、低延时的直播系统?在12月21日,网心科技直播技术负责人李浩做客CSDN网络公开课,为数百名技术人员现场解答关于直播系统搭建方面的一系列问题。

李浩总结,要搭建一个能够为用户稳定提供优秀观看体验的直播系统,一定要注意三大关键指标,即卡顿、延时和首屏打开速度。而针对目前如火如荼的直播市场,李浩认为,无论内容和运营手段如何花样翻新,如果没有核心技术作为保障,不能保证这三大指标的合格,直播平台依然很难取得市场竞争的胜利。

以下为李浩的课程内容整理:

一.不同直播业态对应不同的技术要求

直播平台细分为各种不同的业态。目前主流的几种业态,分别是秀场类、游戏类、生活类这三种直播。此外事件类、互动类、教育类、监控类直播这几种业态也较为常见。

尽管这些业态里基本上都有10亿级独角兽公司产生,但每一种业态对系统的核心要求却是完全不一样的:

  • 秀场和生活类直播:主播和观众网络环境相对更复杂,因此核心体验是流畅度,可以牺牲码率来提高流畅度,自适应码率、帧率等都是常见的优化手段;
  • 游戏类直播:为了保证体验效果,要求的是高清晰度和高流畅度,端到端延时可以做出一些让步来换取压缩率更高的编码参数,容纳更高帧率和清晰度的内容;
  • 事件类直播:核心要求是稳定性,包括高可靠上行;
  • 互动类直播:核心要求则是端到端的延时,为此网络波动时丢弃视频帧等是可以接受的。

因此需要注意不同的业务形态,后端所用的技术是完全不一样的。如互动类的直播的超低延时方案,4K和VR这种对用户带宽满载利用率的直播场景,通用CDN技术可能无法做到覆盖。

尽管如此,李浩还是认为现在搭建一个直播系统要远比之前来的容易,因为大量工作已经被CDN和终端服务商帮忙解决了,需要自己动手的地方少了很多。

二.直播系统的核心业务需求

那么搭建直播系统时,需要重点关注的核心功能都有哪些?李浩对此一一进行了解析。

A.采集和播放
目前视频的采集已经相对容易许多,因为手机功能相对完整,不像PC时代需要面对不同的摄像头驱动,所以需要核心处理的技术点是网络适配。技术人员需要根据自身的网络条件去调整编码参数,以及多协议的拉流、软硬件的解码、多分辨率追帧等基础需求。如果在此基础之上,还能解决好对缓存的管理、数据同步等高端需求的话,那直播的整体播放体验就比较流畅了。

B.分发和媒体处理
分发和媒体处理的工作,现在除了“特别特别大”的平台,一般都直接由CDN服务商来解决了。因为目前CDN服务已比较完善,跟直播匹配的一些功能,如上下线通知、协议转换、弱网传输,以及像转码、水印、增益、截图、录制这样的功能都已提供。

C.功能系统
需要直播平台自身核心打造的,是功能系统。除去账户系统,还有如人气、道具、打赏、支付、抽奖等功能系统都是必备的。特别是弹幕功能,是对直播平台最核心的技术挑战。主要是弹幕的发送量会很大,直播在线人数动辄几十万,弹幕的发送频率又很高,1、2秒就会发一条消息,巨大的广播量对系统压力很大。所以一般直播平台都会采取分区的方式来加以解决,而如何分区,又在什么情况下合并分区,以维持合适的人气,这里面还是有很多逻辑上的问题是要去解决的。

D.运营系统
运营系统也非常核心。视频的黄反审查,聊天内容的审核,还有一键断播、数据统计、质量监控这些都必不可少,因为一要面对内容监管审查的压力,其次是要能监测到全国不同区域的质量效果。

不过李浩指出,即便是把上述功能都实现了,也只能说搭建出一个基本可以跑的一个直播产品而已,需要提升的地方还很多。

三.直播的关键性技术知识

接下来,李浩对直播的一些关键性知识进行了详细的解释:

A.视频帧

视频帧其实就是一个一个的视频单元,视频单元分成三种,分别叫I、P、B帧。I帧可以简单的理解为就是一张图片,体积也会比较大,B帧和P帧它是一个参考帧。对一个直播流来说,最核心的帧是I帧,由I帧引申出来的就叫GOP。通常在直播上看到的延时,其实是内部直播流缓存延时,叫GOP cache。对于一个CDN系统来说,传输延时只是延时的一小部分,还有一部分是产生在用户流里面的GOP cache。所以直播平台如果要降低延时,首先建议调一下上行流的编码参数,调低I帧间隔。

图片描述

B.码率

码率也分三种,CBR、VBR、ABR。CBR是固定码率,可用于保证网络专线带宽是可控的场景。VBR是可变码率,它不好的地方在于,画面变化剧烈,它的码率跳变会特别大。所以在直播的实际应用中,ABR用的最多,即在质量和码率上做一个均分,控制一个平均值。

C.编码、封装、传输

封装的功能相当于一个桶,它可以把不同编码格式的音视频装在一起,好的封装格式是能兼容很多种的音视频的编码格式的。编码的功能是把原始数据压缩的更小,像视频编码这种原始信息量大的,目前的编码方式已经把信息冗余度做的很低,如果出现丢帧,会导致视频的花屏。

李浩提醒直播技术人员,一定要了解这些基础知识,否则你很难理解直播的延迟产生在哪,以及为什么会发生卡顿。

四.直播的系统架构

图片描述

对一个直播平台来说,主播就相当于是一个数据源,各地不同的观众相当于是订阅者,其实就是生产者和订阅者模型。怎么样把这个生产者生产的信息,比较高效的送到订阅者手上,其实就是一个应用层的组播结构,需要做很多应用层层面的一些考量,比如中转跳数、网络距离、中转带宽成本和汇聚效果等。

推流模式就是主播直接把流推到CDN节点,CDN节点经过自己的网页加速,分发到真正观看的用户。直播所有的功能,像转码水印,转存截图、转点播,所有的这种功能,包括数据统计对外提供一些API,都会在CDN里面做。

一家直播厂商可能会选用多家CDN,或者是有自建的CDN。每个CDN最核心的一点,是怎么在国内这种错综复杂这个网络环境内,去组一张分发比较快速、容灾性能比较强,然后相对节省成本的一张虚拟网。

所以在整个CDN里面,最核心的就是传输组网,其次是在于功能系统的健壮。一个CDN、一个直播系统做的好坏,成败其实一部分在于传输的顺畅,另外一部分在于你是否稳健。

五.直播的三大核心指标

虽然直播对技术的要求错综复杂,但李浩还是表示,直播的关键的指标其实只有三个:卡顿、延时、首屏打开速度。做好这三大关键指标,直播的用户体验就有了保证。

A.卡顿

卡顿的解决与延时则在一定程度上是矛盾的。卡顿产生的原因有三种,第一是主播上行卡顿,所有的观众都会卡;第二是CDN内部网络带来的卡顿,例如中转网络产生了波动,节点负载没控制好,或者是一些组网策略出问题,第三就是被调度和终端网络问题,好比DSN错配、或者最后一跳网络抖动。要有监控手动能发现主要问题点针对性处理。

B.延时

除了前面说的视频GOP缓存,其次延迟主要来自累积,除了做跳帧等逻辑以外,还可以通过改变传输协议的方法来提高,对于延时控制要求高的直播业务,如互动类直播,根本不会采用TCP这样的协议来做传输,而会选择UDP协议。因为对于这种直播来说,视频的所有数据都可以放弃,但要优先保证音频的即时性。

C.首屏打开速度

首屏打开则考验的是直播CDN的组网方式、网络覆盖率和传输协议的优化程度。李浩特别提醒说,今年对首屏打开速度的要求越来越高,秒开已经是去年的指标要求,今年要细化到几百毫秒,做不到这个级别就没有竞争优势。在这一点上,选择一个靠谱的CDN就尤为重要了。