SKYDIV Desktop Client で実装されている機能(カメラリダイレクト)の仕組みについての技術紹介です。
リダイレクトについての基本的な内容は、前回の記事をご参照ください。
前回の記事
前回は、独自方式の概要、背景、メリットなどについて記載していました。
今回は、カメラリダイレクトの仕組みについて、もう少し詳しく記載したいと思います。
カメラリダイレクトの流れ
全体像は下記のようになっています。
図中の数字は以下を意味しています。
① 画像データのキャプチャ処理
② 画像データの変換・フレームデータを作成
③ フレームデータを送信
④ フレームデータを受信して仮想カメラにインプット
⑤ 仮想カメラからOSに対してフレームデータを返却
各工程の解説
クライアントPC側
① 画像データのキャプチャ処理
リモート接続先で仮想カメラが動作中になったことが検出されると、接続元のクライアントに通知されます。
それを受けて、SKYDIVランチャーが接続元PC上のカメラを起動し、画像の取得を開始します。
以降、実際のカメラデータのリダイレクトが開始されます。
② 画像データの変換・フレームデータを作成
フレームデータとは、動画を構成する個々の静止画像データのことを指します。
各フレームは、特定の時点での画面の情報を持ち、これを連続してつなげると動画になります。
これは、以下のようなイメージです。
また、フレームには、マスターフレーム(完全な一枚の画像)と差分フレーム(前回との変化分だけ)があり、 変化が大きい部分だけを抽出して差分フレームを構築するなど、なるべく送信データが小さくなるような工夫がされています。 これは例えるなら以下のようなイメージです。
その他、SKYDIVの設定に従って、設定されている画質への変換、設定されているフレームレートでの送信、設定されている転送量上限に抑えるための調整(画質を下げる・フレームレートを下げるなど)が行われます。
③ フレームデータを送信
クライアント端末がつながっているリモート接続先にカメラのフレームデータを送信します。
リモートデスクトップ(RDP)の通信に任意のデータを流す仕組み(仮想チャネル)を用いて、データを送信します。
リモート接続先
④ フレームデータを受信して仮想カメラにインプット
仮想チャネルに通した通信は、リモートデスクトップサービスを経由してSKYDIVの仮想デバイス管理に届き、仮想デバイスに受け渡されます。
⑤ 仮想カメラからOSに対してフレームデータを返却
デバイスが動作中になっていると、システムからフレームデータを要求する呼び出しが定期的に要求されるようになります。
これに対して、画像データ(静止画)を返すことを続けていると、ユーザーの見た目にはカメラが動画を出力している状態になります。
まとめ
全体の流れ、各工程での処理を簡単に記載いたしましたが、これに加えて、各コンポーネントの状態管理や通信コネクションの管理なども必要となります。
また、仮想デバイス周りは、デバイスドライバに関する深い知識が必要になります。
一人で作ると難しいのでチーム力が必要ですね。
以上、SKYDIV独自方式カメラリダイレクトの仕組みについての技術紹介でした。