AndroidのカメラをPCでWEBカメラとして利用できるアプリケーションとしてiVCamやDroidCamがある。
その中でもDroidCamはLinux版クライアントも存在するが導入方法がやや難解であったため、今回はそれについて説明しようと思う。
環境
- Manjaro Linux 18.04 Awesome Edition
Arch系Linuxを例に説明するが、他のLinuxディストリビューションでも同等のパッケージがあると思われる。
導入例
sudo pacman -S linux[version]-headers// カーネルヘッダーファイルを導入yay -S droidcam// DroidCamをビルドyay -S v4l2loopback-dc-dkms// DroidCam用仮想カメラモジュールをビルドsudo depmod -a// カーネルモジュールの依存関係解決sudo modprobe v4l2loopback_dc exclusive_caps=1// 仮想カメラを作成
詳細解説
導入例で理解できた方は以下を読まなくても大丈夫
カーネルヘッダーファイルのインストール
v4l2loopbackモジュールをビルドするためにカーネルのヘッダーファイルが必要となる。この前準備なしにv4l2loopbackを導入しようとするとビルドに失敗する。またdroidcam導入時にもこのパッケージのインストールを促されるが、適切なバージョンを自動指定してくれないので注意が必要である。
LinuxカーネルのバージョンはOSの設定マネージャーやuname -rコマンドから確認できる。
カーネルヘッダーのパッケージ名はlinux[version]-headersとなっているので対応するものをインストールしよう。
筆者の場合、uname -rでの出力が4.19.119-1-MANJAROであったためlinux419-headersを導入した。
仮想カメラデバイスの作成
modprobeコマンドで作成ができる。
sudo modprobe v4l2loopback_dc exclusive_caps=1
v4l2loopback-dc-dkmsはv4l2loopbackという仮想カメラパッケージのDroidCam用フォークである。
パッケージ名と異なりモジュール名はv4l2loopback_dcとアンダースコアであることに注意。※補足:スコア, アンダースコアを識別しない可能性あり(要するにどちらでも良い)
exclusive_caps=1 オプションを付与することでChrome等でも認識するようになるらしい。
作成されたカメラデバイスは/dev/videoXとなっている。ls /dev/video*でカメラデバイスの存在を確認できるだろう。またデバイス情報はlv4l2-ctl --all -d /dev/videoXで調べられる。
トラブルシューティング
v4l2loopback_dcが見つからず追加できない
以下のようなエラーが発生し仮想カメラデバイスを追加できないことがある。
modprobe: FATAL: Module v4l2loop not found in directory /lib/modules/4.19.118-1-MANJARO
これはLinuxの稼働中にアップデートが行われる等してuname -rで確認できるカーネルバージョンと実際に使用しているカーネルバージョンが異なることが原因となる可能性がある。
modprobeで参照するカーネルバージョンを更新するために一度再起動することで解決する。
reboot
またカーネルモジュールの依存関係が処理できていない可能性もあるため、再度sudo depmod -aを実行しよう。
仮想ビデオデバイスを削除したい
カーネルモジュールの追加は
sudo modprobe [module-name] [option]
で行ったが、モジュールの削除はファイル削除と同様に
sudo modprobe -r [module-name]
と-rオプションを付与することで実現できる。
あとがき
前の記事でAndroidカメラを擬似的にPCのWebカメラで使うために実装を行った。

しかしDroidCamはADBにも対応していることから低遅延の通信が可能であることが分かったため移行した次第である。
Androidアプリの無料版では最大480pで広告が表示される。有料版では720pでの表示が可能であり、価格も500円とお手頃なので使用頻度が高くなったら購入を検討したい。

コメント