OpenAI工程团队近日首次公开了支撑ChatGPT语音、Realtime API等实时语音产品的大规模WebRTC底层架构。该方案的核心创新在于将传统WebRTC的媒体路由和协议终结拆分为两层——无状态的relay负责纯粹的UDP包转发,而有状态的transceiver则承担完整的ICE(交互式连接建立)、DTLS(数据报传输层安全)握手和加解密工作。
解决Kubernetes环境下的端口暴露难题
传统WebRTC架构在Kubernetes环境中面临经典挑战:每个会话需占用一个公共UDP端口,高并发时可能需暴露数万个端口,既难以进行安全审计,也制约了弹性伸缩能力。OpenAI通过relay与transceiver的分层设计,将公共UDP暴露面大幅缩减至固定少量地址和端口。relay可水平扩展,重启后通过下一个STUN包即可自动重建路由。
值得注意的是,relay仅解析STUN包头中的ICE ufrag(用户名片段)来判断转发目标,不参与媒体解密、编解码协商或任何协议逻辑。relay持有的信息极为精简:一条内存中的转发映射加若干监控计数器和过期定时器,无持久化依赖。
放弃SFU架构,选用Transceiver模型
OpenAI放弃了多方通话中常见的SFU(选择性转发单元)架构。由于其语音AI绝大多数场景为一对一会话,transceiver模型的端到端延迟更低,且后端服务无需充当WebRTC对等节点,可作为普通服务横向扩展,完全无需理解WebRTC协议细节。
具体实现上,transceiver在网络边缘终止WebRTC协议,将接收到的音频转换为更简单的内部协议,分别送往推理、转录、语音合成等后端服务。所有通话状态集中在transceiver一个节点。
Go语言实现,全球就近接入
relay采用Go语言实现,运行在用户态。团队利用SO_REUSEPORT机制让多个工作线程共享同一UDP端口,并用runtime.LockOSThread绑定线程以提升缓存命中率,但未使用内核旁路框架。OpenAI表示这一方案已足够满足性能需求。
全球部署的Global Relay配合Cloudflare地理引导功能,可让用户的信令和媒体流就近接入OpenAI网络,有效缩短首跳延迟。Realtime API能在0.3秒内完成首响应,得益于对首包路由的精细管理——即使首个数据包到达时relay尚无该用户任何信息,也必须立即完成转发路由。团队将路由信息编码在ICE ufrag中,利用WebRTC协议自带机制实现零查询延迟的路由决策。
WebRTC先驱加盟
据披露,WebRTC协议原始架构师Justin Uberti及开源WebRTC库Pion的创建者兼维护者Sean DuBois均已加入OpenAI,参与实时AI与WebRTC的融合工作。数据显示,ChatGPT语音功能目前服务约每周9亿活跃用户。