環境
- Windows 10
- node-v16.8.0-x64.msi
- コマンドプロンプト
- Google Chrome Version 93.0.4577.63 (Official Build) (64-bit)
注意
- node.jsがLTS版の node-v14.17.5-x64.msi だと
npm install
Windowsのアクセス違反のエラーが出て動作しなかった- LTS版の方が安定していると信じこんでいて、少しはまってしまった
npm ERR! code 3221225477
背景
- 様々な環境で動作するWebRTCのライブラリを探している
- ブラウザなしで、気楽に通信テストを行いたい
- 候補の1つとして、
node-webrtc
を触ってみる
node-webrtc とは
Node.js Native Addon that provides bindings to WebRTC M87.
- 「Node.js のネイティブのアドオンで、WebRTC M87準拠」と捉えればよいでしょうか
- WebRTC M87は、 Nov 6, 2020にリリースされているようだ
- node-webrtcのWebRTC M87対応は、Nov 3, 2020あたりにコミットされている
WebRTCのRelease Note
- 2021/9/2時点、以下のリストでは、M89が最新のようだ
node-webrtcサンプルを触ってみる
サンプルファイルの場所
サンプルの全体の処理の流れ
- サンプルは、node.jsのExpressフレームワークを用いたWebアプリの形で提供される
- node.js同士でWebRTC通信をするサンプルではなく、「node.jsサーバー」と「ブラウザ」でWebRTC通信するサンプル
- browserifyを使って、コードをブラウザで動作するコードに変換している
- RTCPeerConnection Negotiationは、REST API(HTTP)で実現している
RTCPeerConnection Negotiationの流れ
- 以下の図は、 https://github.com/node-webrtc/node-webrtc-examples より抜粋
- Express フレームワークのHTTPサーバーを使って、LocalDescriptionとRemoteDescriptionを交換している
実行したコマンド
git clone https://github.com/node-webrtc/node-webrtc-examples.git
npm install
npm start
> node-webrtc-examples@0.1.0 start
> node index.js
http://localhost:3000
実行結果
- ブラウザで、http://localhost:3000 を開く
- 以下は、一番、簡単そうな DataChannelを使ったテキストデータをやりとりするサンプルを実行した結果
- ブラウザ側の Consoleにログが出ることを理解するまでに時間がかかった(実は一番、難しかった)
- node.jsを実行したターミナルをずっと眺めていた
感想
- node.js(node-webrtc)同士で通信するサンプルではないという点を理解して、「node.js(node-webrtc)のコード」と「ブラウザ用のコード」を区別して理解する必要がある(同じjsファイルなので、これはどっちで実行されるのかな?と混乱してしまった)
- node-webrtcを使えば、ブラウザで動作するWebRTCと同じように書けそうなので、取り急ぎ動かすならば、以下のコードを見るだけでよかったかもしれない