読者です 読者をやめる 読者になる 読者になる

Kikuchy's Second Memory

つくる楽しさをもっと伝えたい。プログラムを書いていて、わからなかったこと・気付いた事を書き留めています。

VirtualBoxのゲストOSからホストのWebカメラを使う

VirtualBox 4.3から、Webカメラを仮想化して利用する機能が追加されました。
何が嬉しいかと言うと、MacBookに付いているFaceTimeカメラなどのホストOSが抱えているWebカメラをゲストOSからも使用できるようになることです。
このおかげで、ゲストOSでSkypeビデオチャットなどができるようになる、という訳です。


ところがこの機能は、コマンドラインのツールを叩かないと使えないようです。

環境

手順

ホスト側の作業です。

まずはVirtualBoxにExtension Packを導入します。
VirtualBoxのサイトからダウンロードして来てください。

f:id:kikuchy:20140223092336j:plain

ダウンロードしたら、VirtualBoxの環境設定画面からExtensionをインストールします。

f:id:kikuchy:20140223092548p:plain

ここで一度、Webカメラを導入したいゲストOSを起動します。

f:id:kikuchy:20140223092840p:plain

再びホスト側の作業です。
VirtualBoxをインストールすると、VBoxManageコマンドが使えるようになっているかと思います。
ターミナルからVBoxManage list runningvmsVBoxManage list webcamsを打って、起動中の仮想マシン使用するWebカメラパスを確認します。

$ VBoxManage list runningvms
"Windows 8.1 Enterprise" {963cd60e-239b-45c2-a581-96a36f641663}
$ VBoxManage list webcams
Video Input Devices: 1
.1 "FaceTime HD カメラ"
CC23245B57EF9T9C9

"Windows 8.1 Enterprise"が、目的のゲストOSが動いている起動中の仮想マシン名、CC23245B57EF9T9C9が使用するWebカメラパスです。

Webカメラ仮想マシンにアタッチします。

$ VBoxManage controlvm "Windows 8.1 Enterprise" webcam attach CC23245B57EF9T9C9

仮想マシン名とWebカメラパスは自分の環境のものに置き換えてください。
コマンドを打った後、何も出なければ成功です。
もし以下のようなエラーが出たら、ゲストOSをシャットダウンし、VirtualBoxを再起動させてからもう一度ゲストOSを立ち上げてから試してみてください。
(一度それでハマってしまいました)

VBoxManage: error: Attach emulated USB webcam (VERR_PDM_NO_USBPROXY)
VBoxManage: error: Details: code VBOX_E_IPRT_ERROR (0x80bb0005), component Console, interface IConsole, callee nsISupports
VBoxManage: error: Context: "WebcamAttach(path.raw(), settings.raw())" at line 1448 of file VBoxManageControlVM.cpp

VirtualBoxの画面に戻ると、DevicesのメニューにWebcamsが追加されていて、先ほどアタッチしたWebカメラが選択できる(もしくは選択されている)と思います。
選択されていなかったら選択してください。

f:id:kikuchy:20140223094240j:plain

これでゲストのWindowsからもWebカメラが使えます。

f:id:kikuchy:20140223094638p:plain

標準で入っている「カメラ」アプリの様子。
本日はDMTCxMicrosoftコラボハッカソンで技術メンターをさせていただいてました。

これでカメラを使ったアプリのテストも、Lyncでのビデオ会議も仮想マシンでできる!!

なおデタッチは

$ VBoxManage controlvm "Windows 8.1 Enterprise" webcam detach CC23245B57EF9T9C9

でできます。

広告を非表示にする