音声やビデオを話者間で共有するプロコトルについてまとめてみたい
音声やビデオを話者間で共有するプロコトルについてまとめてみたい
実装するには次の2つのやり方がある。
・SIP
・WebRTC
これに限ったことではないのだが、世の中を見渡すと略語や頭文字を並べた言葉が社会には溢れていますが、こういう言葉を目にした時は少しの間立ち止まって、その意味を調べてみると良いことがある。
SIPとは Session Initiation Protocol の略で話者間のセッションを確立するための取り決めだ。
いきなり知らない人からダイレクトメールが届いても普通無視される。
そこでSIPサーバに動いてもらって
「こんな人が通話したいって言ってきてるよ」
と仲介してもらうわけだ。
もちろん、ブラックリストやホワイトリストを定義できるし、プライベートで特定の人にだけ通話を許可することもできる。
通話OKなら、
「こっちはエンコードはSpeexだよ」
「OK、わたしもSpeexで大丈夫」
ここらへんのやりとりを SDP (Session Description Protocol) や RTSP (Real Time Streaming Protocol)として定義されてる。
サーバ「この後は二人でよろしくやってくれ。キミのほんとうのIPアドレスは1.1.1.1/8だから相手のIPアドレス2.2.2.2/16に直接話しかけてくれ」
ここのサーバと話者とのやりとりは STUN (Session Traversal Utilities for NAT) として定義されている。
それならばということで、話者は RTP (Real Time Transport Protocol) で定義された方法でさっき取り決めたエンコードで音声を送り合う。
この一連のやりとりでSIPサーバが仲介する理由は、ほとんどの話者コンピュータが所有しているIP (Internet Protocol) アドレスはプライベートアドレスもしくはシェアードアドレスなため自分のほんとうのIPアドレスを知る術がないのと、インターネットに出るときにはルータやファイアウォールやデリゲータなどのハードウェア装置が NAT (Network Address Translation) で定義された方法などで外部からのアクセスを遮断しているからだ。
2つめの WebRTC は Web Real Time Communication の略でブラウザだと Chrome だけで実装され動作する。
SIPと同じやりとりの取り決めが ICE として定義されている。
SIPとWebRTC は Unix Socket と Web Socket の関係と同じで中身はまったく同じものだ。