v4l2-loopback は一度だけ実行でき、停止または再起動はできません。

v4l2-loopback は一度だけ実行でき、停止または再起動はできません。

Chromeが認識できる仮想Webカメラを作成するには、v4l2-loopbackを使用しています。ループバックを最初に開始した後は、すべてがうまく機能しますが、最初にループバックを終了すると、もう機能しません。 ctrl-cを使用するか、「q」を送信してffmpegを殺すと、これが起こります。 sudoを使用してffmpegを2番目に実行すると機能しますが、sudoを使用したり通常のユーザーとして実行した後は機能しません。そのため、ユーザーごとに一度だけ動作するように見えるので、各ユーザーがいくつかのファイルを生成しますが、正しくクリーンアップしないと思います。

ループバックを効果的に閉じて開く方法は?

ループバックスクリプトは次のとおりです。

#!/bin/bash

facecam_serial_id="/dev/v4l/by-id/usb-Elgato_Elgato_Facecam_FW42K1A07613-video-index0"

ffmpeg -v debug -f v4l2 -input_format uyvy422 -framerate 60 -video_size 1920x1080 -i $facecam_serial_id -pix_fmt yuyv422 -f v4l2 /dev/video9

ffmpegが動作しているときの出力は次のとおりです。 https://termbin.com/h9xb

ffmpegが動作していないときの出力は次のようになります。 https://termbin.com/5573

初めてループバックを終了した後、Journalctlで次のエラーが発生します。

spa.v4l2: '/dev/video0' VIDIOC_QUERYCTRL:壊れたパイプカメラが現在動作しているかどうかをテストするためにこのコマンドを使用します。

ffplay -f v4l2 /dev/video9

テストコマンドが動作しなくなったときに発生するエラーは次のとおりです。

[video4linux2,v4l2 @ 0x7ff1d4000c80] Not a video capture device.
/dev/video9: No such device

すべてのアイデアに感謝!

答え1

最近同じ問題が発生しました。OBSスタジオ

修正ではありませんが、私に役立つ解決策は次のとおりです。

# Loopback not working or working once?
#  Try removing and reloading:
#
sudo modprobe -r v4l2loopback
sudo modprobe v4l2loopback
sudo depmod -a

頑張ってください!

答え2

ここでこの質問を見つけました。 https://thesquareplanet.com/blog/camera-webcam-on-linux/

私はElgatoがスナップを開始して停止するのに非常に面倒であることがわかりました。そして録音するたびにプラグを抜いて再接続しなければならないのですぐに古くなります。このプログラムを使用して「ソフト」リセットを実行すると、この問題を非常に簡単に解決できることがわかりました。手順は次のとおりです。 https://askubuntu.com/questions/645/how-do-you-reset-a-usb-device-from-the-command-line

私自身の小さな貢献:

#!/bin/bash
Sample lsusb output for Elgato Facecam
Bus 004 Device 003: ID 0fd9:0078 Elgato Systems GmbH Elgato Facecam
facecam_vendor_id="0fd9:0078"

facecam_usb_path=$(lsusb -d $facecam_vendor_id | awk '{print "/dev/bus/usb/"$2"/"$4}' | awk '{print substr($0, 0, length($0)-1)}')

<path_to_binary>/usb_reset $facecam_usb_path

答え3

私もこれについて少し幸運を楽しんだ。

sudo modprobe -r v4l2loopback
sudo modprobe v4l2loopback
sudo depmod -a

これはOBSがMicrosoft Teamsと連携するためのものです。 LinuxのTeamsは画面共有をサポートしていないため、回避策です。

答え4

これがまだ関連しているかどうかはわかりませんが、Elgato Facecamを同期モードに変更してUSBを取り外して再接続する必要性を回避できました(WindowsではLinuxで使用している場合もまだそうです)。

https://help.elgato.com/hc/en-us/articles/4681224843917-Elgato-Facecam-USB転送モードの変更方法

最近の4.09ファームウェアアップデートでは、ループバックの必要性が排除された可能性があります。

https://gist.github.com/catrielmuller/71ae055871893d289476ee570fd953d8

関連情報