WebRTC
PeerJS

WebRTCの基礎

More than 1 year has passed since last update.

WebRTCとは?

WebRTC = Web Real-Time Communication 」の略称です。
W3C ( World Wide Web Consortium ) が提唱するリアルタイムコミュニケーション用のAPIの定義で、
プラグイン無しで、ウェブブラウザ間のボイスチャット、ビデオチャット、ファイル共有をすることが可能です。

[ W3C (World Wide Web Consortium) とは?]
1994年10月1日、World Wide Web(WWW)を考案したティム・バーナーズ=リーが、
World Wide Web(WWW)で使用される各種技術の標準化を推進する為に設立した標準化団体・非営利団体。

語弊があることを承知で、初めてWebRTCという言葉を聞く人のために、

凄くかみ砕いて説明すると、

WebRTC = 「ブラウザ間でリアルタイムなコミュニケーションを可能にする技術」

です。

WebRTCでググってみると、、。

「WebRTC」 でGoogle検索をかけると、
上記抜粋のようにP2P (Peer-to-Peer)と出てきますが、
厳密には、P (Peer)P (Peer) を中継するシグナリングサーバー(WebRTCサーバー)が必要です。

と、文章だけで記載しても、初めての方はイメージしにくいと思うので、
図と組み合わせながら説明していきたいと思います。

上記内容を図式化してみると、、

WebRTC仕組み.png

[図1] WebRTC通信(概要)

WebRTCでは、映像/音声/アプリケーションデータなどをリアルタイムにブラウザ間で送受信することができますが、
②実際にブラウザ間で、P2P [Peer-to-Peer] 通信を始める前に、
①お互いの情報を交換するための「シグナリング」と呼ばれる処理を行う必要があります。

WebRTCの通信は、大まかに2つに分かれています。

ほんとうに、ざっくりと説明すると、、。
(もし認識が違っているようでしたら、ご指摘いただけますと幸いです。)

1. P2P通信を確立するまで
2. P2P通信を確立した後

さきほどの図を見ていただくと分かると思いますが、
P2P[Peer-to-Peer]でやり取りを行うまでに、通信する端末同士で
接続を行うための情報(相手のIPアドレス、UDPのポート番号)交換
をする必要があります。

本日は、WebRTCを2つのパートに分けて、ご説明させていただきたいと思います。

P2P通信を確立するまで (PART1)

ブラウザ間でP2P通信を行う際には、1.通信相手のIPアドレスや、
2.動的に割り当てられるUDPのポート番号を把握する必要があります。
また、P2P通信でやり取りできるデータの種類等についても、通信端末間で合意しておく必要があります。

WebRTCでは、上記のようにP2P通信が確立するまでの間、いくつかの情報をやり取りします。

1. Session Description Protocol(SDP)

一つ目は、「Session Description Protocolo」(SDP)と呼ばれるもので、
P2Pの通信条件等のやり取りを通信する端末同士で行います。

WebRTCのようなリアルタイム通信を始めるためには、
メディアデータを含んだパケットの符号化方式パケットの宛先のアドレスなどについて
端末間でやり取りを行う必要があります。このやり取りに必要となるのが、
SDP(Session Description Protocol)と呼ばれる記述言語です。
SIPとリアルタイム通信より抜粋

[特徴]
各ブラウザの情報を示し、文字列で表現されます。例えば、下記のような情報を含んでいます。

  • セッションが含むメディアの種類(音声、映像)、メディアの形式(コーデック)
  • IPアドレス、ポート番号
  • P2Pのデータ転送用プロトコル(※WebRTCの場合は、Secure RTP)
  • P2P通信で使用する帯域

2. Interactive Connectivity Establishment(ICE)

二つ目は、Interactive Connectivity Establishment (ICE) と呼ばれるものです。

こちらのICEでは、通信経路の決定を行います。

P2P通信を行う際にどのような通信経路が使用できるかは、お互いのネットワーク環境に依存します。
この通信経路を定めるための仕組みが「Interactive Connectivity Establishment(ICE)」と呼ばれるもので、
通信経路候補のこと「ICE Candidate」と呼びます。

P2Pの通信を始める前に、通信経路になりうる経路候補がリストアップされます。

  • P2Pによる直接通信経路
  • NATを通過するためのSTUNサーバーから取得したポートマッピング → 最終的にはP2P通信になる
  • Firewallを超えるための、TURNによるリレーサーバーを介した中継通信

通信経路候補(ICE Candidate)が見つかれば、順次通信を試み、一番最初につながった経路が採用されます。

P2P通信確立後の処理フローについて、、。

P2P通信確立後(PART2)に関しては、私自身まだまだ知識が不足しておりますので、
後日あらためて記載することにいたします。申し訳ございません。

おわりに

最後までお読みいただき、ありがとうございました。
私自身も調べながら、気になる情報をまとめて記事にしておりますので、
記事内に不適当な箇所があるかもしれません。

何かお気づきの点ございましたら、ご指摘いただけますと幸いです。

参考文献

WebRTC入門2016