WebRTC 尽可能低的延迟

WebRTC lowest possible latency

我有一个简单的 UDP 流协议,它获取 RAW H264 视频帧并将它们立即从服务器端发送到客户端。

使用这个协议,我可以接近网络 RTT 延迟(没有数据包重发,我不关心数据包丢失),所以如果我从服务器到客户端有 20 毫秒的延迟,我可以制作一个视频帧从编码器输出到客户端(准备解码)准备就绪……比方说 30 毫秒。

我的问题是:

Is WebRTC (over UDP) capable of going down to this kind of latencies? Not taking into account encoding and decoding times, what is the lowest latency possible I can get with WebRTC for the protocol layer?

我不知道这种延迟是否需要我自己的协议进行更深入的开发,或者我可能会为我的视频服务器开发使用更通用的东西,比如 WebRTC,以便立即得到每个网络浏览器的支持.

WebRTC 使用 RTP 作为底层媒体传输,与普通 UDP 相比,它在有效负载的开头只有少量额外的 header。这意味着它应该与您使用纯 UDP 实现的效果相提并论。 RTP 大量用于延迟关键环境,如实时音频和视频(它是 SIP、H.323、XMPP 中的媒体传输),因此您可以预期延迟足以满足此目的。

WebRTC 可以具有与常规 SIP/RTP 堆栈相同的低延迟。 WebRTC 堆栈供应商尽最大努力减少延迟。

录音和发送没有任何延迟。一旦从记录器设备接收到并使用选定的编解码器压缩,堆栈将立即发送数据包。某些编解码器(和某些编解码器设置)可能会在此处引入一些延迟以启用某些功能,例如 FEC.

关于接收方: 在最佳情况下,堆栈不应延迟数据包的播放,因此它们可以在到达时立即显示。 然而,在次优情况下(网络延迟或数据包丢失),堆栈将引入 jitter buffer。网络质量越低,抖动缓冲长度越大。

因此,要实现最低延迟,您可能必须执行以下操作:

  • 选择处理时间最短的编解码器
  • 删除 FEC 并禁用任何其他可能导致额外延迟的设置
  • 删除抖动缓冲区(大多数 WebRTC 堆栈没有此设置,因此您可能需要自己修改代码,但这是一个简单的修改,因为您只需要停用一部分代码)