yagisukeのWebなブログスマートフォン用の表示で見るyagisukeのWebなブログWebなブログお山なブログこの広告は、90日以上更新していないブログに表示しています。〜読み物yagisuke.hatenadiary.comの第5話です。Communication)WebRTCはブラウザ/サーバー間の通信だではなく、ブラウザとブラウザのP2P通信で使用します。実現するための基盤として設計されています。実現したいアプリケーションも他のプロトコルとは大きく異なるため、使われる機能群も大きく変わります。エラー処理や再送処理を行わないUDPをメインで使います。できるような技術も使われています。ブラウザから使われるAPIという観点で説明していきます。データチャンネルの通信WebRTCのベースになっているのはIP電話です。IP電話で使われている技術を一つにまとめ、JavaScriptのAPIを定めたものです。NAT超えなどの基礎をなすプロトコルはどれも古くからあるものです。動的に割り振られるUDPのポート番号も知る必要があります。その通信でやり取りできる内容についても、お互い合意しておく必要があります。そのためP2P通信が確立するまでに、WebRTCではいくつかの情報をやり取りしています。Establishment)ICEはNATを超えてP2P通信の接続を確立する手法です。STUNとTURNのどちらかのサーバーを利用します。交換する必要があります。https://html5experts.jp/mganeko/20618/自分で知らない情報は、誰かから教えてもらうしかありません。それを可能にするのがSTUNです。STUNの仕組みはシンプルです。NATで変換されたIPアドレス/ポートを、外側にいるSTUNサーバーに教えてもらいます。先ほどの例で言えば、このようになります。https://html5experts.jp/mganeko/20618/自分のグローバル情報が分かったら、それをシグナリングサーバー経由で相手に渡します。Candidateとして取得できます。これをシグナリングサーバーなどを経由して相手に送ることができ、P2P通信が実現しています。コーデック情報を共有するためのものです。符号化方式を使ってデータのエンコード(符号化)とデコード(復号)を双方向にできる装置やソフトウェアなどのこと。そのためのアルゴリズムを指す用語としても使われている。定めていますが、「相手に渡す」手段は定めていません。渡す手段とかはこちらを参照すると良いとのことです。https://html5experts.jp/mganeko/19814/メディアチャンネルとgetUserMedia相手との通信が確立したら、実際に通信を行います。音声やビデオを取り扱うのがメディアチャンネルです。navigator.mediaDevices.getUserMedia()ビデオ会議などで使うウェブカメラやオーディオデバイスの、設定と取得を行うブラウザAPIです。カメラは解像度、フレームレート、フロントカメラ/リアカメラなどを指定することもできます。取得されたものはストリームという名前で呼ばれます。このAPIは単独でも使うことができ、HTMLのvideoタグ上にカメラの映像を表示できます。APIを利用することで高度な制御やモニタリングが行えます。ステレオの音位の指定やミキシング、ボリューム調整などができます。しゃべっている人の検出なども可能となります。https://developer.mozilla.org/ja/docs/Web/API/Web_Audio_APIDTLSWebRTCのデータ通信には、メディアチャンネルとデータチャンネルの2つがあります。どちらも、DTLS上の通信となっています。Mediaチャンネルです。MediaチャンネルはDTLS上のSRTPというプロトコルをつかっています。順序の整列機能だけをUDPに追加しています。データチャンネルデータチャンネルは音声以外のデータをP2Pで送受信するためのものです。通信対戦のゲームの捜査情報を共有するのに使用していました。プロトコルを載せています。データのユースケースは映像・音声よりも多少幅があります。それより応答性が損なわれる方が問題になることもあります。そこでSCTPではパフォーマンスとトレードオフで信頼性を設定できるようになっています。UDP側に寄せるか、TCP側に寄せるか、選べるようになっています。ありデータチャンネルの初期化は以下のように行います。2つ目の引数が特性を制御するパラメータです。省力時はTCP同等の配送順序保証の高信頼性モードになります。このサンプルコードは順序を保証せず、再送もしないというUDP互換のモードを設定しています。maxRetransmitTimeかmaxRetransmitsのどちらかを設定し、再送方式を手動にすると非信頼モードになります。再送回数})ファイル送信などのユースケースであればデフォルトの高信頼性モードが適しています。ファイルとして用をなさないからです。ゲームのステータスで、UDPの1パケットに治るサイズであれば、少なくとも順序保証はありません。