Skip to content

Eye94Mask/TwinsRemote

Repository files navigation

Twins Remote

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種類に対応しています。

  1. PC全体のシステム音声共有
  2. アプリ単位の音声共有
  3. 音声共有なし

コントローラー入力共有

現在動作確認済み:

  • Xbox Controller
  • DualShock 4
  • DualSense

クライアント側の入力は WebRTC DataChannel を利用してホストへ送信されます。

遅延は非常に少なく、実際のゲームプレイを想定した設計になっています。


システム構成

ホスト側

Rust

以下を担当しています。

  • WebRTC通信
  • DataChannel処理
  • コントローラー入力処理
  • TURN/STUN処理
  • NAT越え

また、仮想コントローラーの生成に ViGEm を利用しています。

クライアントからのコントローラー入力をゲーム側で認識させるため、ホストPCには ViGEm のインストールが必要です。


C++

以下を担当しています。

映像

  • 画面キャプチャ
  • NVENCエンコード

配信モードは:

  • 開発者が用意した固定モード
  • ユーザーが作成したカスタムモード

を選択できます。


音声

  • システム音声キャプチャ
  • アプリ音声キャプチャ

C#

Windows Forms アプリケーションとして動作します。

以下を担当しています。

  • ホストUI
  • 配信設定
  • セッション接続管理

日本語 / 英語に対応しています。


クライアント側

Vanilla JavaScript

  • フロントエンドフレームワーク未使用
  • WebRTCベース
  • ブラウザ上で動作

使用方法

細かいマニュアルはこちらです

ホスト側

  1. TwinsRemoteHost.exe を起動
  2. 配信モードを選択
  3. クライアントから共有されたセッションIDを入力
  4. 接続ボタンを押す

接続後、自動的に配信が開始されます。


クライアント側

  1. 以下へアクセス
https://play.twins-remote.com
  1. セッションIDが自動生成されます
  2. そのIDをホスト側へ共有
  3. ホスト側の接続完了を待つ

接続完了後、自動的に配信が開始されます。

最初はミュートになっているので、適宜ミュート解除をしてください


必要環境

ホスト側

  • 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 が必要です。

リポジトリには以下のプロジェクトが含まれています。

  • NvEnc
  • ProcessAudioCapture
  • SystemMicCapture
  • TwinsRemoteHost

これらは Visual Studio ソリューションで管理されています。


今後の予定

機能リクエスト・不具合報告などがある場合は気軽に報告してください。

報告は Github Issue か下記のXポストの返信欄にお願いします。

Twins Remoteの理念から大きくそれないものは積極的に取り入れていく予定です。

例えば

  • キーボード / マウス入力対応
  • ホスト側で受け付ける入力種別の制御
  • 動的解像度変更
  • 配信安定性向上
  • より柔軟なディスプレイ選択

報告

開発者向け

Github Issue も歓迎します

機能リクエスト

X のこちらのポストへ返信してください

不具合報告

X のこちらのポストへ返信してください

その他報告や質問

X のこちらのポストへ返信してください


FAQ

Steam専用ですか?

いいえ。

Twins Remote は Steam に依存していません。

以下のような用途にも利用できます。

  • Steam以外のゲーム
  • エミュレーター
  • デスクトップアプリ

クライアント側にインストールは必要ですか?

不要です。

ブラウザのみで利用できます。


なぜ ViGEm が必要なのですか?

ViGEm を利用してホスト側に仮想コントローラーを生成し、ゲーム側へクライアント入力を渡しているためです。


クライアントのコントローラー入力が効きません

クライアント側のログに「gamepad connected: ~」と出ている場合はコントローラーは認識されています

それでも入力が効かない場合は以下を確認してください。

  • クライアントPCのフォーカスが TwinsRemote Client のタブになっているか
    • クライアントPCで直前に別ウィンドウや別のアプリを操作しませんでしたか?
  • ホストPCのフォーカスが起動しているゲームになっているか
    • ホストPCで直前に別ウィンドウや別アプリを操作しませんでしたか?
    • 開発者はゲームを立ち上げた後「アプリ音声」の共有をした後、ゲームウィンドウをクリックしてないというミスを何回もしました
  • ゲームの対応コントローラーをチェックしてください
    • 「XBoxコントローラーのみ対応」など、ゲームによって対応しているコントローラーが違う可能性があります
  • 一度ホストとクライアントの接続を切ってつなぎなおしてください
    • それでも認識されなかった場合は開発者に報告してください

接続ボタンを押したのに映像が共有されない

ホスト側をゲーミングノートPCで動かそうとすると、クライアント側に映像が共有されない事象を確認しています。

外部ディスプレイをメインモニタにすることで解決するかもしれません。

詳しくはこちら


プロジェクトについて

このプロジェクトは、開発者と双子の兄が遠隔でゲームを遊ぶために作り始めたシステムです。

「Twins Remote」という名前には:

  • 開発者が双子の兄と遊ぶために始まったプロジェクトであること
  • 離れたPC同士を双子のように近い存在にしたいこと

という意味を込めています。


開発状況

現在も開発中です。

仕様や機能は今後大きく変更される可能性があります。


免責事項

本ソフトウェアは無保証で提供されます。

自己責任で利用してください。

About

Twins Remote is a remote play system for Windows. It’s essentially a version of Steam’s Remote Play Together with lower latency and no reliance on Steam.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors