问题描述
在尝试减少 WebRTC 通信的视频延迟时,我测量了视频捕获和视频显示之间的延迟。
为了防止测量 WebRTC 涉及的延迟,我只使用了 getUserMedia
和显示流的 HTML video
。
我通过每帧显示一个时间戳(使用 requestAnimationFrame
)、用 USB 摄像头记录我的屏幕并截取视频显示和显示的时间戳都可见的屏幕截图来做到这一点。
平均而言,我测得的延迟为 ~150 毫秒。
这一定是高估了(由于 requestAnimationFrame
次调用之间的时间),但是我所做的最小测量是大约 120 毫秒,这仍然很多。
注意:
- 我尝试使用另一个视频播放器(窗口的内置播放器),结果非常接近(平均延迟约 145 毫秒)
- 我尝试了另一种视频设备(我的带镜子的笔记本电脑网络摄像头),我认为结果不太接近但仍然升高(平均延迟约 120 毫秒)
解决方法
一般来说,这只能在浏览器中修复。
requestVideoFrameCallback API 正在收集一些数字,例如 captureTime 和 renderTime。 https://web.dev/requestvideoframecallback-rvfc/ 有很好的描述,https://webrtc.github.io/samples/src/content/peerconnection/per-frame-callback/ 将它们可视化。