固阳音箱协会

百度开放云年薪百万的首席架构师是如何看待直播行业的?

百度云2018-12-08 08:07:11

今年夏天,互联网圈最火的一个词是什么?


直播,直播,还是直播。



百度开放云为全民TV提供直播云服务


从早期的美女秀场直播,到电竞直播,再到今天几乎全民参与的泛娱乐直播,人们猎奇斗艳的精神需求,网络带宽和智能设备的快速普及,资本大鳄和BAT等巨头的竞相投入,让直播以迅雷不及掩耳之势成功跻身移动互联网风口浪尖。


泛娱乐直播被赋予了更多娱乐和社交的属性,只要你有一部能上网的手机,就可以随时随地发起或观看直播,而且今天的直播也不再满足于主播单向传播的模式,互动性和实时性更强,也为技术上带来了新的挑战。


实时互动要求直播内容从主播端到观看端做到超低时延,目前业内最高水平可将时延控制在1-3s。


稳定流畅是评估直播性能的核心技术指标,但多种网络形式及带宽环境(WiFi,2G/3G/4G等),以及不同的直播生产及消费工具的并存,给直播的稳定流畅性带来了诸多挑战。


视频质量和带宽损耗一般成正比,即视频质量越高,带宽损耗越大。如何在最低的带宽损耗下获得最高的视频质量,就成为直播平台和云计算服务商追求的目标。同时,移动端有限的计算资源也给视频压缩的有效性带来一定的考验。


美颜处理已成为全民直播的必备功能。人脸检测、皮肤检测、皮肤光滑等一系列计算复杂的像素处理过程,对实时性也是很大的挑战。


伴随着直播行业的迅猛发展,各大云服务商也纷纷推出了自己的直播云服务,而百度开放云早在去年9月就发布了一站式的视频直播解决方案——音视频直播LSS。


经过近一年的不断完善,LSS已经是泛娱乐直播领域非常成熟的解决方案,我们已为全民TV、ALA直播等大量直播应用提供一站式技术服务。

 



下面是纯技术干货时间。

 

百度开放云为直播行业做了哪些开创性工作?以下就是我们的多媒体技术首席架构师沈慧峰为大家带来的技术分享,主要针对首屏秒开、追赶播放降低时延、提高流畅性、实时转码,希望与业界高手探讨。

 

1.首屏秒开

首屏秒开是指在极短的时间内呈现直播画面,让用户无需等待。在首屏秒开优化方面百度开放云所做的主要工作有:


1) GOP缓存

将当前直播帧所在GOP缓存在CDN节点的服务器上,当用户播放器接入该CDN节点上时,GOP数据被快速发送给播放器,播放器拿到GOP的第一个I帧后就可以独立解码并开始播放。


但是,由于播放器拿到的I帧不是当前最新的视频画面,所以GOP缓存客观上造成了额外的端到端延迟。例如假设GOP长度是5秒,那么如果用户接入CDN时刚好当前视频帧是GOP的最后一帧,GOP缓存可能带来额外5秒的延迟,对于互动体验质量是极大的削弱。对此我们发明了追赶播放专利技术,下文我会专门介绍。 

2) HTTP-FLV播放

FLV的视频格式为:FLV头+ Video/Audio tags,在播放器收到FLV头部数据后,其后续的Video/Audio tag可以边下载边播放,这样的特性也使得FLV格式可以用在视频直播上。


相比于RTMP播放,FLV播放有两大优点:


第一,FLV比RTMP需要更少的启播时间,FLV只需要一次HTTP请求,获得FLV头部数据后即开始下载播放,而RTMP播放要经过3次握手,还有其后connect和createStream等消息的交互后才能开始下载播放;


第二,FLV播放使用80端口,对防火墙更加友好,而RTMP默认使用1935端口,在某些网络里会被防火墙屏蔽;


第三,FLV播放由于使用HTTP链接,可以使用HTTP302调度,使得播放端能被更精确地调度,以保障低延迟与高流畅的需求。

 

2.追赶播放降低时延

前文提到GOP缓存会带来额外的端到端延迟。GOP越短,带来的端到端延迟影响越小。然而,短GOP在同等带宽损耗下却以降低视频质量为代价,因为短GOP意味着更多I帧,由于I帧是自包含帧,没有利用帧间的相关性,所以压缩率相较P帧与B帧差很多。更多的I帧意味着所需带宽更多。


视频场景

GOP长度(单位:秒)


1秒

3秒

游戏视频

34.9  dB

36.5  dB

美女视频

42.6  dB

44.6  dB

电影

44.0dB

44.9dB

 

上表表示在同等带宽损耗下,不同的GOP长度(1秒和3秒)所取得的视频质量。这里视频质量用PSNR(峰值性噪比)来衡量,PSNR越高,视频的质量也越高。一般来说,在PSNR上0.5 dB的增益可以明显从视觉上看到视频质量的提高。从上表可以看到,3秒的GOP长度能比1秒的GOP获得大约从0.9 dB~2.0 dB的PSNR增益,从视觉上意味着获得了明显更好的视频质量。


那么有没有在长GOP下保持低延迟的方法呢?

 

