openSUSE Leap 15.2를 실행하는 Raspberry Pi 4에서 두 개의 USB 웹캠을 동시에 실행하는 방법은 무엇입니까?
나는 궁극적으로 그것이 작동하기를 바랍니다스포츠명령줄에서도 ffplay를 성공하지 못한 채 사용하고 있으므로 문제가 제거된 것 같습니다.
나에겐 두 개가 있다웹캠에 집어 넣다전원이 공급되는 USB 허브. 두 개의 웹캠은 독립적으로 작동하지만 함께 작동하지는 않습니다. 테스트로서 웹캠을 Pi에 직접 연결하거나 허브에서 분리하여 다음을 수행할 수 있었습니다.장치 설명자 읽기/64 오류 -110그래서 허브예올바른 전원 공급 장치.
다음과 같이 첫 번째 카메라를 시작하면 사진이 찍힙니다.
# ffplay -f v4l2 /dev/video0
하지만 두 번째 작업을 시작하면 그림이 표시되지 않습니다(첫 번째 작업은 계속 작동합니다). 여기서 기다리기만 하면 시간 초과가 발생하지 않는 것 같습니다(1초 이상 기다렸다고는 말할 수 없음). 단 몇 분만이라도):
# ffplay -loglevel debug -f v4l2 /dev/video2
ffplay version 3.4.8 Copyright (c) 2003-2020 the FFmpeg developers
built with gcc 7 (SUSE Linux)
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --incdir=/usr/include/ffmpeg --extra-cflags='-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g' --optflags='-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g' --disable-htmlpages --enable-pic --disable-stripping --enable-shared --disable-static --enable-gpl --disable-openssl --enable-avresample --enable-libcdio --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libcelt --enable-libcdio --enable-libdc1394 --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libzimg --enable-libzvbi --enable-vaapi --enable-vdpau --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libx264 --enable-libx265 --enable-libxvid
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Initialized opengl renderer.
[video4linux2,v4l2 @ 0xffff40000b50] fd:11 capabilities:84a000010
[video4linux2,v4l2 @ 0xffff40000b50] Current input_channel: 0, input_name: Camera 1, input_std: 0
[video4linux2,v4l2 @ 0xffff40000b50] Querying the device for the current frame size
[video4linux2,v4l2 @ 0xffff40000b50] Setting frame size to 1280x720
[video4linux2,v4l2 @ 0xffff40000b50] The V4L2 driver changed the pixel format from 0x32315559 to 0x47504A4D
[video4linux2,v4l2 @ 0xffff40000b50] Trying to set codec:rawvideo pix_fmt:yuv420p
[video4linux2,v4l2 @ 0xffff40000b50] The V4L2 driver changed the pixel format from 0x32315559 to 0x47504A4D
[video4linux2,v4l2 @ 0xffff40000b50] Trying to set codec:rawvideo pix_fmt:yuv420p
[video4linux2,v4l2 @ 0xffff40000b50] The V4L2 driver changed the pixel format from 0x32315659 to 0x47504A4D
[video4linux2,v4l2 @ 0xffff40000b50] Trying to set codec:rawvideo pix_fmt:yuv422p
[video4linux2,v4l2 @ 0xffff40000b50] The V4L2 driver changed the pixel format from 0x50323234 to 0x47504A4D
[video4linux2,v4l2 @ 0xffff40000b50] Trying to set codec:rawvideo pix_fmt:yuyv422
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
dmesg에는 아무것도 없습니다. 첫 번째 캠이 시작되면 Journalctl은 다음을 표시합니다.
Dec 29 16:23:17 shed-pi4.xxx.xxx org_kde_powerdevil[2497]: powerdevil: Scheduling inhibition from ":1.14" "My SDL application" with cookie 18 and reason "Playing a game"
Dec 29 16:23:22 shed-pi4.xxx.xxx org_kde_powerdevil[2497]: powerdevil: Enforcing inhibition from ":1.14" "My SDL application" with cookie 18 and reason "Playing a game"
Dec 29 16:23:22 shed-pi4.xxx.xxx org_kde_powerdevil[2497]: powerdevil: Added change screen settings
Dec 29 16:23:22 shed-pi4.xxx.xxx org_kde_powerdevil[2497]: powerdevil: Added interrupt session
Dec 29 16:23:22 shed-pi4.xxx.xxx org_kde_powerdevil[2497]: powerdevil: Disabling DPMS due to inhibition
Dec 29 16:23:22 shed-pi4.xxx.xxx org_kde_powerdevil[2497]: powerdevil: Can't contact ck
...그리고 두 번째가 시작되면
Dec 29 16:24:07 shed-pi4.xxx.xxx org_kde_powerdevil[2497]: powerdevil: Scheduling inhibition from ":1.14" "My SDL application" with cookie 19 and reason "Playing a game"
Dec 29 16:24:12 shed-pi4.xxx.xxx org_kde_powerdevil[2497]: powerdevil: Enforcing inhibition from ":1.14" "My SDL application" with cookie 19 and reason "Playing a game"
Dec 29 16:24:12 shed-pi4.xxx.xxx org_kde_powerdevil[2497]: powerdevil: Added change screen settings
Dec 29 16:24:12 shed-pi4.xxx.xxx org_kde_powerdevil[2497]: powerdevil: Added interrupt session
Dec 29 16:24:12 shed-pi4.xxx.xxx org_kde_powerdevil[2497]: powerdevil: Can't contact ck
이것이 열쇠일 수도 있고 붉은 청어일 수도 있습니다. Google에 따르면 배심원 단은 아직 나오지 않았습니다!
첫 번째 카메라(video0)에 대해 ffplay를 중지하면 두 번째 "hang" 세션(video2)이 즉시 시작됩니다.
기타 정보:
# ls -lah /dev/v4l/by-path/
total 0
drwxr-xr-x 2 root root 120 Oct 21 15:01 .
drwxr-xr-x 4 root root 80 Oct 21 15:01 ..
lrwxrwxrwx 1 root root 12 Oct 21 15:01 platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.4.3:1.0-video-index0 -> ../../video0
lrwxrwxrwx 1 root root 12 Oct 21 15:01 platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.4.3:1.0-video-index1 -> ../../video1
lrwxrwxrwx 1 root root 12 Oct 21 15:01 platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.4.4:1.0-video-index0 -> ../../video2
lrwxrwxrwx 1 root root 12 Oct 21 15:01 platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.4.4:1.0-video-index1 -> ../../video3
# ls -lah /dev/v4l/by-id/
total 0
drwxr-xr-x 2 root root 80 Oct 21 15:01 .
drwxr-xr-x 4 root root 80 Oct 21 15:01 ..
lrwxrwxrwx 1 root root 12 Oct 21 15:01 usb-HD_Camera_Manufacturer_USB_2.0_Camera-video-index0 -> ../../video0
lrwxrwxrwx 1 root root 12 Oct 21 15:01 usb-HD_Camera_Manufacturer_USB_2.0_Camera-video-index1 -> ../../video1
# hwinfo --usb [Edit]
03: USB 00.1: 0000 Unclassified device
[Created at usb.122]
Unique ID: VfPh.nrd9O+1TtQ3
Parent ID: 33sj.xvTGa+XkbXF
SysFS ID: /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4.4/1-1.4.4:1.1
SysFS BusID: 1-1.4.4:1.1
Hardware Class: unknown
Model: "ARC International USB 2.0 Camera"
Hotplug: USB
Vendor: usb 0x05a3 "ARC International"
Device: usb 0x9310 "USB 2.0 Camera"
Driver: "uvcvideo"
Driver Modules: "uvcvideo"
Speed: 480 Mbps
Module Alias: "usb:v05A3p9310d0000dcEFdsc02dp01ic0Eisc02ip00in01"
Config Status: cfg=new, avail=yes, need=no, active=unknown
Attached to: #4 (Hub)
05: USB 00.2: 0000 Unclassified device
[Created at usb.122]
Unique ID: Wi1b.nrd9O+1TtQ3
Parent ID: 33sj.xvTGa+XkbXF
SysFS ID: /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4/1-1.4.3/1-1.4.3:1.2
SysFS BusID: 1-1.4.3:1.2
Hardware Class: unknown
Model: "ARC International USB 2.0 Camera"
Hotplug: USB
Vendor: usb 0x05a3 "ARC International"
Device: usb 0x9310 "USB 2.0 Camera"
Driver: "snd-usb-audio"
Driver Modules: "snd_usb_audio"
Speed: 480 Mbps
Module Alias: "usb:v05A3p9310d0000dcEFdsc02dp01ic01isc01ip00in02"
Driver Info #0:
Driver Status: snd_usb_audio is active
Driver Activation Cmd: "modprobe snd_usb_audio"
Config Status: cfg=new, avail=yes, need=no, active=unknown
Attached to: #4 (Hub)
# lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
|__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 8, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 1: Dev 8, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 3: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 3: Dev 5, If 1, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 4: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 4: Dev 7, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 4: Dev 7, If 2, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 4: Dev 7, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 4: Dev 7, If 3, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 3: Dev 6, If 2, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 3: Dev 6, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 3: Dev 6, If 3, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 3: Dev 6, If 1, Class=Video, Driver=uvcvideo, 480M
# v4l2-ctl --list-devices --verbose
USB 2.0 Camera: HD USB Camera (usb-0000:01:00.0-1.4.3):
/dev/video0
/dev/video1
USB 2.0 Camera: HD USB Camera (usb-0000:01:00.0-1.4.4):
/dev/video2
/dev/video3
VIDIOC_QUERYCAP: ok
오후 내내 인터넷 검색을 해봤지만 지금까지 빈 내용이 나왔습니다. 두 대의 카메라를 동시에 작동하려면 어떻게 해야 합니까? ffplay에서 작동하게 할 수 있다면 Motion에서도 작동할 수 있기를 바랍니다.
미리 감사드립니다.
답변1
알았어... 문제가 해결된 것 같습니다. 이제 내가 무엇을 찾고 있는지 알 수 있으며 답은 다음과 같습니다.어디에나!
첫 번째 카메라를 1280x720의 해상도로 설정했는데 Pi의 CPU 사용률이 20% 미만으로 훌륭하게 실행되었으므로 다른 카메라를 연결해도 여전히 여유 용량이 있을 수 있다고 생각했습니다.
아니요, 병목 현상은 CPU가 아니라 USB인 것 같습니다.
첫째, 여러 개의 USB2 장치를 USB3 허브에 연결하면 모든 USB2 장치는 480Mbs 공간을 공유하지만 각각 새 공간을 얻지는 않습니다. 나는 이것을 암묵적으로 알고 있었지만 명시적으로 보여주었습니다! (오!)
둘째, 첫 번째 카메라는 필요한 대역폭뿐만 아니라 사용 가능한 모든 대역폭을 차지하는 것으로 보이므로 후속 카메라는 대역폭을 전혀 얻지 못합니다. 제가 생각하는 한 오류나 경고가 없습니다. 그냥 앉아서 기다리기만 하면 됩니다. 기다리다. 이 문제는 플래그를 설정하여 해결할 수 있습니다.UVC_QUIRK_FIX_BANDWIDTH다음과 같이:
# rmmod uvcvideo
# modprobe uvcvideo quirks=128
그리고 영구적으로 만드세요
# cat /etc/modprobe.d/uvcvideo.conf
options uvcvideo quirks=128
셋째, 아쉽게도 이것만으로는 부족해서 해상도를 640x480으로, 프레임 레이트를 20으로 낮춰야 했습니다.
이제 Motion은 두 대의 카메라를 모두 함께 사용합니다. 재미있는 운동이었지만 발견하기 전까지는uvcvideo의 단점그리고 넣어저것Google로 돌아가서 저는 이 질문이 실제로 잘 알려져 있고 이전에도 여러 번 답변되었다는 것을 깨달았습니다. ...하지만 특이한 점을 발견하려면 특이한 점을 이해해야 합니다.
안녕 호!