12月9日-10日,中国科学院软件研究所、中科软科技联合主办的中国软件技术大会在北京开幕,来自国内各大互联网和IT公司的技术从业者汇集于此,共同讨论交流前沿技术和发展趋势、分享最佳实践和应用经验。
不久前,网易视频云在国内首家推出了多路互动直播服务,收到业内人士的普遍关注。在今年的中国软件技术大会,网易资深音视频工程师朱玲受邀出席,同与会者分享了网易视频云在互动直播场景下的视频核心技术实践。算法
用户须要什么样的互动直播?
据朱玲介绍,经过长期的用户调研和市场研究,网易视频云发现互动直播用户最为关心的有三个问题:
一、低延时。延时最大不超过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%之内,网易视频云依然能提供较为流畅清晰的视频体验。
网络