OBSの起動までコードリーディングをしたので今回は個人的に一番興味のあった仮想カメラの仕組みについて調べたことをまとめていきます。(前回リンク)

(OBS StudioのVer30、windows64用の処理を参照)

 

DirectShowを使った仮想カメラの概要

OBSでは仮想カメラ機能があり、ZOOMやTeams側でusbカメラのように認識させて映像を流す事ができます。

この機能はOBS version 26.0.0から標準で入っていて、それ以前のバージョンではobs-virtual-camというプラグインのプロジェクトで提供されていました。

この外部プラグインについての解説は見つかったのですが、標準機能になってからのシステム概要について詳細な記事が無かったので公開します。

DirectShowを使った仮想カメラの作り方が知りたい場合は下記の記事で詳細な解説や実装が公開されています。

 

OBS v30の仮想カメラ | システム概要図

OBSが生成するモジュールの詳細は:OBS Studio コードリーティング日記 #5

図のシステムを3ステップで説明すると下記のようになります。

  1. OBSのメイン機能側でwin-dshow.dllをプラグインとして扱う。(startやupdate等を管理)
  2. OBSの映像(フレーム)を.dllファイルが取得し共有メモリに書き込む。
  3. 共有メモリに書き込まれた映像(フレーム)を仮想カメラとして動作しているobs-virtualcam-module.dllが読み込み、対象のアプリへカメラとして映像を配信。

仮想カメラ(obs-virtualcam-module.dll)はインストール時にvirtualcam-install.batというファイルでレジストリに登録されます。(OBSをアンインストールする際はレジストリの削除を忘れずに。)

よって、OBSが起動していなくてもZOOMやTeamsからはOBSの仮想カメラを選択することができますが、その場合は上図のplaceholder.pngという画像が流されます。

仮想カメラ(obs-virtualcam-module.dll)が使われているかどうかはコマンドプロンプトでtasklistコマンドを打つとカメラを使用しているアプリの確認出来ます。

C:\Users>tasklist /m obs-virtualcam-module64.dll

イメージ名                     PID モジュール
========================= ======== ============================================
teams.exe                  31276 obs-virtualcam-module64.dll

 

OBS v30の仮想カメラ | プロジェクト構成

ソリューションファイルを開くと下記のようなプロジェクト構成になっています。

ビルドを実行するとobs-virtualcam-module.dllとwin-dshow.dllの2ファイルが生成。

どちらのdllも参照モジュールとしてlibdshowcaptureを読み込んでいますが、このプロジェクトは非参照のみで共有ファイルは生成されません。

下図はwin-dshowプラグイン内の各ファイルの役割を大まかにまとめたもの。

今回はとりあえずここまで。

sam

sam

流山おおたかの森Techブログの管理人です。 お仕事のご依頼などはmail or Twitter[https://twitter.com/sam_sumario]で連絡頂けると反応出来ます。
Previous post rinnaとdeepspeedをwindows環境で動かす : 音声認識速度比較
Next post FastSAMで動画をマスク表示する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です