🤖

OpenAI Realtime API (WebRTC) の WebRTC 仕様について

2025/01/29に公開

OpenAI Realtime API (WebRTC) の WebRTC 仕様についてまとめました。

まとめ

クライアント・サーバーモデル

OpenAI Realtime API の WebRTC (以降 Realtime API) は WebRTC P2P ではなく、クライアントサーバーモデルです。つまり、 OpenAI に WebRTC サーバーがあり、そこに接続しています。

WebRTC サーバー実装

おそらく WebRTC サーバーは Go の WebRTC 実装である Pion を利用していると考えられます。 Pion の作者 が OpenAI にいます。

独自シグナリング

シグナリングは WHIP に似ていますが、音声を受信できるようになっていますので、独自仕様です。

WHIP はそもそも 送信専用 であり、サーバーから音声や映像を受信する仕組みはありません。しかし Realtime API は音声を送信し、さらにサーバーから音声を受信する仕組みになっているので、独自仕様です。

STUN/TURN を利用していない

STUN や TURN を指定を一切利用せず、サーバーの Answer にある candidate に ICE-UDP/ICE-TCP で繋ぎにいっているだけです。
そのため、コードがとてもシンプルになっています。

データチャネルを利用している

サーバからのプッシュはデータチャネルを利用しています。
データチャネルをデフォルトを利用しているので「再送あり」「順番あり」なのでほぼ TCP 的な用途として利用しています。

ICE-UDP/ICE-TCP を利用している

リリース当初は ICE-UDP のみで、TCP などは利用できませんでしたが、ICE-TCP も利用できるようになったようです。

https://x.com/juberti/status/1876383392159379607

音声コーデックは Opus だけではない

音声は Opus が基本ですが、Opus 以外に PCM や G711 なども利用できるようです。

Discussion