WebRTC + WebXR RDP
WebRTCとWebXRを使ったブラウザ上で動くリモートデスクトップです.WebXRではない通常表示も可能です.
最近の Chrome や Edge で動くはずです.VRモードは Oculus Quest 2 の Oculus Browser で動作確認しています.
Demo URL: https://binzume.github.io/webrtc-rdp/
Usage
- https://binzume.github.io/webrtc-rdp/ にアクセスします
- 接続したいブラウザ間でペアリングします.片方のブラウザでPINを生成し,もう一方のブラウザでそのPINを入力してください
- デスクトップを配信(Cast My Desktop) するか リモートデスクトップに接続 (Connect to Remote Desktop) するか選択してください
- 配信する場合はデスクトップのキャプチャを許可してください.キャスト画面でストリームを追加・削除できます
- 接続後に WebXR リンクから VR モードに入れます (Oculus Quest用)
最低限の動作確認のためのデモなので,本格利用する場合は色々いじってください.
Mouse/Keyboard
ブラウザ上からは,マウスやキーボードの制御はできないので,ワイヤレスキーボード・マウス等の手段を用意してください.
どうしてもブラウザ経由でマウスを動かしたい場合は,ホスト側のPCで https://github.com/binzume/inputproxy を起動してください. 以下のような構成です.(キーボードは気が向けば対応します)
クライアントブラウザ → (WebRTC DataChannel) → ホストブラウザ → (WebSocket) → inputproxy → マウス/キーボード
WebRTC
- WebRTC Signaling ServerはOpenAyame/ayameを使います
- デモの実装ではAyame Laboに接続します.本格利用する場合は自分でAyameを動かしたほうが良いです
VR
- https://binzume.github.io/vr-workspace/#app:app-webrtc-rdp から.
- 単体でも動きますが,binzume/vr-workspaceからアプリとして読み込む前提の作りになっています
- A-Frameを使っています.
Security
- P2Pなので,同じネットワーク内で使う場合は共有している映像や音声などはインターネットを経由しません.
- デモの実装ではAyame Laboを使って接続します.セキュアな接続が必要な場合は自分の環境でAyameを起動して使ってください.
- 接続にAyame Laboを使っている場合,何らかの理由でRoomIdが漏れると他者が接続できる可能性があるので,接続を待機した状態で放置しないでください.
- RoomIdはPINの交換時にランダムな文字列から生成して共有します.
TODO
- ウインドウ単位のキャプチャでもマウス操作をサポートする
- WebXR時にレンダリング面積に合わせて元のvideo解像度を変える
- UIをまともにする
- ファイル共有機能
License
MIT