GrabDuck

[HOWTO]Веб камера в нескольких приложениях одновременно | Kubuntu.ru

:

Задался целью: "научить" камеру работать сразу в нескольких приложениях. По дефолту при подключении камеры появляется девайс /dev/video*, и если какое-то приложение его юзает (например Skype), то для других это устройство выдает черный экран. Как быть если например охота вести трансляцию и при этом ее записывать? Оказалось не все так сложно как казалось изначально))). Для решения данной задачи нам потребуется модуль v4l2loopback, который создаст виртуальное устройство, и в который будет "лупить" видео поток с камеры. Начнем! ;)

Для начала установим сам модуль

sudo apt-get install v4l2loopback-dkms

Далее можно его подгрузить

modprobe v4l2loopback

После чего должно появиться новое устройство, у меня оно называется /dev/video1, так как /dev/video0 - это камера (у вас нумерация может быть другой, учитываем это)
Что бы не набирать эту команду каждый раз после загрузки, сделаем так, что бы модуль грузился автоматом

sudo nano /etc/modules

добавляем строку

v4l2loopback

После чего ставим пакет gst-launch-0.10

sudo apt-get install gst-launch-0.10

Вот теперь мы подходим к самому интересному. Можно попробовать пере направить поток с камеры на наш виртуальный девайс

gst-launch v4l2src device=/dev/video0 ! videorate ! video/x-raw-yuv,width=640,height=480 ! v4l2sink device=/dev/video1

Где /dev/video0 - камера, /dev/video1 - виртуальная камера. width=640,height=480 - ширина и высота потока с камеры (тут хотел бы пояснить, как я выяснил если в программе принудительно выставить разрешение камеры то это игнорируется, и поток идет с максимальным разрешением камеры, что неудобно для работы с такими программами как motion. Если же ограничения не нужны, то опцию "video/x-raw-yuv,width=640,height=480" можно просто напросто вырезать). Если терминал не выдал ни каких ошибок, то поток пошел на виртуальную камеру, можем проверить это запустив какие ни будь программы использующие камеры одновременно и выбрать /dev/video1.
Радуемся. НО! Нам конечно бы хотелось получить это при загрузке, не вводя ни каких команд. Для этого редактируем файл

sudo nano /etc/rc.local

и перед строкой "exit 0" вставляем

gst-launch v4l2src device=/dev/video1 ! videorate ! video/x-raw-yuv,width=640,height=480 ! v4l2sink device=/dev/video0

Обратите внимание, что теперь устройства поменялись местами. /dev/video1 - камера, а /dev/video0 - виртуальная камера. так как модуль будет грузится при запуске системы, то виртуальное устройство будет всегда первым нежели остальные устройства. После чего перезагружаемся и радуемся работе камеры во всех приложениях одновременно)))

ЗЫ если есть ошибки в коде или в командах прошу поправить, писал на скорую руку)