Skip to content

ADR-0002: WHIP/WHEP 协议集成

状态:已批准 日期:2024 决策者:核心团队

背景

Go-Live 需要一个信令协议用于 WebRTC 流的发布和播放。信令机制决定了客户端如何与服务器建立连接。

决策

采用 WHIP(WebRTC-HTTP Ingestion Protocol)用于发布,WHEP(WebRTC-HTTP Egress Protocol)用于播放。

WHIP 发布流程

WHEP 播放流程

API 契约

方法路径请求响应
POST/api/whip/publish/{room}SDP OfferSDP Answer (201)
POST/api/whep/play/{room}SDP OfferSDP Answer (201)

两个端点接受 application/sdp 内容类型,响应体返回 application/sdp

理由

为什么选择 WHIP/WHEP 而非 WebSocket 信令

方面WHIP/WHEPWebSocket
基础设施标准 HTTP需要 WebSocket 支持
CDN/代理兼容任何反向代理需要 WebSocket 感知代理
客户端复杂性简单 POST 请求持久连接管理
防火墙穿透HTTP(S) 通用放行可能被阻断
扩展性无状态 HTTP,易于扩展有状态连接

为什么选择 WHIP/WHEP 而非自定义协议

  • 互操作性:OBS Studio、浏览器和库支持 WHIP/WHEP
  • 标准轨道:IETF 草案,采用率不断增长
  • 简洁性:每个连接一个 HTTP 请求(基础模式无 trickle ICE)

集成架构

考虑的替代方案

基于 WebSocket 的信令

  • 拒绝:增加基础设施复杂性
  • 客户端必须维护持久连接
  • 更难水平扩展

基于 gRPC 的信令

  • 拒绝:浏览器不原生支持
  • 需要 gRPC-Web 代理层

自定义 HTTP API

  • 拒绝:可行但失去互操作性
  • WHIP/WHEP 正在成为标准

结果

  • 简单的基于 HTTP 的信令
  • 兼容 OBS Studio 和现代浏览器
  • 无需 WebSocket 基础设施
  • 基础模式不支持 trickle ICE(所有候选在 SDP 中)

Released under the MIT License.