百度开放云发明了追赶播放的专利技术,用来追赶播放当前最新帧之前的GOP缓存帧,以达到最小的端到端延迟。该技术利用RTMP/FLV封装协议及H.264/AVC编码标准,修改当前帧之前的GOP缓存的音视频数据,使得这些缓存数据在到达播放器的时候能快进播放,在时间线上赶上当前最新的直播内容。

 

追赶播放技术不仅用在首屏打开时的快进GOP缓存的数据,还用在RTMP/FLV播放时遇到累积延迟的情况。当CDN节点到用户播放器之间的最后一公里网络受到波动时,音视频帧数据累积在CDN节点上的队列内,当我们的程序探测到视频帧累积时,我们使用追赶播放技术修改队列中的音视频数据,使得当这些数据到达播放器能被快进播放,从而消除累积延迟。

 

3.提高流畅性

对于直播来说,流畅性分为两部分。第一部分为上传流畅性,即主播端实时上传视频到流媒体服务器的流畅性;第二部分为下行流畅性,即从流媒体服务器经过CDN边缘节点到达播放端的流畅性。


在网络上,远距离通讯往往存在在或多或少的丢包问题,对于RTMP所使用的TCP/IP协议来说丢包所带来的影响是很大的,由于TCP/IP协议对网络丢包问题敏感,丢包将严重影响TCP协议发送窗口的变化。甚至在连续丢包重传时,由于重传机制采用指数退避算法,重传间隔时间呈指数上升,传输的数据吞吐量将严重下降。

 

目前市面上的直播解决方案,一般会采用CDN边缘节点来加速下行传输,但在百度开放云LSS解决方案中,我们不仅使用CDN来做下行的加速,同时提供主播端上行内容的加速。主播端通过DNS调度,自动找到离主播网络距离最近,同时处在同一ISP下的CDN节点,来接受主播的推流,再通过我们的流媒体服务器处理及CDN节点分发给观众端。

 

在下行的加速方面,传统的local DNS调度的方式只考虑了用户所设置的DNS的IP地址,这就容易造成调度的不合理。比如,一个电信用户如果设置了教育网的DNS地址,那么这时播放器端会被调度到一个教育网的边缘节点,那么这种跨ISP的传输在丢包率和数据吞吐上就很难保证。我们采用了HTT-FLV的播放方式,使用HTTP 302的调度方式,当CDN节点收到播放端的播放请求,我们的服务会根据播放端实际的IP地址使用302返回码的形式将请求重定向到更合理的CDN边缘节点。

 

4.实时转码

在很多直播场景中,都需要服务器端做实时转码。比如以下两类场景:


1)  为适应不同的播放端能力及播放端网络带宽情况,需要将主播上传的视频流转码成多种码率的视频流;


2)  主播端使用手机推流,由于移动设备有限的计算资源,在上传到服务器后使用服务器强大的多核与集群能力,对视频码流进行二次压缩,以节省带宽和保障下行流畅性。


在服务端转码中,转码算法的优劣直接影响视频质量的高低。但是各种转码工具(B帧数目,参考帧数目,B帧决策策略,去除块效应策略,码率分配策略等)和参数对不同的场景有不同的效果。


比如美女直播与游戏直播就属于两类不同场景内容,应该使用不同的编码工具与码率控制策略。美女直播的内容是通过摄像头拍摄的,摄像头捕捉的时候扮演了一个低通滤波器,其边缘锐度被一定程度上光滑化,所以在转码时使用的去除块效应策略适当加强;相反,由于游戏视频是计算机合成的(synthesis)内容,其边缘往往非常锐化(比如文本内容),那么在转码的时候就应该适当弱化去除块效应滤波,因为去除块效应是个低通滤波器,较大的去除块效应强度会将游戏视频的边缘模糊化。

 

LSS使用根据大量视频数据及应用场景开发出针对不同场景内容采用不同编码策略的方案,取得了不错的视频提升的效果。以下是通过默认编码策略和优化后的编码策略在同一个视频内容上转码效果:


图一:使用默认编码策略(bitrate: 1191kbps,PSNR: 39.1dB) 


图2:使用优化的游戏图像编码策略(bitrate: 1200.7kbps, PSNR:40.5dB) 

从上面两图对比可以看到,优化后的游戏场景编码策略很好的保持了文字及草藻部分的细节;从PSNR的对比来看,在同等码率即同等带宽损耗下,PSNR提高了1.4dB。同等带宽损耗下,百度开放云转码PSNR(峰值信噪比)比同类产品高出1.5~2dB。

 

这意味着,使用百度开放云的LSS产品,相同画质可节省10%~30%流量带宽,对于一个中等规模视频网站来说,一年可节省云支出10-30万。

 



以上就是沈博士满满技术干货的分享,觉得过瘾吗?

 

6月30日,GITC全球互联网技术大会上海站,沈慧峰博士将出席云专场,并以《移动直播——架构、技术与优化》为主题发表演讲,你来不来?

 

百度开放云,懂直播的云计算,关键时刻不会卡。



最后






 

 


Copyright © 固阳音箱协会@2017