小江戸らぐ 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での比較)
  • スマートフォンで直に参加という手も……でも画面小さいかな

コメントを残す

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

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)