"Não há espaço disponível no dispositivo" para usar várias câmeras

0

Quando tento capturar vídeo de duas câmeras usb (uvc) conectadas em uma única porta USB, há um erro:

libv4l2: error turning on stream: No space left on device
Unable to start capture: No space left on device

Eu sei que isso é um problema conhecido; às vezes isso acontece porque não há largura de banda disponível na porta usb e, às vezes, podemos resolver isso por meio dos comandos sudo rmmod uvcvideo; sudo modprobe uvcvideo quirks=128 .

No entanto, descobri que quase na mesma condição (USB 2, dois mesmos dispositivos de câmera), podemos obter fluxo de vídeo em algumas máquinas, e não podemos fazer em algumas máquinas. O abaixo é minha investigação. Eu quero saber por que eles acontecem, e mais interessante, como transmitir de duas ou mais câmeras em geral.

Experiências :

Câmeras que eu usei: ELP-USBFHD01M-L180
Saída de v4l2-ctl --list-formats-ext (usamos apenas 320x240; outras resoluções são omitidas):

ioctl: VIDIOC_ENUM_FMT
    Index       : 0
    Type        : Video Capture
    Pixel Format: 'MJPG' (compressed)
    Name        : Motion-JPEG
            Size: Discrete 320x240
                    Interval: Discrete 0.008s (120.101 fps)

    Index       : 1
    Type        : Video Capture
    Pixel Format: 'YUYV'
    Name        : YUYV 4:2:2
            Size: Discrete 320x240
                    Interval: Discrete 0.033s (30.000 fps)

Máquinas:

  • Thinkpad T440p, Ubuntu 14.04.5, USB 2
  • Odroid XU4, Ubuntu 16.04.2, USB 3
  • Raspberry Pi 3B, Ubuntu 16.04, USB 2

Método: Em cada máquina, executando mjpg-streamer no modo YUYV ou modo MJPG para uma ou duas câmeras. / p>

Resultado:

  • Thinkpad T440p, Ubuntu 14.04.5, USB 2
    • duas câmeras 320x240 YUYV trabalhavam a 30 qps.
    • uma câmera 320x240 MJPG trabalhou a 67 fps.
    • duas câmeras 320x240 MJPG não funcionaram.
  • Odroid XU4, Ubuntu 16.04.2, USB 3
    • duas câmeras 320x240 YUYV trabalhavam a 30 qps.
    • uma câmera 320x240 MJPG trabalhou a 69 fps.
    • duas câmeras 320x240 MJPG não funcionaram.
  • Raspberry Pi 3B, Ubuntu 16.04, USB 2
    • duas câmeras 320x240 YUYV trabalhavam a 30 qps.
    • duas câmeras 320x240 MJPG trabalhavam a 65 fps.

Assim, no Raspberry Pi 3B, podemos transmitir vídeo de duas câmeras no modo MJPG a 60+ FPS, enquanto não poderíamos fazer isso nas outras máquinas devido ao erro "Nenhum espaço deixado no dispositivo".

Eu quero saber por que e como disponibilizá-lo nas outras máquinas (Thinkpad, Odroid).

De acordo com esta questão , eu verifiquei:

cat /sys/kernel/debug/usb/devices | grep "B: "

ao transmitir a partir das câmeras.

Resultado:

Thinkpad T440p, Ubuntu 14.04.5, USB 2

sem câmera

3:B:  Alloc=  0/800 us ( 0%), #Int=  1, #Iso=  0
56:B:  Alloc=  0/800 us ( 0%), #Int=  3, #Iso=  0

duas câmeras 320x240 YUYV trabalhavam a 30 fps.

3:B:  Alloc=512/800 us (64%), #Int=  4, #Iso= 10
113:B:  Alloc=  0/800 us ( 0%), #Int=  3, #Iso=  0

uma câmera 320x240 MJPG trabalhou a 67 fps.

3:B:  Alloc=488/800 us (61%), #Int=  3, #Iso=  5
113:B:  Alloc=  0/800 us ( 0%), #Int=  3, #Iso=  0

Odroid XU4, Ubuntu 16.04.2, USB 3

sem câmera

B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
B:  Alloc= 39/900 us ( 4%), #Int=  2, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0

duas câmeras 320x240 YUYV trabalhavam a 30 fps.

B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  9
B:  Alloc= 39/900 us ( 4%), #Int=  2, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0

uma câmera 320x240 MJPG trabalhou a 69 fps.

B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  5
B:  Alloc= 39/900 us ( 4%), #Int=  2, #Iso=  0
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0

Raspberry Pi 3B, Ubuntu 16.04, USB 2

sem câmera

B:  Alloc=-7151580/800 us (-893947%), #Int= -9, #Iso=-119193

duas câmeras 320x240 YUYV trabalhavam a 30 fps.

B:  Alloc=-5395920/800 us (-674489%), #Int= -8, #Iso=-89932

duas câmeras 320x240 MJPG trabalhavam a 65 fps.

B:  Alloc=-4363020/800 us (-545377%), #Int= -8, #Iso=-72717

Muito obrigado!
--Akihiko

    
por Akihiko 07.02.2018 / 04:52

0 respostas