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

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

小江戸らぐ 2月のオフな集まり(第223回) – connpass

https://nitter.matoken.org/search?f=tweets&q=%23koedolug+OR+%22%E5%B0%8F%E6%B1%9F%E6%88%B8%E3%82%89%E3%81%90%22&since=2021-02-12&until=2021-02-14&near=

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

Puppy Slacko 7.0を日本語化してみた

古いMac miniにDebian/sidを入れてみた

LUnixはじめました3「Fuzixを起動する」

MAMORIOを改造する

エンジニアがBOOTHのサイトを作ってみた

DroidCamでもスマホをWebCamにする

今更Anthyを試してみた

へんな液晶で苦労する話

gPhoto2でカメラ制御

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

小江戸らぐ 3月のオフな集まり(第224回) – connpass

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

DroidCamでもスマホをWebCamにする

USB port死にかけ?

スマホや2.5インチHDDを繋ぐと勝手に切れてしまう

スマホは数秒毎に充電ランプが付いたり消えたり

Webcamがビデオチャット中に使えなくなったり

自己給電の3.5インチHDDは調子がいいような?

しばらく放置したり再起動すると直ったり?

USB周りのリセッタブルヒューズとかコンデンサとかが死にかけている?

正攻法

端末買い替え

USB portを増設

PCI Express/PC Card/Express Card

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

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

「ネットワーク経由でUSB共有」 鹿児島Linux勉強会 2021.01(オンライン開催)　2021-01-31

+--------+ +------------+ +---------------------+
| 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へ

!

「スマートフォンをLinuxPCのウェブカメラとして使う Iriun Webcam」 小江戸らぐ 2020-04で発表

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

それから約10ヶ月

Iriun Webcamの問題

Debianパッケージがsidで依存関係が解決できなくなっている

手動で依存関係を解決してパッケージを展開してバイナリを実行することは可能

Video のみ(Audio機能がない)

closed source

問い合わせ窓口が見当たらない

DroidCam

Dev47Apps

Linux | Dev47Apps

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)

DroidCam Clientアプリとアンインストールスクリプト( /opt/droidcam-uninstall )導入

droidcam module DKMS設定 ※オプション

droidcam module設定 ※オプション

サウンドモジュール設定(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)

モジュール自動読み込み

ビデオ形式を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"

モジュール自動読み込み

解像度，ビデオデバイス番号，ラベル指定

ビデオデバイス番号は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

SecureBoot – Debian Wiki

Android側設定

Google Play Storeからアプリを導入
Google Play での Dev47Apps の Android アプリ

Androidアプリ起動

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

PC側でdroidcam起動

$ droidcam

カメラの操作も可能 :)

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

以下のISSUEが参考になる

Sound Support follow up · Issue #60 · dev47apps/droidcam

!

+--------+ +------------+ +------------+
|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対応もうすぐ

OBS Studio Merges Its EGL-Wayland Code To Natively Support Wayland – Phoronix

DroidCam OBS

DroidCamをOBS Studioで利用する場合はOBS StudioにDroidCam OBS Pluginを導入して，Android側にDroidCam OBSを導入すると便利

DroidCam OBS by Dev47Apps OBS Studio Plugin

DroidCam OBS – Google Play のアプリ

!

+------------+ +------------+ +------------+
|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での比較)

スマートフォンで直に参加という手も……でも画面小さいかな