投げ売りされていた HTC VIVE Flow を仮想デスクトップとして無理矢理使う。

楽天と Amazon で投げ売りされとるやんけ

激安VIVE Flowで構築する軽量VR環境 という記事を読んで、定価 ¥60k の VR メガネが ¥16k で投げ売りされていることを知った次の瞬間にはポチっていた HTC VIVE Flow が手元に届いてしまった。

しかし如何せん使い道がなさすぎる。公式アプリストアにもほぼ何もない。なんとかして仮想デスクトップとして使えないか試行錯誤した結果、画質も荒いし、遅延もキツくて使い物にならないけど、まぁできると言えば言えなくもない…という感じになったので玩具で遊んだ記録を残しておきます。

2021 年の VR メガネなので、性能も画質も今となっては微妙

Apple Vision Pro と比較したら可哀そうではある。しかしメガネなので圧倒的に軽くて装着感がいい。装着感だけは素晴らしいので Vision Pro もこうなって欲しいですね…。

しかし 5 年も倉庫に眠っていたであろう新品デッドストック品、 OS のアプデ祭りなどで半日掛かった。インクリメンタルにしか上げられない作りはよくないですね。

HTC VIVE Flow には内蔵ブラウザがあるので、 WebRTC で低遅延配信を受けられるのでは?

最新版までアプデして一通り触った結果、見出しの内容に気付いたので OBS を Mac に入れて、設定を詰めてみることにした。

とりあえず

  • H.264 のハードウェアエンコーダを使う
  • B フレームは使用しない (使用するとカクカクになる)
  • CBR (固定ビットレート)にする (一番遅延しない)

という設定で良いと思う。

レガシーデバイスに向けた配信用なので色の設定は NV12(4:2:0)Rec. 709 (NTSC) で、フルレンジにしておけば良い。

ちなみに最新の iOS 18 Safari 向けだと HEVC にして HDR 向けの P010Rec. 2100 などの色設定にして HDR 配信などもできるようだ。

配信先として github.com/sean-der/OBS2Browser を選んだ。ソースを読んだ感じ手軽そうだったので。

go run github.com/sean-der/OBS2Browser@latest

これでローカルに WHIP サーバーが立ち上がるので、OBS で http://localhost/whip に向けて配信すれば良い。

仮想デスクトップとして使えるか?

遅延が体感で数百ミリ秒ほどあるので正直キツい。

遅延のボトルネックはきちんと計測はしていないが恐らく H.264 のエンコード部分であるように思うので、生のピクセルバッファをストリームするサーバーとなるアプリと、受けるクライアント側のアプリを書けば実用に耐えるかもしれない。

とはいえ遅延がもし無かったとしても画質はキツくて、内蔵ブラウザの仮想 DPI とサイズを調整して最大にした状態で、小さい文字が読めないといった具合。

10 分くらい配信を受けていると HTC VIVE Flow 側のブラウザが不安定になって止まる挙動が散見されるという問題も…。

それでも無理矢理使うなら

  • ハンドトラッキングをオフにする (誤爆しまくるし、精度がうんち)
  • 視力調整用ダイヤルを回すために付いてきた、鼻にあてるゴムパッドを使う (そうしないとキーボードが見えない)
  • HTC VIVE Flow コントローラー 99H12271-00 を買っておく (Android スマホがなくても単体で動かせるようになる)

といいかもしれない。

物理コントローラーもデッドストック品を扱っているところが PC4U というショップの ここ にだけあったので買った。投げ売りされている本体の半額もする。もう無くなるかもしれない。

物理コントローラーを買うなら詐欺サイトに注意

型番でググったら典型的な詐欺サイトが出てきた。僕自身ネットリテラシーは低くはないとは思っていたが、ググってそれっぽいサイトがいざ出てくると割と動揺することが分かった。

安易に人をバカにしてはいけないという気持ちになりました。

OBS → ブラウザで仮想デスクトップというアイデアは実用的か?

この手法なら OS に縛られないという利点はあり、 Mac/Win/Linux の画面を、手元のブラウザを搭載しているあらゆる端末で見ることができる。

配信の世界で言えば、数百ミリ秒の遅延はほぼリアルタイムと言えるかもしれないが、仮想デスクトップとして使うには厳しい。

人間は 100 ミリ秒を越えると遅延を感じる生き物だと DTM をやっていたころにあらゆる教本に書いてあった気がする。

Mac でしか試していないので分からないが、もし Windows で NVENC が使える環境なら実用的な遅延で済むかもしれないが、この辺は肌感覚がないので適当なことを言っているかもしれない。

アプリを書けばいいかもしれない

Mac 側なら ScreenCaptureKit があり、 OBS でも内部的にこれを利用している。

ピクセルバッファが取れるので、なんとかなる気はする。

HTC VIVE Flow 側は Wave SDK を使うらしい。

2025/1/14 時点で Wave SDK の最新は 6.2.0 で 2024/12 にリリースされている。

しかし HTC VIVE Flow の 2025/1/18 時点の最新版である 2.20.623.01 は Android 9 ベースで API Level 28 ということになる。

Wave SDK 6.2.0 の minSdk 指定が 29 なため動かせない。動かせる SDK としては 5.6.0 が最新となる。

https://developer.vive.com/resources/vive-wave/download/archive/5_6_0/ から SDK をダウンロードして、サンプルコードのビルドを Android Studio Ladybug で通せることまでは確認した。

現状 gradle は 8.8.0 だけど、 7 に上げる際に破壊的な変更があったらしく、その辺の設定を弄る必要はあったが ChatGPT と Gemini と GitHub Copilot が全部教えてくれたのですぐに直せた。それ以外は特に問題が出なかった。

肝心の中身は JNI で C++ で素の OpenGL をゴリゴリ弄るコードだったので、まぁ、ChatGPT なり Claude なり GitHub Copilot なり Gemini などに食わせたり質問しまくれば作れないことはないかもね、という感触。

ちなみに HTC VIVE Flow の設定画面から見える SDK のバージョンは 4.5.0 となっていたので、合わせた方が良かったかもしれない…。

締め

Vision Pro あるんだからそっちを使えよという天の声が聞こえる。