我正在尝试尽可能减少远程机器控制应用程序中Chromium WebRTC视频延迟。由于传输和接收PC直接通过以太网(交叉线缆)连接,我猜测不需要接收缓冲区,因为不应该有延迟、乱序或丢失的数据包。 我已经调整了jitter_buffer_common.h中的kMaxVideoDelayMs值,并在重新构建Chromium后进行了测试。结果各异,包括接收视频时出现不稳定的行为(卡顿),以及使googPlisSent随时间稳步上升。此外,当kMaxVideoDelayMs设置低于某个阈值(大约60ms)时,googJitterBufferMs和googTargetDelayMs会跳动不定。将kMaxVideoDelayMs设置为100ms时似乎一切正常,但我想尽可能减少总延迟。 我想知道是否可以完全禁用或绕过接收抖动缓冲区,因为这似乎可以减少从捕获PC上的视频到在接收PC上显示它之间的总延迟。
你仍然需要一个抖动缓冲区来存储数据包,直到有一个完整的帧(并进行其他相关处理,这些处理都依赖于抖动缓冲区)。音频抖动缓冲区通常可以有效地运行,并控制何时显示音频/视频。这都深入到NetEq中,可能无法禁用。 如果您将音频和视频作为单独的流运行(未同步或没有音频),那么视频应该已经尽可能快地运行,但如果存在延迟,则是由于操作系统调度引起的,同时在DeliverFrame代码中(或者说最终调用DeliverFrame的代码)也可能会存在某种程度的节奏延迟。