(このblog投稿は12月23日に書かれたものです。理由はこちらを参照)

 

恐らく今回の記事に関しては誰得なのかサッパリわからないレベルですが、稀なケースでしょうというものです。タイトル通り”RemoteFX USB”と”リモートサウンド”と”Splashtop Remote Desktop”の3者が関連する微妙な疑問です。

RemoteFXを使い始めて1.5ヶ月ほどですが、幾つかの問題のうちの一つにSplashtop Remote接続時にサウンドが再生されないというものがあります。なぜ再生されないか、というのは一言でいえばHyper-V上のゲストOSに対しては仮想デバイスとしてのサウンドボードが割り当たらないのでSplashtop Remoteがフックするオーディオデバイスが存在しないことを意味します。

この裏付け確認として実験してみました。

  • ホストOSの物理デバイスに”USB Audio”デバイスを接続
  • ホストOSよりゲストデバイスに”RemoteFX USB”を通じて”USB Audio”を転送 (但し、サウンドはリモート側で再生する)
  • ゲストOSの再生デバイスを”USB Audio”を選択する
  • 上記の状態で、VPN経由をしたiPad2より”Splashtop Remote Desktop”でゲストOSに接続する

この状態であれば”Splashtop Streamer”が”USB Audio”のオーディオデバイスをフックすることでiPad2上の”Slpashtop Remote Desktop”でもサウンドが再生されるわけです。しかし、(ホスト・ゲストOSが同一の物理PC上で接続する限り通常はあり得ないが)ホストOSからの”Remote Desktop”が切断される=”RemoteFX USB”が切断されるとオーディオデバイスも当然消えます。結果、再生できないと。

もちろん、Hyper-Vをこんな形で使おうなどというユーザが極稀であることは認識していますが、仮に今回のオーディオデバイス以外でもホストOSに接続した物理デバイスをRDPセッションが存在しない間も接続しておきたい、ということはあるのではないかなと、思ったり思ったり。ということで、まとめた結果”Hyper-V 2.1 permanently assign Guest OS”あたりでググったりしてみましたが結果は実りませんでした。それどころか、USBのみならずPCIをゲストOSにマウントしたいとか・・・。ここまでくると何でもありですね。別の仮想化環境として”VMWare ESX”がありますがこれならできるとかできないとか、でも製品、仮想化を行うための物理環境が共に高くて手を出せないです。

さて、文字ではいささか退屈なので図でまとめるとこんな感じ。まずはネットワークとしての全体像です。すんごい適当ですが・・・。

rdp71

 

次に、”RemoteFX USB”でオーディオデバイスを転送していない状態でのデバイスマネージャ画面です。RDPで接続していますので、リモートサウンドが使える=サウンドの再生は可能ですが、デバイスとしてのオーディオデバイスは存在していません。

devmgmt

 

そして、玄人志向から数年前に発売されていたUSBオーディオをホストOSに刺して”RemoteFX USB”を経由して接続する画面。”USB Audio”として認識され、ディスクデバイスのみならず転送できるところが魅力ですね。

rdp71_usb

 

最後に上記の”USB Audio”を有効にしてゲストOSに接続した状態。もちろん、この状態が”Hyper-V 2.1上のゲストOSに対してSlpashtop Remote Desktopから接続を行ってもサウンドがリモート側で流れる”という環境になります。

devmgmt_audio

※ 画像がTypoちゃったけど、直すの面倒だから許して・・・。”RemoteFX USB”です。

 

現状では”Slpashtop Streamer”がどのレイヤー(API Hook, Class Driver, etc…)をフックしているのかわかりません。ただ、現状ではデバイスマネージャ上のオーディオデバイスが存在していないとゲスト側でサウンドが鳴らない、というのは確かというだけです。

 

ということは・・・、物理デバイスを要しない”(仮想の)何もしない再生サウンドデバイスドライバ”を作ってあげれば”Slpashtop Streamer”がフックするインターフェースを提供できるのでは!!!! ということになるのかな、妄想レベルでは。確かにDDKでもWDKでもVideoCapという仮想のビデオキャプチャデバイスをインストールするサンプルがありましたね。また・・・・DDKですか・・・?、もう2年以上触ってないので勘弁してください・・・・。

※ “仮想の”というのをカッコ付で書いた理由は、確かOSレイヤからみて物理デバイスが存在するかどうかは関係なかったはずなので。言い換えれば、OSレイヤからしてみればドライバとして認識するかどうかが重要であって、ドライバが物理デバイスにI/Oを発行するか、は関知しなかった・・・・ハズ・・・。間違っていたらごめんなさい。記事のまとめが私の妄想ワールドで終わるのはこのblogの恒例行事なので許してください。