Как ограничить количество пропускной способности, которое USB-устройство может выделить в Linux?
У меня есть пара дешевых веб-камер USB, которые я пытаюсь запустить одновременно. Запуск v4l2-ctl --list-formats-ext --device=/dev/videoN
показывает, что они оба поддерживают несколько несжатых разрешений при 30 и 15 FPS.
Однако, даже если я настрою один для захвата со скоростью 15 кадров в секунду и разрешением 160x120, он все равно выделяет 480 Мбит / с полосы пропускания, что обычно не позволяет мне использовать любые другие USB-устройства, а тем более вторую веб-камеру. Попытка захвата со второй веб-камеры с тем же FPS / разрешением приводит к ошибке:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
Поиск этой ошибки обычно приводит к ответам типа: «Вы SOL, может, купите камеру, которая поддерживает MJPG?».
Но это абсолютно бессмысленно.
Захват несжатого RGB 160x120 равен 160 * 120 * 3 = 57600 байт на кадр. При 15 FPS для этого требуется как минимум 864000 байт в секунду полосы пропускания (то есть колоссальные 0,864 Мбит / с или 6,912 Мбит)! У меня USB2 концентратор, который поддерживает 480 Мбит / с. У меня должно быть достаточно пропускной способности для одновременной работы десятков этих веб-камер, но при работе с одной из них требуется почти все 480 Мбит моего USB-концентратора!
Поскольку камере не требуется 480 Мбит / с для потоковой передачи 160x120, но она сообщает драйверу, что нужно выделять столько, есть ли способ на уровне ОС заставить драйвер выделить определенное количество?