在了解webrtc之前,这章,我们先了解下音视频实时通信的本质,了解问题的范围背景,才能更好的学习好的解决方案。
举个例子,比如周杰伦开了线下演唱会,同时也开通了线上直播,如果票价相同,条件允许,相信大部分人都会选择线下去听演唱会,因为感觉不一样。
那么问题就来了,到底是哪里感觉不一样呢?
- 实时性不够,数据在网络波动的传输下,多多少少都会有一定的延迟或者卡顿,而这种体验对我们造成了很大影响
- 业务数据有损失,声音图像经过设备的采集压缩解码会有所损失,和人本身看到的可能也是不一样的。
所以本质上来说,音视频实时通信的本质就是尽可能的还原逼近现实中的效果。
音视频质量指标
通信延迟
在实时通信的系统中,延迟作为了一个非常重要的质量指标,因为延迟直接影响了体验感,试想着你和别人在视频的时候,你说一句话,别人在1秒之后,才接受到你的消息,那么无疑,这种体验是非常痛苦的。
在端到端之间,引起延迟的因素有非常多,比如,音视频的采集信息,编解码时间,网络传输时间,缓冲区的缓冲时间,音视频的渲染时间等等,在这之中,往往,动态变化的就是网络的传输时间,受整个网络的影响非常大,而我们对网络却无可奈何,其他因素导致的延迟时间基本都是固定的。
服务质量指标
由于音频本身数据量非常小,对网络的影响不大,这里主要介绍视频的服务质量指标,先了解几个基本概念
- 分辨率,指图像占用屏幕上像素的多少,注意,这个分辨率和屏幕的物理尺寸并没有任何关系,图像的像素密度越高,图像的分辨率也就越高,比如我们常见的720P,1080P,都是指的分辨率
- 帧率,指的是视频每秒播放帧的数量,播放的帧数越多,视频越流畅,一般电影的帧率都在24帧以上,高清视频在60帧以上
- 码率,指的是单位时间内数据的流通量,原则上,分辨率越大,那么码率肯定就越大,相同的分辨率下,码率越大,画面质量就越好,当然,到达一定上限后,再提高码率也没有意义,还会占用更大的带宽
然后了解上面,你会发现延迟和码率又是冲突的,想要降低传输的延迟,那么就必须尽量减少传输的数据量,那么码率就会降低,除非用户网络都是有足够的带宽和足够好的网络质量,但明显是不现实的,往往一个产品的好坏,是由最差环境的表现决定的。
优化点
正如上述所说,音视频实时通信的本质就是尽可能的还原逼近现实中的效果,所以需要选择正确的策略以及取舍,尽可能的优化服务质量
优化网络连接
由于网络链路的复杂性,各个运营商的多样性,所以网络波动在所难免,如何优化网络的连接链路
客户端,在webrtc中,内置了选路方案,它可以按优先级来选择最优质的网络连接线路
服务端,根据用户接入的运营商和区域,分配更合适的机房网络,提供更合理的路由调度策略
减少数据量
- 采用更好的压缩算法,我们都知道网络传输的数据,都是编码之后的数据,如果编码算法够好,压缩率比较高,那么无疑能够减少数据量,近几年推出的H265、AVI编码器比目前主流的H264,提高了25%,40%的压缩率,但是目前离商用还是有一定的距离。
- Simulcate技术,基本原理是,编码出多种不同分辨率的多路流,然后根据用户不同的带宽,选择其中一种最合适的码率下发给用户,但是唯一的缺陷在于,需要上行用户配置很好的带宽。
- 动态码率,顾名思义就是动态的调整输出的码率,根据链路的可用性,比如丢包,延迟等,不断的增加或者减少输出的码率,最终达到一个合适用户当前带宽的码率。
- 丢帧或者减少业务,比如实时视频的时候,带宽严重不足的时候,可以切换到语音通信。
适当增加时延
音视频实时性要求我们只能使用UDP的传输协议,所以会出现丢包或者包乱序的情况,比如一帧数据需要3个rtp包(序号1、2、3),可能是1、3rtp包先到了,那么在网络延迟的允许下,可以适当先缓存1、3 rtp包,如果在一定时间内2 rtp包到达了,那么我们仍然认为这个帧是有效的,但是要控制好这个延迟的时间,小幅度额延迟也是可以提升音视频的直连且不影响实时通信的效果的。
提高网络质量指标
- 丢包,小于10%的丢包网络,rtc认为是正常的网络
- 延迟,如果两端之间数据的传输延迟持续增大,说明网络线路可能发生了阻塞
- 抖动,影响较少,有一定的恢复手段,通过缓冲区缓存先到的rtp包
- fec前向纠错,附加一定带宽的代价,恢复少量丢包下的机制情景。
- 拥塞控制,通过算法计算带宽的大小,达到动态调整码率的情况
有了这篇的基础知识后,后面再根据这些内容,学习webrtc的内容。