# WebTransport

# 简介

WebTransport 是一个使用 HTTP/3 协议作为双向传输的 Web API。它适用于 Web 客户端与 HTTP/3 服务器之间的双向通信。它既支持通过数据报 API 以不可靠的方式发送数据,也支持通过数据流 API 可靠地发送数据。即,WebTransport 是基于 HTTP3 的应用层传输协议,HTTP3 的底层又基于 QUIC, QUIC 协议是基于 UDP 协议实现的一套传输协议,支持可靠与非可靠传输两种形式。

数据报非常适合用于发送和接收不需要强有力传输保证的数据。单个数据数据包的大小受到底层连接的最大传输单元 (MTU) 的限制,不一定成功传输,如果传输,它们可能会以任意顺序到达。这些特性使数据报 API 非常适合低延迟、尽力而为的数据传输。您可以将数据报视为用户数据报协议 (UDP) 消息,但会进行加密和拥塞。

数据流提供可靠、有序的数据传输。它们非常适合您需要发送或接收一个或多个有序数据流的场景。使用多个 WebTransport 流类似于建立多个 TCP 连接,但由于 HTTP/3 在后台使用轻量级 QUIC 协议,因此可以打开和关闭它们,而不会产生太多开销。

WebTransport 接口提供的功能使用户代理能够连接到 HTTP/3 服务器、在一个或两个方向上启动可靠和不可靠的传输,以及在不再需要时关闭连接。

Http 与 QUIC 协议

WebTransport API (opens new window)

# 使用场景

  • 云游戏:在云游戏中,客户端发送的指令需要迅速传达到基于云的服务器,以确保游戏的流畅性和响应性。这些指令对时间属性非常敏感,任何延迟都会影响游戏体验。WebTransport 基于QUIC,可以实现 0-RTT 握手,大大减少了连接建立的延迟,支持数据报(Datagrams)模式,适合传输小而频繁的游戏指令,当玩家在网络环境中切换时(如从Wi-Fi切换到蜂窝数据),连接可以无缝迁移,确保游戏不中断。
  • 低延迟实时直播:Web 端直播通常基于 HTTP-FLV/HLS 等协议,但这些协议在高清、高帧率、高动态范围、低延迟、宽色域和DRM(数字版权管理)等方面存在不足。WebTransport 的低延迟特性可以显著减少视频流的传输延迟,提升观众体验。支持高效的字节流(Byte Streams)模式,适合传输高质量的视频数据。通过加密传输,可以有效保护内容的版权。可以同时传输多个视频流,提高传输效率。
  • 远程桌面管理:企业用户需要通过远程桌面管理物联网设备和进行数据分析传输。这些设备通常功耗敏感,需要高效地向云端发送少量数据。WebTransport 的高效传输机制可以减少设备的功耗。支持数据报模式,适合传输小而频繁的传感器数据。支持设备在网络环境变化时保持连接,确保数据传输的连续性。
  • 自定义 RTC 传输:WebRTC 是浏览器的标准 RTC 协议,但在某些场景下,开发者需要对 RTC 传输进行定制化控制,而 WebRTC 的内部工作机制难以修改。WebTransport 提供了更灵活的传输机制,允许开发者自定义数据传输逻辑。支持低延迟的数据传输,适合实时通信场景。可以同时传输多个数据流,提高传输效率。WebTransport + WebCodecs + WebAssembly 可以让我们自定义一套 RTC 引擎,WebTransport 的传输能力,WebCodecs 的编解码能力,WebAssembly 的高效执行能力,对于有深厚积累的音视频团队,完全可以进行更高效的定制化开发,在 Web 端定义自己的 RTC 协议栈。
  • WebOBS:OBS 是常用的直播推流与视频录制工具,随着 WebCodecs 的引入,Web 端具备了直接编码的能力。如果有一个强大的 Web 端推流协议,Web 端 OBS 产品将更加成熟。WebTransport 的字节流模式适合传输高质量的视频数据,支持高清、高帧率的视频推流。

WebTransport 对于 Web 应用的意义并不止于一个更好的传输协议,它更多的还是带来了一个更加丰富的技术栈,能够根据实际场景,结合 WebCodecs、WebAssembly 和 WebNN 等能力实现更好的应用体验。

# WebRTC 对比

WebTransport 相对于 WebRTC 相比有以下优势:

  1. 多线程能力。WebTransport 可以发挥页面多线程的优势,使用 WebRTC 协议,大量的逻辑只能放在主线程执行,而 WebTransport 是可以在 WebWorker 中使用的,可以将整个音视频的处理流程放在 WebWorker 中,降低对主线程的占用,提升页面流畅度。同时使用多线程能够提升应用的扩展性,在面对更多的音视频任务时可以用线程来进行抽象和隔离。

