Что делаю: Делаю «систему видеонаблюдения» на основе motion, пучка копеечных вебок и pci-usb адаптеров. Дистр - дебиан. Всё свежее, распоследнее.
Что прошло не так: Где-то пол года у меня была одна единственная камера и всё было отлично, я обрадовался, купил пучок вебок от ноутбуков на разборе и тут оказалось что больше одной камеры подключить почти нельзя. Работают они по принципу кто первый встал того и тапки, поскольку одна камера каким-то немыслимым образом забивает usb2.0 шину. Разрешение 640х480. Если снизить разрешение в два раза, то можно поставить аж две камеры. Фрэймрэйт менять пробовал, но это не влияет почти или совсем, видимо с камеры всё забирается с той скоростью, с которой она отдаёт.
Покупать айпи-камеры с алика конечно можно, но для начала я бы хотел исчерпать потенциал существующего подхода, тем более что я уже начал и всё куплено.
Проблема освещена в факе первым же пунктом:
http://www.lavrsen.dk/foswiki/bin/view/Motion/FrequentlyAskedQuestions
видать это первейшие грабли наступаемые наивным энтузиастом
Как я решал проблему:
Там прямо в факе написано что делать - купить больше юсб-хостов на pci. Купил - оказалось что действительно помогает, теперь я могу подключить столько камер, сколько у меня 2.0 хостов - аж три. Для этого пришлось купить две платы + один контроллер в компе уже был. Это всё еще дешевле самой дешевой айпи-камеры, так что я пока не почувствовал себя неудачником, но всё же хотелось бы достигнуть большего числа подключённых камер теми же средствами.
В факе упоминались чудо-адаптеры с отдельными хостами на каждый порт. Таких мне, конечно, найти не удалось, но я старался искать контроллеры с количеством хостов хотя бы на 1 большим чем минимальное и даже нашёл, но есть нюанс:
# lspci | grep USB
00:03.0 USB controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f)
00:03.1 USB controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f)
00:03.2 USB controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f)
00:03.3 USB controller: Silicon Integrated Systems [SiS] USB 2.0 Controller
00:0b.0 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03)
00:0b.1 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03)
00:0b.2 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03)
00:0b.3 USB controller: ULi Electronics Inc. USB 2.0 Controller (rev 01)
00:0c.0 USB controller: NEC Corporation OHCI USB Controller (rev 43)
00:0c.1 USB controller: NEC Corporation OHCI USB Controller (rev 43)
00:0c.2 USB controller: NEC Corporation uPD72010x USB 2.0 Controller (rev 04)
Остаётся открытым вопрос - каким образом такая камерка съедает 480 мегабит полосы?
Кроме этого вопроса, есть другой вопрос - если она всё-таки съедает, то логично предположить, что на usb1.1 она вообще работать не будет или всё-таки будет по какой-то причине?
Что бы это проверить я решил принудительно перевести камеры в режим usb1.1. Много гуглил, много чего пробовал, например:
https://bbs.archlinux.org/viewtopic.php?id=172005
солюшн отсюда понятен, но он не работает - файл есть, но при попытке записать в него то что сказано - говорит что файла нет. Но я внимательно проверил, прошёл по симлинкам и увидел - файл всё-таки есть. Мистика. Возможно устройству не нравится моя идея и оно таким странным образом отказывается.
Более радикальное решение заключается в полном запрете usb2.0 на системе, что в общем-то вполне приемлемо, поскольку ничего кроме камер я к этому компу не подключаю. То есть я предполагаю, что если каким-то чудом камеры заработают на usb1.1, то в общей сложности у меня таких контроллеров 8, а число 8 намного больше чем число 3, но у меня решительно ничего не вышло. https://wiki.debian.org/KernelModuleBlacklisting я пробовал блэклист, я пробовал фэйк-инсталл, я даже нашёл как люди делают в точности то же самое: http://unix.stackexchange.com/questions/106716/wheezy-how-to-actually-blackli... и у меня снова не получилось - модуль по прежнему загружен в результате наличия зависимости, камеры по прежнему отображаются вот так:
# lsusb -t
/: Bus 11.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/: Bus 10.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/3p, 12M
/: Bus 09.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/: Bus 08.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/: Bus 07.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/5p, 480M
|__ Port 5: Dev 2, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 5: Dev 2, If 1, Class=Video, Driver=uvcvideo, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
|__ Port 6: Dev 2, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 6: Dev 2, If 1, Class=Video, Driver=uvcvideo, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
|__ Port 2: Dev 2, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 2: Dev 2, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 2: Dev 2, If 2, Class=Audio, Driver=snd-usb-audio, 480M
|__ Port 2: Dev 2, If 3, Class=Audio, Driver=snd-usb-audio, 480M
Вопрос: что делать и как жить дальше?(в рамках текущего бюджета, конечно)