Androidアプリの画面をsnap版のscrcpyでビデオデバイスに流し込もうとしたら少しハマったのでメモしておきます.
タグ: v4l2loopback
v4l2loopbackモジュールで作られるビデオデバイスへの名前の付け方
v4l2loopback
moduleを利用して仮想カメラなどを利用しています.
このモジュールを呼び出すときにオプションを指定して複数のデバイスにしたり,それぞれにデバイスに名前をつけたり出来ます.
If you need several independent loopback devices, you can pass the “devices” option, when loading the module; e.g.
# modprobe v4l2loopback devices=4
Will give you 4 loopback devices (e.g. /dev/video1 … /dev/video5)You can also specify the device IDs manually; e.g.
# modprobe v4l2loopback video_nr=3,4,7
Will create 3 devices (/dev/video3, /dev/video4 & /dev/video7)# modprobe v4l2loopback video_nr=3,4,7 card_label=”device number 3″,”the number four”,”the last one”
Will create 3 devices with the card names passed as the second parameter:/dev/video3 → device number 3
/dev/video4 → the number four
/dev/video7 → the last one
お手本通りモジュールを呼び出すと,
$ sudo modprobe v4l2loopback video_nr=3,4,7 card_label="device number 3","the number four","the last one"
想定通りに設定されました.(最後のIntegrated Cameraは内蔵カメラでこのモジュールとは無関係)
$ v4l2-ctl --list-devices device number 3" (platform:v4l2loopback-000): /dev/video3 "the number four" (platform:v4l2loopback-001): /dev/video4 "the last one (platform:v4l2loopback-002): /dev/video7 Integrated Camera: Integrated C (usb-0000:00:1a.0-1.6): /dev/video0 /dev/video1 /dev/media0
しかしこの設定を永続化しようと,
/etc/modprobe.d/v4l2loopback.conf
というファイルを用意してこの設定を書いて呼び出すとおかしなことになります.
$ sudo rmmod v4l2loopback (1) $ echo 'options v4l2loopback video_nr=3,4,7 card_label="device number 3","the number four","the last one"' | sudo tee /etc/modprobe.d/v4l2loopback.conf (2) options v4l2loopback video_nr=3,4,7 card_label="device number 3","the number four","the last one" $ sudo modprobe -v v4l2loopback (3) insmod /lib/modules/5.10.0-1-amd64/updates/dkms/v4l2loopback.ko video_nr=3,4,7 card_label="device number 3","the number four","the last one" $ v4l2-ctl --list-devices | grep v4l2loopback -A1 (4) device number 3" (platform:v4l2loopback-000): /dev/video3 -- "the number four" (platform:v4l2loopback-001): /dev/video4 -- "the last one (platform:v4l2loopback-002): /dev/video7
- モジュールのアンロード
- 設定ファイルへ書き込み
- モジュールの再読込
- デバイス名の確認
ダブルクオーテーションの扱いが変わってしまうようです.更に名前自体にダブルクオーテーションが含まれてしまいます.
とりあえず全体を1セットのダブルクオーテーションで囲むと大丈夫なようです.
$ echo 'options v4l2loopback video_nr=3,4,7 card_label="device number 3,the number four,the last one"' | sudo tee /etc/modprobe.d/v4l2loopback.conf options v4l2loopback video_nr=3,4,7 card_label="device number 3,the number four,the last one" $ sudo modprobe -v v4l2loopback insmod /lib/modules/5.10.0-1-amd64/updates/dkms/v4l2loopback.ko video_nr=3,4,7 card_label="device number 3,the number four,the last one" $ v4l2-ctl --list-devices | grep v4l2loopback -A1 device number 3 (platform:v4l2loopback-000): /dev/video3 -- the number four (platform:v4l2loopback-001): /dev/video4 -- the last one (platform:v4l2loopback-002): /dev/video7
ちなみにダブルクオーテーションなしだとこうなりました.
$ sudo modprobe -v v4l2loopback insmod /lib/modules/5.10.0-1-amd64/updates/dkms/v4l2loopback.ko video_nr=3,4,7 card_label=device number 3,the number four,the last one $ v4l2-ctl --list-devices | grep v4l2loopback -A1 device (platform:v4l2loopback-000): /dev/video3 -- Dummy video device (0x0001) (platform:v4l2loopback-001): /dev/video4 -- Dummy video device (0x0002) (platform:v4l2loopback-002): /dev/video7
最近リリースされた OBS Studio 26.1でLinux版, macOS版にも仮想カメラ機能が入りました.
これも v4l2loopback
を利用しているのですが,ダブルクオーテーションが含まれる場合うまく動かないようです.
$ dpkg-query -W v4l2loopback-* v4l-utils v4l-utils 1.20.0-2 v4l2loopback-dkms 0.12.5-1 v4l2loopback-modules v4l2loopback-utils 0.12.5-1 $ lsb_release -dr Description: Debian GNU/Linux bullseye/sid Release: unstable $ uname -mv #1 SMP Debian 5.10.4-1 (2020-12-31) x86_64