小江戸らぐ 2月のオフな集まり(第223回)への参加と「DroidCamでもスマホをWebCamにする」を発表

2021-02-13(土)に小江戸らぐ 2月のオフな集まり(第223回)に参加しました.開催はZoom.usを利用したオンライン開催で参加者は20人ほどでした.

次のような発表がありました.

次回の開催は03/13(土)でオンライン開催です.

以下はその時発表したスライドをhtmlで書き出したものです.

DroidCamでもスマホをWebCamにする

USB port死にかけ?

  • スマホや2.5インチHDDを繋ぐと勝手に切れてしまう
  • スマホは数秒毎に充電ランプが付いたり消えたり
  • Webcamがビデオチャット中に使えなくなったり
  • 自己給電の3.5インチHDDは調子がいいような?
  • しばらく放置したり再起動すると直ったり?
  • USB周りのリセッタブルヒューズとかコンデンサとかが死にかけている?

正攻法

  • 端末買い替え
  • USB portを増設
    • PCI Express/PC Card/Express Card

懐が寂しい&増設できないマシン(◞‸◟)

そういえばネットワーク経由でUSBが共有できたはず

+--------+        +------------+       +---------------------+
| WebCam +------->+ USB HostPC |       | USB ClientPC        |
| C270   |  USB   |------------+       +---------------------+
+--------+        | USB/IP     |------>| USB/IP              |
                  +------------+ 1GbE  +--+------------------|
                                       |  +-->UVC/UAC        |
                                       +-------+-------------|
                                       |       +-->Video APP |
                                       +---------------------+

USB/IP少し試してみて

  • 設定してしまえばローカルとほとんど変わらない使用感
  • 別マシンが必要
  • UVCを使うならそこそこ太い回線が必要(1Gbpsあれば安心)

帯域がもったいない,エンコードするとずっと細い回線で高画質にできるよね
バックアップもほしい

スマートフォンの利用

スマートフォンを有線,ネットワーク経由でWebCamとして利用

  • Iriun Webcam
    • Android/iOS → Linux/macOS/Windowsへ
  • DroidCam
    • Android/iOS → Linux/Windowsへ

!

このときはDroidCamは専用kernel moduleが必要でめんどくさそうなので標準moduleが利用できるIriun Webcamを選択

それから約10ヶ月

Iriun Webcamの問題

  • Debianパッケージがsidで依存関係が解決できなくなっている
    • 手動で依存関係を解決してパッケージを展開してバイナリを実行することは可能
  • Video のみ(Audio機能がない)
  • closed source
  • 問い合わせ窓口が見当たらない

DroidCam

  • Android/iOS → Linux/Windowsへ共有
  • Video/Audio対応
  • 専用moduleが必要だったがv1.6+で通常のv4l2loopbackが利用できるようになった
  • 専用モジュールもDKMS使えばそう不便でもない?

導入

sourceを入手してインストールスクリプトを実行する(※amd64以外は要セルフビルド)

$ git clone https://github.com/dev47apps/droidcam/
$ cd droidcam
$ sudo ./install-client (1)
$ sudo ./install-dkms (2)
$ sudo ./install-video (3)
$ sudo ./install-sound (4)
  1. DroidCam Clientアプリとアンインストールスクリプト( /opt/droidcam-uninstall )導入
  2. droidcam module DKMS設定 ※オプション
  3. droidcam module設定 ※オプション
  4. サウンドモジュール設定(snd-aloop module自動読み込み) ※オプション

v4l2loopback利用時

$ cat /etc/modules-load.d/v4l2loopback.conf
v4l2loopback (1)
$ cat /etc/modprobe.d/v4l2loopback.conf
options v4l2loopback exclusive_caps=1 video_nr=6,7,8 card_label="Virtual Camera,v4l2loopback-7,v4l2loopback-8" (2)
  1. モジュール自動読み込み
  2. ビデオ形式をGStreamer caps指定,複数デバイス対応(オプション)

