12月9日-10日,中国科学院软件研究所、中科软科技联合主办的中国软件技术大会在北京开幕,来自国内各大互联网和IT公司的技术从业者聚集于此,共同讨论交流前沿技术和发展趋势、分享最佳实践和应用经验。
不久前,网易视频云在国内首家推出了多路互动直播服务,收到业内人士的广泛关注。在今年的中国软件技术大会,网易资深音视频工程师朱玲受邀出席,同与会者分享了网易视频云在互动直播场景下的视频核心技术实践。
用户需要什么样的互动直播?
据朱玲介绍,通过长期的用户调研和市场研究,网易视频云发现互动直播用户最为关心的有三个问题:
1、低延时。延时最大不超过500ms,当然越小越好;
2,流畅。每秒最少十几帧,24fps~30fps,接近电影、电视的播放速率 ,用户体验佳;
3,清晰。用客观标准衡量的话,当视频编码后与原始视频的峰值信噪比。要高于30db,主观感受清晰。
那么,首先需要解决的就是低延时问题。延时指的是端到端延时,包括发送端、网路传输、接收端播放延时,其中延时占比最大的是传输延时。市场上很多直播服务采用了RTMP/TCP协议,将视频数据流封装成FLV格式进行传输,TCP协议在网络OSI模型中属于传输层协议,通过拥塞控制、流量控制等算法实现可靠链接。
然而TCP协议中通过丢包重传、拥塞避免等算法来做拥塞控制,虽然保障了传输的可靠性,延时也在增大。一些公司通过修改TCP协议栈来解决延时问题,网易视频云在互动直播方面选择了UDP作为传输协议。
朱玲介绍说,UDP协议本身没有QoS,在流畅度方面存在一些问题。网易视频云给出的解决方案是通过RTP/RTCP半传输半应用层协议来实现可靠传输控制方案。一方面,RTP标准协议是为了传输实时多媒体应用而生的,有着丰富的扩展以及补充协议,弥补了UDP协议的不足;另一方面,思科、Google普遍采用这种方案来实现传输流控,可以说这是一种工业界的标准,更适用于第三方标准应用对接。
据朱玲介绍,针对用户的基本需求,为满足和提升用户体验。网易视频云自主研发了一整套的视频流传输架构,视频采集后经过编码,RTP封装,发送RTP以及RTCP的sender report到对端,对端在接收、解码过程中,将流量监控信息实时通过标准RTCP协议反馈给发送端,进行编码以及发送的控制。
视频传输在实践过程中遇到了哪些挑战?
在实际的视频传输过程中,往往还会遇到很多意想不到的问题,比如受限于编码器对不同内容图像的编码效率以及压缩率不同,RTP包的产生并不是均匀的,往往会有burst;在IP网络中,各个分组从发送方到接收方所历经的网络途径可能不同,从而各个分组的传输时延也各不相同,甚至容易发生分组的到达次序发生变化;最终在接收端出现乱序、延时抖动、丢包等,用户端出现卡顿、花屏、无法播放等一系列问题。
朱玲解释说,网易视频云主要从三个方面来解决这些问题,即平滑发送、抗丢包、抗抖动。
首先是平滑发送。在发送端维护一个rtp数据包buffer,一个发送优先级队列,当rtp数据包产生后并不是立刻发送,而是存放到buffer中缓存,并开启一个发送定时器线程,将数据包从数据buffer中取出,存放在优先级队列中,进行发送,我们在发送之前,会进行网络探测,根据探测到的可用带宽,自适应的调节发送速率。
其次解决丢包问题。网络丢包分为两种情况,一种是网络中存在的固有,随机丢包,譬如联路层的传输误码,另一种是网络拥塞丢包。针对这两种不同的丢包,应该采用不同的解决方法,一种是前向纠错更正FEC, 另一种是ARQ自动请求重传。对于互动这种这种延时敏感的应用场景,网易视频云选择FEC作为丢包解决方案。
“为了解决丢包问题,我们的思路是尽力传输的基础上进行拥塞控制,尽量避免发生拥塞丢包,当联路存在不可避免的随机丢包,通过FEC,增强传输的鲁棒性;利用接收端反馈信息,估计当前可用带宽,避免拥塞;编码器在当前估计的可用带宽下,选择合适的编码策略,达到带宽利益最大化传输。”朱玲介绍说。
网易视频云是怎么解决的?
朱玲介绍了网易视频云解决拥塞问题的思路。在接收端根据流量监控,实时反馈当前网络联路状况,反馈给发送端,发送端根据反馈的丢包信息,添加合适的冗余包,并结合接收端发送的带宽估计信息,估计当前的可用带宽,并进行视频编码控制。
除了丢包问题,影响直播体验的另一个常见情况就是延时抖动。所谓抖动,就是每个数据包到达对端的时间延时是动态变化,可能由于路由联路的选择变更,网络拥塞等造成,它的直接后果就是,会导致对端播放的不流畅。为了解决抖动问题,网易视频云在接收和播放中引入了JitterBuffer的策略。
朱玲总结说,实验以及线上用户的统计数据表明,网易视频云的互动直播产品完全满足用户需求,平均延时在网络较好情况下,端到端延时控制在200ms左右,在网络不稳定丢包率在20%以内,网易视频云依然能提供较为流畅清晰的视频体验。