在使用 WebRTC 进行多服务器对话时,原生的 WebRTC 统计信息仅提供第一个跳数(即从客户端到第一个服务器)的延迟数据。这种统计信息无法全面反映实际延迟情况。为了获得更准确的端到端延迟测量,需要考虑以下几个方面:
- 从第一个客户端到第一个服务器的延迟。
- 每个服务器之间的延迟。
- 从最后一个服务器到目标客户端的延迟。
这样可以更全面地了解整个通信链路的延迟情况。
测量端到端延迟要困难得多,因为它不是由 WebRTC 堆栈自动提供的。
要测量整个延迟(包括捕获和渲染端引入的延迟),可以在计算中包含 WebRTC getStats API 提供的一些附加指标,例如:
- jitterBufferDelay:抖动缓冲区的延迟。
- playoutDelay:播放延迟。
- packetSendDelay:数据包发送延迟。
这些指标能够帮助更全面地评估从捕获到最终渲染的整个延迟链路。
有的场景中前置媒体处理部分也会带来额外延迟,比如:
- 美颜、滤镜:采集视频后美化画面,增加特效,需要额外的计算,增加处理时间,常用于直播场景
- 虚拟背景:采集画面后对画面进行虚化背景,常用于视频会议场景
- 合流融屏:将多个采集画面进行拼接,合流为单幅画面,也会一定程度上造成延时
- AI 和 CV 处理:人脸识别、姿态识别、物体识别等计算机视觉算法会显著增加延迟。
- 音频相关:回声消除、噪声抑制等处理也会带来一定的音频延迟
除了上述的延迟外,可能还需要考虑执行捕获和渲染的软件也会带来延迟。
在大多数情况下,测量的是往返时间(RTT),然后将其除以二以作为单向延迟的良好估计。这个方法在实际应用中常用于估算从一个点到另一个点的延迟。
捕获延迟(Capture Delay):
从输入设备(如摄像头或麦克风)捕获数据开始,到数据被传输到应用程序的时间。
编码延迟(Encoding Delay):
数据被编码成压缩格式的时间。这包括视频或音频流的编码过程。
传输延迟(Transmission Delay):
数据从发送端到接收端的传输时间。这包括网络传输时间以及中间服务器的处理时间。
抖动缓冲区延迟(Jitter Buffer Delay):
在接收端,抖动缓冲区用于平滑网络抖动引起的延迟变化,其所引入的延迟时间。
播放延迟(Playout Delay):
从接收端接收到数据到开始播放的时间。这包括接收和解码过程中的延迟。
解码延迟(Decoding Delay):
数据从编码格式解码为可播放格式的时间。
渲染延迟(Rendering Delay):
从解码到数据实际被渲染或显示的时间。这包括屏幕刷新和图像渲染的时间。
往返时间(Round-Trip Time, RTT):
从发送端发送数据到接收端接收,并且从接收端返回到发送端的总时间。通常用于估算单向延迟的一半。
针对这些因素,提出一系列相关优化措施如下:
1. 分布式服务部署#
目标:优化全球服务器布局,减少网络延迟,提高服务可用性和性能
- 就近接入和分发:在全球范围内部署区域服务器,减少跨国连接带来的延迟
- 减少服务间路由跳数
- 选择最佳服务器路径
- 实现负载均衡:合理分配用户请求,避免单点服务器压力过大
2. 网络层面优化#
目标:提高网络传输质量和效率
- 动态监测链路质量
- 识别并规避低质量链路
- 优化接入服务
3. 应用层面优化#
目标:提高应用程序处理效率,减少延迟
3.1 性能优化#
- 减少数据拷贝
- 减少不必要的计算和处理时间
- 使用汇编或多媒体汇编指令提高数据串行并发处理能力
3.2 抖动缓冲区优化#
目标:平衡网络抖动和播放流畅度
- 动态调整抖动缓冲区大小:根据当前网络抖动情况调整,减少网络波动引起的延迟
- 最小化缓冲时间:在保证流畅播放的前提下,尽量缩短抖动缓冲时间
4. 媒体处理优化#
目标:提高媒体处理效率,适应不同网络环境
- 硬件加速:使用 GPU、FPGA 或专用硬件加速器(硬编解码)进行媒体编解码和处理,减少 CPU 负担
- 自适应比特率:根据网络条件动态调整视频质量(分辨率 / 帧率)和比特率
- 智能编码:使用更高效的编码算法(ROI 编码)或编码器,如 AV1、VP9 或 H.265,在保证质量的同时减少数据量
5. 传输优化#
目标:提高数据传输效率和安全性
- SRTP 加密优化:使用更高效的加密算法或优化加密实现,减少加解密引入的延迟
- 减少打包大小:适当减少数据包大小,降低网络传输中的延迟
6. P2P 优化#
目标:减少服务器负担,提高点对点通信效率
- 直连路径:尽量采用 P2P(点对点)连接,避免经过服务器中转
- ICE 候选优选:在 ICE 候选协商中优先选择延迟最低的路径
7. 用户体验优化#
目标:提高用户满意度,减少感知延迟
- 延迟隐藏技术:实施各种延迟隐藏技术,如插值、预测等,改善用户体验
- 优化 UI/UX:设计响应迅速的用户界面,减少感知延迟
- 网络接入:尽量使用有线网络,相对 WIFI 和 4/5G 有更高的稳定性
8. 网络安全优化#
目标:在保证安全的同时最小化性能影响
- 优化防火墙规则:确保安全措施不会过度影响网络性能
- 使用高效的加密算法:选择能够快速加解密的算法,减少安全处理带来的延迟