ユーザ用ツール

サイト用ツール


サイドバー

最新の10件
一覧
linux:virtual_camera

仮想カメラ

OBS Studio

システム要件

Linux/Unix
OpenGL 3.3 compatible GPUX window system

非対応環境で起動すると,

$ glxinfo | grep 'version'
server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
    Max core profile version: 0.0
    Max compat profile version: 2.1
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 2.0
OpenGL version string: 2.1 Mesa 20.2.6
OpenGL shading language version string: 1.20
OpenGL ES profile version string: OpenGL ES 2.0 Mesa 20.2.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16

このようなメッセージが出力されて起動しない

info: Initializing OpenGL...
error: X Error: GLXBadFBConfig, Major opcode: 152, Minor opcode: 34, Serial: 29
error: Failed to create OpenGL context.
error: Failed to create context!
error: device_create (GL) failed
error: Failed to initialize video.  Your GPU may not be supported, or your graphics drivers may need to be updated.

OBS Studio(26.1+)の仮想カメラ機能

Windows版は26で,Linux, macOSは26.1より標準で仮想カメラ機能が組み込まれた.

Linuxの場合v4l2loopbackを利用.モジュールが読み込まれていたらそれを使い,読み込まれていない場合polkit経由で認証して読み込む.

obs-v4l2sink(plugin)

このプラグイン導入後, 「ツール」 → 「V4L2 Video Output」から出力デバイスを選択して共有できる.

前もってv4l2loopback moduleをexclusive_caps=1付きで読み込んでおく必要がある.

OBS-Studioの標準機能に仮想カメラ機能が入ったけどデバイスが選択できないようなのでその分はこちらにメリットがありそう.

NDI(未調査)

Iriun Webcam

スマートフォン(iOS/Android)をPC(Windows/MacOS/Linux)のウェブカメラとして利用できるようにするもの.詳細はサブページへ

DroidCam Wireless Webcam

スマートフォン(Android/iOS)をPC(Windows/Linux)のウェブカメラとして利用できるようにするもの.

要専用kernel moduleだったが,v1.6から標準のv4l2loopbackでも動作するようになった