DroidCam v4l2loopback利用時

$ cat /etc/modules-load.d/droidcam.conf (1)
videodev
v4l2loopback_dc
$ cat /etc/modprobe.d/droidcam.conf (2)
options v4l2loopback_dc width=1920 height=1080 video_nr=9 card_label="DroidCam"
  1. モジュール自動読み込み
  2. 解像度,ビデオデバイス番号,ラベル指定

ビデオデバイス番号はv4l2loopbackより大きくするとOBS利用時にはまらない

SecureBoot

MOKを作成して署名しないとモジュールが利用できない
$ sudo modprobe -v  v4l2loopback
insmod /lib/modules/5.10.0-3-amd64/updates/dkms/v4l2loopback.ko exclusive_caps=1 video_nr=6,7,8 card_label="Virtual Camera,v4l2loopback-7,v4l2loopback-8"
modprobe: ERROR: could not insert 'v4l2loopback': Operation not permitted

Android側設定

koedo2020102 Dev47Apps

Androidアプリ起動

  • カメラ,マイク切り替えや設定あり

koedo2020102 DroidCam01

PC側でdroidcam起動

$ droidcam

koedo2020102 DroidCam GUI 01

カメラの操作も可能 :)

koedo2020102 DroidCam GUI 02

cliもある

$ droidcam-cli
Usage:
 droidcam-cli -l <port>
   Listen on 'port' for connections (video only)

 droidcam-cli [options] <ip> <port>
   Connect via ip

 droidcam-cli [options] adb <port>
   Connect via adb to Android device

 droidcam-cli [options] ios <port>
   Connect via usbmuxd to iDevice

Options:
 -a          Enable Audio
 -v          Enable Video
             (only -v by default)

 -size=WxH   Specify video size (when using the regular v4l2loopback module)
             Ex: 640x480, 1280x720, 1920x1080

Enter '?' for list of commands while streaming.

sound

  • Linux側でDroidCamを起動後, snd_aloop moduleとPulseAudioを紐付ける
$ pacmd load-module module-alsa-source device=hw:Loopback,1,1 \
        source_properties=device.description=droidcam_audio

!

+--------+        +------------+                 +------------+
|Android +------->+ DdoidCam   +---------------->+ Video APP  |
|DroidCam|  WiFi  +---+--------+  v4l2loopback   +------------+
+-----+--+   USB      |            snd_aloop     | Zoom.us    |
      ^               |                          | Discord    |
      +---------------+                          | Jitsi Meet |
        Camera Coltrole                          | :          |
                                                 +------------+

OBS Studio update

  • 26.1からLinux/macOSに仮想カメラ機能が標準機能に(v4l2loopback利用)
    • ディストリビューションのバージョンが古い場合snapで導入が便利
    • droidcamのmoduleと競合して不具合が起こることがあるのでその場合はdroidcamのデバイス番号を後ろに
    • ※以前からある仮想カメラプラグインのobs-v4l2sinkは出力デバイスを選択できる
  • Wayland対応もうすぐ

DroidCam OBS

!

+------------+        +------------+                   +------------+
|Android     +------->+ OBS Studio +------------------>+ Video APP  |
|DroidCam OBS|  WiFi  |------------+   v4l2loopback    +------------+
+------------+   USB  | text       |    snd_aloop      | Zoom.us    |
                      | Picture    |                   | Discord    |
                      | Video      |                   | Jitsi Meet |
                      | Desktop    |                   | :          |
                      | Camera     |                   +------------+
                      | <Filters>  |
                      +------------+

まとめ

  • USBポートを使わなくても USB/IP や スマートフォンでWebCam & Audio を利用できるようになった
  • どちらも毎回少し設定が必要なのが面倒
  • 安定度はUSB/IPの方が安定している
  • 画質はスマートフォンの方が上(Logitch C270とRakuten miniでの比較)
  • スマートフォンで直に参加という手も……でも画面小さいかな