超低延时直播技术让在线课堂更流畅

2020-04-20
这次新冠肺炎疫情给大家的生活带来了很多改变,也对不少行业的线上化产生了重要影响:学生在家云学习、职场人在家云办公……在这个过程中,直播技术成为大众关注的焦点。

 这次新冠肺炎疫情给大家的生活带来了很多改变,也对不少行业的线上化产生了重要影响:学生在家云学习、职场人在家云办公……在这个过程中,直播技术成为大众关注的焦点。

  教育是此次被直播技术赋能的代表性行业之一。疫情期间,全国各地学校延迟开学,教育部发起了 “停课不停学”的号召,利用网络直播平台实现“老师在网上教、学生在网上学”的居家学习方式。 “网课”一时间成为国民热搜词。各类直播平台也纷纷入场,为学校和教育机构提供直播工具和技术支持。面对激增的在线师生数量和情形各异的网络接入环境,这些直播平台同时也面临着一场技术大考,其中最高频的考点之一就是——卡顿问题。可以说,在线直播教学场景下,卡顿与否就是课堂效果保障的基线。

  本文主要将以疫情期间学校和教培机构使用率最高的一种班型——小班直播课的网络丢包卡顿问题为主题进行详细分析,并就以及如何突破?解决提供相关建议。

  传统直播课技术方案存在天然瓶颈

  传统直播课技术方案使用的是RTMP协议(Real Time Messaging Protocol,实时消息传输协议),老师端通过推流SDK(Software Development Kit,软件开发工具包)推RTMP流到源站。学生端则通过服务器调度系统拿到CDN(Content Delivery Network,内容分发网络)拉流地址,向CDN边缘节点请求流数据。边缘节点通过CDN系统向源站回源拉到老师的RTMP流。整套方案技术成熟、成本低,业界已形成标准化流程。

  但是,传统直播课技术方案存在着先天不足。

  如果推流端网络条件较差,有可能会导致20%的数据丢包,那么整个服务将基本处于不可用的状态,即学生端看到的课堂画面会很模糊,声音断断续续,听不清老师的授课内容。

  由于RTMP协议使用的TCP(Transmission Control Protocol,传输控制协议)是面向连接的可靠传输协议。它通过重传来对抗网络的丢包与抖动,当网络状况不好、延迟较大时,便无法满足直播课实时音视频的场景。例如,假设直播延迟为2s,即当老师提出问题2s后学生才能听见并作答。同样,老师也要再经过2s才能听到学生的回答。即老师每提一个问题,要经过4s才能得到学生的反馈,师生交流效率较低。

  为保证视频流畅性,一般情况下,网络带宽的要求是视频码率的两倍,而在一些高延迟的网络状况下,重传效率低下,带宽利用率较低。

  这些先天不足究其源头,都是底层TCP拥塞控制算法导致的。

  TCP是一种通用的网络传输层协议,并非专门为媒体设计的协议,其设计更多的是讲求通用性。这也导致使用TCP协议来传输媒体数据时,人们无法在协议层做更多优化。因为协议本身的延时、丢包是无法克服的。

  那么,如何才能提升直播课的互动体验?有没有办法在甚至已经有50%丢包的情况下仍保持清晰流畅的直播效果?

  在对比体验了多家主流直播课平台后,可以发现好未来直播云延时较低、音视频流畅清晰。

  因此,本文将以直播云为例解析在线小班课如何优化网络丢包卡顿的问题。

  在进行这一解析时,不得不提到“超低延时直播技术”。

  优势与挑战并存的超低延时直播技术

  针对传统直播课技术方案难以克服的上述问题,行业里做了诸多尝试,超低延时直播就是其中一种。超低延时直播是指延时控制在500毫秒以内,在复杂网络环境高丢包、高抖动情况下仍能保证音视频流畅的直播技术。

  超低延时直播技术在底层使用RTC(Real-Time Clock)技术,现已广泛应用于1v1通话及小组通话场景中。由于公网的环境复杂多变,如何保证高丢包下仍然能够流畅地上课是小班直播课上应用RTC技术的一大难点。

  相对于传统直播课技术方案底层所使用的TCP协议,RTC技术在网络传输层选用UDP(User Datagram Protocol,用户数据报协议)进行数据传输。TCP协议使用流量控制、拥塞控制等算法努力保证数据可靠到达,但延迟会增大很多,而且在丢包率高时仍然保证不了数据能够一定到达,甚至TCP连接都会断掉。UDP协议相对于TCP协议给开发人员提供了更大的灵活性和可控性,但同时也要求开发人员自己处理如网络抖动、乱序、丢包等一系列问题。

  在综合考虑清晰度、流畅性、低延迟三者的基础上,如何进行抗丢包及卡顿优化呢?

  对此,业界一般有两种做法:

  一种是FEC前向纠错,也叫前向纠错码(Forward Error Correction,简称FEC),是一种利用数据传输冗余信息进行错误纠正的技术,其在多媒体传输技术中有着广泛的应用。

  另一种是丢包重传NACK。当数据包在传输过程中发生丢失,接收端会向发送端发送NACK请求发送端重新发送丢失的数据包,从而保证数据是一定可达的。

  以上属于比较标准的做法,但是过多的丢包重传会造成延时拉大,从而影响实时性,而过多的冗余包在一定程度上则会浪费带宽。

  直播云的小班课网络丢包卡顿优化解决方案

  好未来直播云针对不同的网络情况,结合小班直播课音视频的特点,设计了一套较为理想的解决方案:

  1.在原有的RTCP基础上,建立了全新的网络探测机制,能够快速感知网络变化RTT和网络抖动;

  2.通过控制重传请求NACK的数量和时机,实现数据包快速可靠到达的目的。

  基于反馈和预测机制,即使在高丢包的情况下,好未来直播云的延迟仍然可以控制在500毫秒以内。同时,观众对于卡顿的主观感知不仅与当时的网络状况有关,也与选择的音视频编码器有着密不可分的关系。

  在实际应用中,好未来直播云采用了其自研的H264 SVC进行视频编码,在不改变推流端的前提下,根据拉流端的带宽情况动态选择合适的分辨率,从而达到不错的视觉效果。

  视频编码格式的选择与网络抗丢包算法也是紧密联系在一起的。可以说,H264 SVC在实现了空间分层的基础上,也实现了时间上的分层。因此,即使在网络条件极其恶劣时,好未来直播云仍然可以在保证视频流畅的前提下,通过丢掉一部分视频帧来保证视频通话的效果,并在H264 SVC解码器里,实现错误隐藏等机制,从而保证在任何情况下都不花屏的同时提升视频流畅性。

  除音视频编码器外,好未来直播云还利用Video jitter buffer技术消除了剧烈的网络抖动,使视频能平滑播放 。Video jitter buffer需要综合考虑时延、平滑和音视频同步,在三者之间动态找到平衡点,来应对复杂的网络情况。

  正如图片所示,关于网络抖动的数据包是不平滑的,但上网课的学生希望看到的图像是平滑播放、没有卡顿与时延的。因此,在实际应用中,好未来直播云通过对一段时间的数据包到达时间进行统计分析,以动态调整解码视频帧的播放速率以达到平滑播放的效果。

  综上,通过网络卡顿优化及与音视频编码的配合,Video jitter buffer与音频NetEq的动态调整,即使在恶劣的网络条件下,好未来直播云也能够实现很好的直播教学效果。

  通过网络丢包状态下好未来直播云和某主流直播平台测试表现的2组对比视频可以得到直观感受:

  下面是一组测试数据:

  视频流畅性测试

  使用MOS(Mean Opinion Score,平均主观意见分)多人评分方法,依靠人的主观感受进行打分。

  下图是一组上行流畅度测试数据:

  这里仅以上行测试数据做简单对比,可以看到,好未来直播云自研的RTC技术相对其他主流直播平台在单纯丢包、丢包加延迟的组合情况下,都具备明显优势。

  视频清晰度

  使用与视频流畅性测试相同的主观测评方法:

  在相同的网络丢包环境下,好未来直播云RTC技术处于行业领先水平。即使在50%丢包的极端情况下,好未来直播云仍能保证直播平台可用。

  在实际小班课体验中,小班课的延时小于300ms,在网络比较差的情况下不会超过600ms;在逐渐加大丢包的情况下,视频画面依旧清晰,受众主观感觉没有明显变化。

  以上介绍了好未来直播云在小班课中的一些优化实践。那么,能否将小班课的技术应用于传统大班直播课呢?其实,直播云也在做类似的尝试,并且已经开始在线上灰度。

  好未来直播云又是如何将RTC技术应用于大班课的呢?

  直播云的大班课探索

  为了使RTC技术可以应用于大班直播课,好未来直播云在整体结构上借鉴了CDN分发网络设计,将转发服务器设计成多级结构,有效扩展了RTC大班课的承载能力。

  在扩展之前,一节大班课使用RTC直播的有效承载量是30人左右。按照下图的方式进行扩张之后,理论上可以支持10000+人,甚至更多。

  对于众多线下转线上的学校和教培机构而言,这样的技术或许能成为他们开设在线大班课的定心丸。笔者很期待接下来能看到RTC技术给大班直播课带来的新体验。随着5G时代的到来,在线教育也会迎来进一步发展,教育直播技术如何演进也值得大家一道探索。