半年ほど前、私はブラウザを通じてコンピュータを制御するプログラムを作成することにしました。 私は、ブラウザに画像を転送し、制御のためにカーソル座標を受け取る、単純なシングルソケットの HTTP サーバーから始めました。
ある段階で、WebRTC テクノロジーがこれらの目的に非常に適していることに気づきました。 Chrome ブラウザにはそのような解決策があり、拡張機能を介してインストールされます。 しかし、私はインストールせずに動作する軽量のプログラムを作成したかったのです。
最初はGoogleが提供するライブラリを使おうとしましたが、コンパイルすると500MBを消費します。 WebRTC スタック全体をほぼゼロから実装する必要があり、すべてを 2.5MB の exe ファイルに収めることができました。 友人が JS でのインターフェースを手伝ってくれて、最終的にこれが完成しました。
プログラムを実行してみましょう:
ブラウザ タブでリンクを開き、デスクトップへのフル アクセスを取得します。
接続セットアップ プロセスの短いアニメーション:
Chrome、Firefox、Safari、Opera でサポートされています。
サウンドの送信、音声通話、クリップボードの管理、ファイルの転送、ホットキーの呼び出しが可能です。
プログラムに取り組んでいる間、私は十数の RFC を研究する必要があり、WebRTC プロトコルの動作についてインターネット上に十分な情報が存在しないことを理解しました。 そこで使用されているテクノロジーに関する記事を書きたいと思っています。次の質問のうち、コミュニティが興味を持っているものはどれかを調べたいと思っています。
- SDPストリーミングデータ記述プロトコル
- ICE 候補と、STUN サーバーと TURN サーバーの XNUMX つのポイント間の接続の確立
- DTLS 接続と RTP セッションへのキーの転送
- メディア データ送信用の暗号化を備えた RTP および RTСP プロトコル
- H264、VP8、Opus を RTP 経由で転送
- バイナリデータを転送するためのSCTP接続
出所: habr.com