Added support for the regular v4l2loopback module ( Original pr #105 )

https://github.com/dev47apps/droidcam/releases/tag/v1.6

IP cameraとしても使える

オートフォーカス,ズーム,LEDのOn/Offがリモートで可能

https://twitter.com/matoken1/status/1349717359980802048

Kernel module設定例

v4l2loopback_dc 若しくはv1.6から汎用的な v4l2loopback も利用可能になった.

v4l2loopback_dcinstall-dkms で, v4l2loopback はディストリビューションパッケージから導入できる

  • v4l2loopback_dc
$ cd droidcam
$ sudo ./install-dkms 1920 1080

以下のファイルが作られる.

  • /etc/modules-load.d/droidcam.conf モジュール自動ロード
videodev
v4l2loopback_dc
  • /etc/modprobe.d/droidcam.conf オプション
options v4l2loopback_dc width=1920 height=1080 video_nr=9 card_label="DroidCam"

video_nr でデバイス番号を指定できる.この番号はOSB Studio 26.1の仮想カメラの v4l2loopback より大きな数字にしておくこと.(OBS Studioがv4l2loopback_dcとv4l2loopback両方のうち一番小さなデバイスを掴んでしまうため)

v4l2loopback の場合.

導入

$ sudo apt install v4l2loopback-dkms v4l2loopback-utils
  • /etc/modules-load.d/v4l2loopback.conf モジュール自動読み込み設定
v4l2loopback
  • /etc/modprobe.d/v4l2loopback.conf オプション
options v4l2loopback exclusive_caps=1 video_nr=6,7,8 card_label="Virtual Camera,v4l2loopback-7,v4l2loopback-8"

v4l2loopbackv4l2loopback_dc があるが,デバイスを指定できないので面倒でなければ v4l2loopback_dc を導入したほうがいいかもしれない.

サウンドの設定

snd-aloop モジュールが必要.インストールスクリプトで snd-aloop の自動読み込みを設定してくれる.

$ ./install-sound

若しくは手動読み込み

$ sudo modprobe -v snd-aloop

Droidcamを実行した状態で以下のコマンドを実行して snd-aloop のデバイスと紐付ける.

$ pacmd load-module module-alsa-source device=hw:Loopback,1,1 source_properties=device.description=droidcam_a
udio

v4l2loopback

$ sudo apt install v4l2loopback-utils v4l2loopback-dkms
$ sudo modprobe -v v4l2loopback
insmod /lib/modules/5.4.0-4-amd64/updates/dkms/v4l2loopback.ko 

devices=n を指定することで複数のデバイスが作れる

$ ls -la /dev/video*
crw-rw----+ 1 root video 81, 0 Mar 21 17:31 /dev/video0
crw-rw----+ 1 root video 81, 1 Mar 21 17:31 /dev/video1
$ sudo modprobe -v v4l2loopback devices=3
insmod /lib/modules/5.4.0-4-amd64/updates/dkms/v4l2loopback.ko devices=3
$ ls -la /dev/video*
crw-rw----+ 1 root video 81, 0 Mar 21 17:31 /dev/video0
crw-rw----+ 1 root video 81, 1 Mar 21 17:31 /dev/video1
crw-rw----+ 1 root video 81, 2 Mar 22 22:31 /dev/video2
crw-rw----+ 1 root video 81, 3 Mar 22 22:31 /dev/video3
crw-rw----+ 1 root video 81, 4 Mar 22 22:31 /dev/video4

video_nr=n,n,n... で指定した番号のデバイスを作成できる

$ ls -la /dev/video*
crw-rw----+ 1 root video 81, 0 Mar 21 17:31 /dev/video0
crw-rw----+ 1 root video 81, 1 Mar 21 17:31 /dev/video1
$ sudo modprobe -v v4l2loopback video_nr=3,5,7
insmod /lib/modules/5.4.0-4-amd64/updates/dkms/v4l2loopback.ko video_nr=3,5,7
$ ls -l /dev/video*
crw-rw----+ 1 root video 81, 0 Mar 21 17:31 /dev/video0
crw-rw----+ 1 root video 81, 1 Mar 21 17:31 /dev/video1
crw-rw----+ 1 root video 81, 2 Mar 22 22:33 /dev/video3
crw-rw----+ 1 root video 81, 3 Mar 22 22:33 /dev/video5
crw-rw----+ 1 root video 81, 4 Mar 22 22:33 /dev/video7

card_label="hoge" で名前が付けられる

$ sudo modprobe -v v4l2loopback video_nr=3,4,7 card_label="device number 3","the number four","the last one"
insmod /lib/modules/5.4.0-4-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
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

v4l2loopback 0.12.5-1 環境では /etc/modprobe.d/v4l2loopback.conf に複数カメラを設定して card_label を指定する場合card枚に “ で囲むと名前がおかしくなる.全体を ” で囲むとOK

NG : card_label="cam 1","cam 2"
OK : card_label="cam 1,cam 2"

$ uname -vm
#1 SMP Debian 5.10.4-1 (2020-12-31) x86_64
$ dpkg-query -W v4l2loopback-*
v4l2loopback-dkms       0.12.5-1
v4l2loopback-modules
v4l2loopback-utils      0.12.5-1

モジュール取り外し

$ sudo modprobe -rv v4l2loopback 
rmmod v4l2loopback

デバイスを増やしたい場合は恐らく一旦rmmodしてからinsmodし直さないと駄目みたい.

利用例

  • /dev/video9 を作って ffmpeg で動画を流し込む.
$ sudo modprobe -v v4l2loopback video_nr=9
$ ffmpeg -re -i sourcevideo.mp4 -f v4l2 /dev/video9

/dev/video9 を見るとその動画が見える

$ ffplay /dev/video9
  • デスクトップをキャプチャしてv4l2loopbackの仮想カメラに流し込む
$ ffmpeg -f x11grab -s 1920x1080 -i $DISPLAY+0,0 -vf format=pix_fmts=yuv420p -f v4l2 /dev/video9

  • ffmpegでrtmpを待ち受けてそれを流し込む

OBSなどから流し込むのに便利

$ sudo modprobe -v v4l2loopback devices=7 exclusive_caps=1,1,1,1,1,1,1,1
$ ffmpeg -f flv -listen 1 -i rtmp://localhost:1935/live/test -f v4l2 -vcodec rawvideo /dev/video7

低遅延化

$ ffmpeg -an -probesize 32 -analyzeduration 0 -listen 1 -i rtmp://127.0.0.1:1935/live -f v4l2 -vcodec rawvideo /dev/video7

akvcam

Webcamoid

AppImageもあってお手軽. フィルタも多い. 手元の環境では結構重い.

Linux-Fake-Background-Webcam

FaceRig

Windowsのみ.昔はWineで動作していたが今は無理. Unity版開発中でそれでマルチプラットホーム展開したいらしい.

Animaze

FaceRigの後継 Windows版のみ

Avatars

適当な写真の人物になりすませる. 今の所すごくGPU powerを食う

BackgroundMattingV2

コメント

コメントを入力. Wiki文法が有効です:
   ___   _____   __    ___    _  __
  / _ \ / ___/  / /   / _ |  / |/ /
 / // // /__   / /__ / __ | /    / 
/____/ \___/  /____//_/ |_|/_/|_/
 
linux/virtual_camera.txt · 最終更新: 2021/02/16 22:26 by matoken