English ReadMe is here
Windows向けの低遅延P2Pリモートプレイシステムです。
双子の兄とゲームを遊ぶために作ったシステムを一般公開用にカスタマイズしたものです。
名前の由来は2つあります
- 開発者の双子の兄と遊ぶためのシステムだった
- 2つのデバイスがまるで1つのデバイスのように低遅延で動いてほしい
Steam Remote Play Together のような体験を、Steam以外のゲームやアプリでも利用できることを目指しています。
TwinsRemote には維持費がかかっています。
サーバー代(公開用 + TURN用 + staging用) + ドメイン代 = 2300円/月
もしも「TwinsRemote が長く続いてほしい」「頑張って新しい機能とか作ってほしい」など気に入った方は応援してください。
- WebRTC を利用したP2P通信
- 安定した回線環境では数十ms程度の低遅延
- ゲームプレイを前提とした設計
クライアント側はソフトウェアのインストール不要です。
以下のような Chromium 系ブラウザで動作確認済みです。
- Google Chrome
- Brave
クライアントページ:
https://play.twins-remote.com
- NVIDIA NVENC を使用したハードウェアエンコード
- 複数のプリセット配信モード
- ユーザー作成カスタムモード
- 回線環境に応じた調整が可能
- IPv4 / IPv6 対応
- TURN Relay 対応
- NAT越え対応
以下の3種類に対応しています。
- PC全体のシステム音声共有
- アプリ単位の音声共有
- 音声共有なし
現在動作確認済み:
- Xbox Controller
- DualShock 4
- DualSense
クライアント側の入力は WebRTC DataChannel を利用してホストへ送信されます。
遅延は非常に少なく、実際のゲームプレイを想定した設計になっています。
以下を担当しています。
- WebRTC通信
- DataChannel処理
- コントローラー入力処理
- TURN/STUN処理
- NAT越え
また、仮想コントローラーの生成に ViGEm を利用しています。
クライアントからのコントローラー入力をゲーム側で認識させるため、ホストPCには ViGEm のインストールが必要です。
以下を担当しています。
- 画面キャプチャ
- NVENCエンコード
配信モードは:
- 開発者が用意した固定モード
- ユーザーが作成したカスタムモード
を選択できます。
- システム音声キャプチャ
- アプリ音声キャプチャ
Windows Forms アプリケーションとして動作します。
以下を担当しています。
- ホストUI
- 配信設定
- セッション接続管理
日本語 / 英語に対応しています。
- フロントエンドフレームワーク未使用
- WebRTCベース
- ブラウザ上で動作
細かいマニュアルはこちらです
TwinsRemoteHost.exeを起動- 配信モードを選択
- クライアントから共有されたセッションIDを入力
- 接続ボタンを押す
接続後、自動的に配信が開始されます。
- 以下へアクセス
https://play.twins-remote.com
- セッションIDが自動生成されます
- そのIDをホスト側へ共有
- ホスト側の接続完了を待つ
接続完了後、自動的に配信が開始されます。
最初はミュートになっているので、適宜ミュート解除をしてください
- Windows
- NVENC対応 NVIDIA GPU
-
Chromium系ブラウザ
- Chrome
- Brave
以下のものは例です。
今後実装するかどうかは未定です。
- 配信中の動的解像度変更
- マルチモニター選択
- CPUエンコード
- ホスト側は Windows 限定
- メインモニターのみ共有可能
- NVIDIA NVENC 必須
対応:
- WebRTC P2P通信
- IPv4
- IPv6
- TURN Relay
- NAT越え
現在、TURNサーバーは東京に設置しています。
- Rust
- C++
- C#
- WebRTC
- NVENC
- ViGEm
- Vanilla JavaScript
- WebRTC
開発には Visual Studio が必要です。
リポジトリには以下のプロジェクトが含まれています。
NvEncProcessAudioCaptureSystemMicCaptureTwinsRemoteHost
これらは Visual Studio ソリューションで管理されています。
機能リクエスト・不具合報告などがある場合は気軽に報告してください。
報告は Github Issue か下記のXポストの返信欄にお願いします。
Twins Remoteの理念から大きくそれないものは積極的に取り入れていく予定です。
例えば
- キーボード / マウス入力対応
- ホスト側で受け付ける入力種別の制御
- 動的解像度変更
- 配信安定性向上
- より柔軟なディスプレイ選択
Github Issue も歓迎します
X のこちらのポストへ返信してください
X のこちらのポストへ返信してください
X のこちらのポストへ返信してください
いいえ。
Twins Remote は Steam に依存していません。
以下のような用途にも利用できます。
- Steam以外のゲーム
- エミュレーター
- デスクトップアプリ
不要です。
ブラウザのみで利用できます。
ViGEm を利用してホスト側に仮想コントローラーを生成し、ゲーム側へクライアント入力を渡しているためです。
クライアント側のログに「gamepad connected: ~」と出ている場合はコントローラーは認識されています
それでも入力が効かない場合は以下を確認してください。
- クライアントPCのフォーカスが TwinsRemote Client のタブになっているか
- クライアントPCで直前に別ウィンドウや別のアプリを操作しませんでしたか?
- ホストPCのフォーカスが起動しているゲームになっているか
- ホストPCで直前に別ウィンドウや別アプリを操作しませんでしたか?
- 開発者はゲームを立ち上げた後「アプリ音声」の共有をした後、ゲームウィンドウをクリックしてないというミスを何回もしました
- ゲームの対応コントローラーをチェックしてください
- 「XBoxコントローラーのみ対応」など、ゲームによって対応しているコントローラーが違う可能性があります
- 一度ホストとクライアントの接続を切ってつなぎなおしてください
- それでも認識されなかった場合は開発者に報告してください
ホスト側をゲーミングノートPCで動かそうとすると、クライアント側に映像が共有されない事象を確認しています。
外部ディスプレイをメインモニタにすることで解決するかもしれません。
詳しくはこちら
このプロジェクトは、開発者と双子の兄が遠隔でゲームを遊ぶために作り始めたシステムです。
「Twins Remote」という名前には:
- 開発者が双子の兄と遊ぶために始まったプロジェクトであること
- 離れたPC同士を双子のように近い存在にしたいこと
という意味を込めています。
現在も開発中です。
仕様や機能は今後大きく変更される可能性があります。
本ソフトウェアは無保証で提供されます。
自己責任で利用してください。