OpenAI Realtime API (WebRTC) の WebRTC 仕様について
OpenAI Realtime API (WebRTC) の WebRTC 仕様についてまとめました。
まとめ
- OpenAI Realtime API (WebRTC) はクライアント・サーバーモデルであり P2P ではない
- OpenAI Realtime API (WebRTC) のシグナリングは WHIP に似せた独自仕様
- WebRTC の作者 や Go の WebRTC 実装 Pion の作者 が OpenAI にいる
クライアント・サーバーモデル
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