開発中のリモートデスクトップアプリがついにベータテスト段階まで完成
前回の投稿のおさらい
昨年10月ごろ、Qiitaに初投稿して、開発中のリモートデスクトップアプリケーションに関する苦労話、開発の基礎技術などについてお話させていただきました。昨年の10月の時点では、とりあえず画面転送ができるだけのアプリケーションでストリーミングアプリと大差がない状態の完成度で、PCをリモートコントロールするという要素は実装されていませんでした。それから8か月が経ち、開発は順調に進み、製品候補版がついに完成しました。いま、ベータテスターを集める方法を模索中です。本記事では昨年10月から新たに実装された機能と実際に製品として販売する際に、競争の激しいリモートデスクトップアプリ界隈で強い差別化ができるオリジナル機能をピックアップしてご紹介したいと思います
前回の記事
この8か月で追加実装した新機能
昨年の10月に比べると、機能は大幅に追加実装されています。特に入力と映像について大幅な強化実装がされています
追加機能
- シグナリングサーバー機能
- MixedHDR機能
- TrueHDR機能
- Wacom Device Native Remote Connection機能
- XBox Controller Native Remote Connection機能
各機能の説明と他製品との差別化ポイント
1.シグナリングサーバーについて
私が開発したリモートデスクトップアプリはP2P通信を用いているため、通信相手のIPアドレスが必要になります。しかし、IPアドレスが決まっていない状態で、互いのIPアドレスを交換することはできません。そこで、サーバー側とクライアント側のIPアドレスの交換をサポートする独自のシグナリングサーバーを作成しました。どういう仕組みで動くかというと、クライアントアプリとサーバー側のアプリをシグナリングサーバー兼デバイス管理サイトに登録されたアカウントと紐づけして、クライアントとサーバー側が独立して、自身のIPアドレスをシグナリングサーバーに報告します。すると、シグナリングサーバーはサーバーとクライアントのIpアドレスを交換して、互いに報告することによって、サーバーとクライアントは互いのIpアドレスを知ることができます。また、リモートデスクトップアプリは情報漏洩が心配なデータも扱うため、通信の暗号化は必須です。この通信の暗号化には鍵が必要なのですが、サーバーとクライアントが用意した公開鍵を安全に交換するための機能もシグナリングサーバーに実装しました。なお、リモートセッション開始の時だけ、シグナリングサーバーが仲介して、接続が確立するとサーバーとクライアントは直接通信します。そのため、シグナリングサーバーは非力なPCで動作可能であり、DDOSなどのネットワーク攻撃を受けにくく、たとえシグナリングサーバーが不正アクセスを受けても、映像の通信などはシグナリングサーバーを仲介しておらず、シグナリングサーバーはP2P通信の公開鍵しか保持していないため、情報漏洩といった危険性も低く安全性を高く保つことを可能にしました。
2.MixedHDR機能について
HDRとはHigh Dynamic Range(ハイダイナミックレンジ)の略で、現実世界の約70%の色合いを再現可能な映像技術のことです。一方、標準ダイナミックレンジ(SDR)もあってこちらは現実世界の30%程度しか再現できない映像技術もあります。Windowsではモニタごとにモニタが対応していれば、そのモニタでHDRまたはSDR表示を選択することができます。私のアプリはサーバー側とクライアント側で複数モニタの切り替え配信にも対応しているのですが、キャプチャしているモニタのHDR設定とクライアントアプリが描写しているモニタのHDR設定が必ずしも一致しません。また、HDRとSDRでは表現できる色の幅が違うので、組み合わせによってはトーンマップするなど色の調整が必要です。このモニタごとのHDR設定の組み合わせに応じて動的に色合いを調節する機能がMixedHDR機能です。
3.TrueHDR機能について
先ほど説明したMixedHDR機能につながるのですが、キャプチャしているモニタがHDRオン、クライアント側の描写しているモニタもHDRオンの時に有効化される機能です。リモートでありながら、HDRが表現する色合いをすべて保持してリモート転送できる機能です。通常、市販のリモートデスクトップアプリではTrueHDRには対応していないかしていても限定的です。理由は低遅延な配信と高画質な配信はトレードオフの関係で、多くのリモートデスクトップアプリは低遅延を優先して映像の色合いを削って映像転送しています。私のアプリでは本来難しいといわれていた低遅延で高画質配信を実現し、TrueHDR有効下でも、映像遅延は40ms~70msと非常に低遅延で抑えられているのが特徴です。具体例を出すと、有名なゲーミングリモートデスクトップアプリにParsecというアプリがあるのですが、こちらはTrueHDR非対応で映像遅延は40ms~50msです。私のリモートデスクトップアプリはTrueHDR有効という高負荷でも平均50msは維持できているので、非常に優秀な性能を発揮しています。私のアプリはゲームもできますが、TrueHDR対応という特徴を生かして、グレーディングなど映像や画像を仕事とするクリエイターのリモート環境向けに開発しているため、Parsecとは競争する分野が違います。
4.Wacom Device Native Remote Connection機能
Wacomという会社はご存じでしょうか。イラストレーターの多くが愛用するペンタブレットシェアNo.1の企業です。私のリモートデスクトップアプリではWacomのペンタブのネイティブリモート転送に対応しています。何がネイティブかというと、他のリモートデスクトップアプリでもWacomのペンタブをサポートしている製品はあるのですが、ペンタブをエミュレートする方式のため、筆圧が8192段ではなかったり、Wacomペンタブの機能である消しゴム機能が使えないや、ワコムセンターオリジナル機能が使えないなど制約が多いです。一方、私の製品ではエミュレート式を採用せず、USBoE(USB over Ethernet)機能を応用して、リモートなのにまるでクライアントのUSBポートに接続したWacomペンタブがサーバーに接続されているかのようにふるまう形式のため、サーバー側でワコムセンターオリジナル機能や消しゴム機能、Expresskeyが使えるなど、Wacom製品と非常に高い互換性とネイティブ接続に限りなく近い動作を実現しています。
5.XBox Controller Remote Connection機能
こちらはWacomのペンタブのUSBoE機能をXBoxコントローラーに応用したものです。他のリモートデスクトップアプリでもXBoxコントローラーはサポートしていますが、エミュレート式がほとんどです。そのため、コントローラーの入力に遅延がある、コントローラーの振動が使えないなど制約が多いです。私はXBoxコントローラーのサポートでもUSBoE技術を応用しました。エミュレート式ではなく、クライアントPCに接続した有線XBoxコントローラーがリモートでまるでサーバーにUSB接続されているようにふるまうため、入力遅延が非常に少ないです。また、コントローラーの振動機能が使えるため、他の製品に比べて臨場感あふれるリモートゲーミング体験できる特徴が本製品にあります。
開発秘話
苦労した点
MixedHDRの実装は非常に困難でした。まず、サンプルコードなどないので、AIを駆使して作りました。コードはAIが書いてくれるので楽なのですが、MixedHDRが何をもって成り立つか判断させるために、独自の基準を編み出しました。そして、その基準に合うように、ひたすら同じ動作を繰り返して、ログをとって、ログをもとにAIでコードを修正するを繰り返して作成しました。加えて、HDR自体に統一規格がありません。Windowsは勝手に色合い調整する場合があるし、グラフィックスドライバーのHDR動作基準もWindowsと一致しているわけではありません。モニタの見た目でも同じHDR動画なのに輝度や色合いの表現が異なります。そのため、私はモニタの見た目でMixedHDRを判定するのではなく、デジタル上でMixedHDRが成り立つことを証明する方法を考えました。先ほどの独自基準に加えて、オリジナルでデジタルニト計兼カラーピッカーソフトを開発し、さらにオリジナルの色パターンHDR動画も作成しました。こうして、Dolbyが公式に出しているHDR動画、オリジナル色パターンHDR動画、オリジナルデジタルニト計兼カラーピッカーソフト、独自基準の4点セットで客観的間接的にMixedHDRが正常に動作していることを傾向として証明する方法も編み出しました。(いろいろなHDR基準が複合してモニタに表示されているため、統計的にMixedHDR成立傾向があるとまでしか言えないのです)
ワコムとXboxコントローラーのUSBoE実装では、コード自体はMixedHDR比べて簡単なのですが、実物のコントローラーやデバイスを買ってきて、USBパケットを取得するのに非常に時間がかかりました。根気もいる作業です。コントローラーに至っては入力パターン全57パターンのUSBパケットを取得するのに、12時間かかりました。途中で疲れてきたり、眠いなど集中力が切れてくると、どこまでパターンパケットを記録したかがわからなくなって、何度もやり直しました。本当に疲れました。
嬉しかった点
TrueHDRが動作して、HDRの鮮やかな色合いがリモートで再現できた時はおーってなりました。ワコムのペンタブがネイティブでリモート動作したときは、キタコレ━━(゚∀゚)━━!!って感じになってめちゃくちゃ報われました。
今後の流れ
ベータテスターを集めることをします。理由はUI作ったのですが、私は人間工学や認知科学までは知らないため、作ったUIで所見の人が迷わず使えるのかテストする目的があります。また、私の財力では購入できるPCの台数に限界があります。様々なPCで動作するのか調べる意味でもテスターが必要です。
ベータテストが終わったら、いよいよ管理サイトに製品プランを選んでお金を払えば機能が有効かされる機能の実装と、プランごとに製品の動作が自動で変わるようにする機能の実装もしたいです。また、製品のホームページ作成も必要になってきました。
機能追加の主な実装は終わったので、あとは製品としてお金をいただけるように調整していく段階になりました。しかし、私の製品はオリジナルドライバーで動くため、Microsoftから正規証明書の発行してもらわなくてはなりません。そのためには法人を立てる必要があるのですが、立て方もどの国で法人を作るとよいのかもまだ試行錯誤段階です。必要な費用とかもわかりません。
まだまだ製品販売までには時間がかかりそうですが、1年以内にはリリースを目指したいです
動作動画
最新の動作動画を録画しました。前回はiPhoneで撮影という愚策な方法だったので、今回はHDR対応のキャプチャボードを2台買って、OBSで録画しました。
- サーバーPCスペック:Ryzen5 4500, RTX4070
- クライアントPCスペック:Core i7 12700H, RTX2050
4KHDR動画のリモート転送(TrueHDR機能)
TrueHDR下での4Kリモートゲーミング
Wacom Device Native Remote Connection機能の動作動画は機材の関係上、準備できませんでした。