webTransport1

  1. 快速握手、低延时及连接迁移。从传输协议的特性上来说,它的建联速度更快,首次建联只需要 1 个 RTT,相比之下,TCP 则需要 2~3 个 RTT。针对已经建立过的连接,超时时间内再次建联可以实现 0RTT。在网络拥塞的情况下,减 少 RTT 次数对速度的优化是非常明显的。可以到几十 ms。最后一个特性是连接迁移,在直播过程中如果 WIFI 网络不好。切到手机热点也可以实现 0RTT,相比之下,TCP、RTC 都需要重新建立连接,恢复的速度会慢很多。

WebTransport 优化的直播推流:基于单向流的稳定传输,从传输格式上对标 RTMP,这样直播 CDN 的支持成本会相对较小,比较好复用目前的 RTMP 收流逻辑。由于这个技术栈较新也需要解决过程中的一些问题:虽然 W3C 定义了 AAC 的编码能力,但是 Chrome 没有提供 AAC 编码的实现,可以将 libFaaC 编译成 wasm 库来实现,另外浏览器没有针对 flv 容器的封装,需要额外支持该部分能力。

webTransport2

在直播等推流技术下,WebTransport 能够比 WebRTC 推流获得更好的效果:

  • 网络传输。WebRTC 是面向实时通信的传输协议,对网络延时的变化敏感。使用 WebRTC 协议推流时,它受到网络抖动的影响较大,当网络延时的抖动发生时,RTC 的带宽估计模块会认为当前网络处于拥塞状态,需要降低发送码率以避免拥塞,码率的降低对视频画质的影响是非常大的,直观感受就会出现局部的马赛克。当使用 WebTransport 基于 Quic 可靠传输时,其拥塞控制算法对网络抖动的敏感度相对较低,可以通过牺牲一定的延迟保证发送可靠性,因此不容易出现大幅降低发送带宽的行为,画质相对有保障。
  • 编码优化。WebTransport 在 Web 规范中提供了网络传输的能力,并且可以与现有的 Web 端多媒体能力进行深度集成,例如 WebCodecs、WebGPU 等。给应用的优化提供了更多编码格式、参数选择方面的空间。
  • 易于集成到直播 CDN(大规模分发)。WebTransport 基于已经定稿的 HTTP3 规范,易于被直播 CDN 集成支持,应用复杂度相较于 WebRTC 更低,同时省去了 RTC 推流建连过程中的信令环节,可以加快首帧推送的速度,方便部署到更多的直播 CDN。

不同的推流协议之间各有优缺点,目前没有一个完美的解决方案,需要根据实际的场景来做选择,比如连麦场景一般需要用 WebRTC 转推,更适合低延迟互动的场景,WebTransport 方案则更适合高画质需求的场景。总的来说,WebTransport 推流的方案在解决“如何稳定地将高质量的音视频传递给大量的用户”的问题上,即实现了可靠的传输,连接稳定性有保障,并且在遭遇网损的场景,可以通过牺牲部分延迟保障音视频质量。

WebTransport 是 WebRTC 数据通道的替代方案。WebTransport 与 WebRTC 数据通道具有相同的许多属性,不过底层协议不同。通常,运行与 HTTP/3 兼容的服务器所需的设置和配置比维护 WebRTC 服务器更少,这涉及了解多种协议(ICE、DTLS 和 SCTP),才能获得有效的传输。WebRTC 还包含许多动态部分,可能会导致客户端/服务器协商失败。WebTransport API 的设计考虑到了 Web 开发者的应用场景,因此感觉更像是编写现代 Web 平台代码,而不是使用 WebRTC 的数据通道接口。与 WebRTC 不同,WebTransport 在 Web Worker 内部受支持,这样您就可以独立于给定 HTML 页面执行客户端-服务器通信。由于 WebTransport 公开了与 Streams 兼容的接口,因此它支持有关背压的优化。不过,如果您已经拥有满意且可以正常运行的 WebRTC 客户端/服务器设置,那么改用 WebTransport 可能不会获得很多好处。

# WebSocket 对比

WebTransport 可以替代 WebSocket 吗?或许可以。在某些情况下,WebSockets 或 WebTransport 可能是可以使用的有效通信协议。

WebSocket 通信围绕单个可靠的有序消息流建模,这可以满足某些类型的通信需求。如果您需要这些特性,WebTransport 的流 API 也可以提供这些特性。相比之下,WebTransport 的数据报 API 提供低延迟的传送,无法保证可靠性或排序,因此它们不能直接替代 WebSocket。使用 WebTransport、通过数据报 API 或多个并发 Streams API 实例意味着您不必担心队头阻塞(这是 WebSocket 可能造成的问题)。此外,在建立新连接时有性能优势,因为底层 QUIC 握手比通过 TLS 启动 TCP 速度更快。

但是 WebTransport 是新规范草案的一部分,因此围绕客户端库和服务器库的 WebSocket 生态系统目前更加强大。如果您需要“开箱即用”的功能 WebSockets 具有常见的服务器设置,再加上广泛的 Web 客户端支持,是当今更好的选择。