Wie finde ich heraus, welcher Prozess meine V4L2-Webcam verwendet?

13

Ich habe versucht, Folgendes auszuführen:

$ vlc -I dummy v4l2:///dev/video0 --video-filter scene --no-audio --scene-path webcam.png --scene-prefix image_prefix --scene-format png vlc://quit --run-time=1                                                     
VLC media player 2.0.7 Twoflower (revision 2.0.6-54-g7dd7e4d)                                                                                                                                                                                                             
[0x1f4a1c8] dummy interface: using the dummy interface module...                                                                                                                                                                                                          
[0x7fc19c001238] v4l2 demux error: VIDIOC_STREAMON failed                                                                                                                                                                                                                 
libv4l2: error setting pixformat: Device or resource busy                                                                                                                                                                                                                 
libv4l2: error setting pixformat: Device or resource busy                                                                                                                                                                                                                 
libv4l2: error setting pixformat: Device or resource busy                                                                                                                                                                                                                 
libv4l2: error setting pixformat: Device or resource busy                                                                                                                                                                                                                 
libv4l2: error setting pixformat: Device or resource busy                                                                                                                                                                                                                 
libv4l2: error setting pixformat: Device or resource busy                                                                                                                                                                                                                 
libv4l2: error setting pixformat: Device or resource busy                                                                                                                                                                                                                 
libv4l2: error setting pixformat: Device or resource busy                                                                                                                                                                                                                 
libv4l2: error setting pixformat: Device or resource busy                                                                                                                                                                                                                 
libv4l2: error setting pixformat: Device or resource busy                                                                                                                                                                                                                 
[0x7fc19c007f18] v4l2 access error: cannot set input 0: Device or resource busy                                                                                                                                                                                           
[0x7fc19c007f18] v4l2 access error: cannot set input 0: Device or resource busy                                                                                                                                                                                           
[0x7fc1a4000b28] main input error: open of `v4l2:///dev/video0' failed                                                                                                                                                                                                    
[0x7fc1a4000b28] main input error: Your input can't be opened                                                                                                                                                                                                             
[0x7fc1a4000b28] main input error: VLC is unable to open the MRL 'v4l2:///dev/video0'. Check the log for details.                                                                                                                                                         
[0x7fc19c007cc8] idummy demux: command `quit'    

Ich gehe also davon aus, dass derzeit ein Programm auf meine Webcam zugreift, was umständlich ist, da das Licht aus ist und lsof | grep /dev/videonichts zurückgibt. Gibt es eine andere, richtige Möglichkeit, um zu überprüfen, welche Prozesse derzeit meine Webcam verwenden? Oder ist das Problem ganz anderer Natur?

Turion
quelle
Ist es eine zweite Webcam auf demselben USB-Controller?
Dee
hilfreich wäre, wenn Sie Ihren Kameratyp, Ihre Linux-Distribution usw. beschreiben. Vielleicht dmesg | grep -i 'warn|fail|error|usb|video'kann Debianic Ihnen etwas Kleber geben
Dee
Für lsusbdas USB-Videomodul handelt es sich um eine BisonCam . Ich leite Gentoo. Ich werde weitere Informationen veröffentlichen, wenn der Fehler das nächste Mal auftritt, aber eigentlich interessiert mich nur, wie ich herausfinden kann, welche Prozesse die Kamera verwenden.
Turion

Antworten:

20

Ich hatte das gleiche Problem und die Lösung unter http://www.theoutpost.org/8-nslu2/open-devvideo0-device-or-resource-busy/ (EDIT: URL aktualisiert) hat mir geholfen.

$ fuser /dev/video0
/dev/video0: 1871m
$ ps axl | grep 1871
$ kill -9 1871
Tsan-Kuang Lee
quelle
4
Ich bekomme nichts dafür, fuser /dev/video0aber ich bekomme immer noch /dev/video0: Device or resource busy.
Panzi
Ich habe die URL aktualisiert (der Blog-Autor hat sie verschoben) - vielleicht können Sie sehen, ob dieser Beitrag Ihnen hilft. Könnte es andernfalls der Prozess sein, der das Gerät nicht kontinuierlich belegt, wenn die Fixiereinheit überprüft, dass es bereits freigegeben ist? Könnten Sie die Fixiereinheit in eine Hintergrundschleife einfügen und versuchen, den Fehler erneut zu erzeugen?
Tsan-Kuang Lee
Nach einem Neustart war der Fehler behoben. Ich möchte den Fehler nicht erneut erzwingen. Alle GUI-Apps konnten Audio und / oder Video nicht auf die eine oder andere Weise aufnehmen (hängen, abstürzen, schwarzes Bild, kein Audio oder Blockieren von / dev / video0), daher verwende ich jetzt ffmpeg für die Shell. Horrible UX, aber zumindest funktioniert es.
Panzi
2
Alte Frage, aber da ich 2 Stunden gebraucht habe ... denken Sie daran, es zu versuchen, sudo fuser /dev/video0falls der Befehl ohne sudo kein Ergebnis anzeigt.
user3191334
2

Aus irgendeinem Grund hat / dev / video * aus Tsan-Kuangs Antwort bei mir nicht funktioniert. Hier ist eine andere Möglichkeit, wie Sie Ihr Gerät erreichen können : ls /dev/input/by-id/. Beispielsweise:

$ fuser /dev/input/by-id/usb-Microsoft_Microsoft®_LifeCam_HD-5000-event-if00

Sergey Romanovsky
quelle
1

Dieser Befehl gibt alle Prozesse zurück, die das Gerät verwenden:

$ lsof /dev/video0
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF  NODE NAME
cheese  31526 kirill  mem    CHR   81,0          18321 /dev/video0
cheese  31526 kirill   23u   CHR   81,0      0t0 18321 /dev/video0

Mit PID können Sie den Prozess in diesem Beispiel beenden:

$ kill 31526
Kirill Feoktistov
quelle