Задался целью: "научить" камеру работать сразу в нескольких приложениях. По дефолту при подключении камеры появляется девайс /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 - виртуальная камера. так как модуль будет грузится при запуске системы, то виртуальное устройство будет всегда первым нежели остальные устройства. После чего перезагружаемся и радуемся работе камеры во всех приложениях одновременно)))
ЗЫ если есть ошибки в коде или в командах прошу поправить, писал на скорую руку)
Комментарии (13)
О! Сделали! Не прошло и 10 лет... :-)
предыдущая версия для видео4линух первой версии лежит здесь
можно увидеть changelog :-)
обратите внимание на года. :-)
Всё написано хорошо! Вот только у меня с /dev/video0 на /dev/video1 не перекидывается изображение хотя ошибок никаких не выдаёт.
А есть решение гораздо проще — OBS.
O
dnaBabkaSkazala?Гм... А как можно сравнивать драйвер с многомегабайтным софтом? И как прикладной софт может быть проще драйвера???
Можно. Если нужен результат, а не возня с граблями. Но на самом деле, я сравниваю не инструмент, а результат. Я бы не рискнул проделывать то, о чём говорится в статье. Наверняка ведь грабли будут, индивидуальные для каждой системы, я хвостом чую. Ах да, вот они:
Ну не сейчас так в следующей версии бубунты. А могут вообще выбросить эти пакеты на мороз (в первый раз что ли?). "…Можно подгрузить… можно попробовать… писал на скорую руку…" — написано, как-будто автор сам неуверен в том, что делает и взлетит ли это на чужой системе. А OBS, я уверен, взлетит на любой системе и настроит его каждый новичок.
кот у нас так и не желает понимать, что "одна бабка сказала" - это не название софта, а просто флуд.
К тому же, я так думаю, что сей OBS (что это такое, один кот знает) врядли может пригодиться в решении получения и видеовывода в реальном масштабе времени , и одновременной обработки данного видеосигнала, что и является основной задачей vidoloopback
Эта цель легко достижима с OBS, для этого оно и разработано. Других целей не озвучено и я не смог придумать (я не отрицаю их существование). Для тех кого забанил гугл, первая ссылка в яндексе. Я никого не заставляю пользоваться. Но кому-нибудь пригодится этот вариант, я уверен.
кот еще подложник...
Выдал свою фразу за цитату от меня...
Где в цитате написано ваше имя? "Вы неисправимый фантазёр" ©
кот, спасибо за наводку.
Всегда пожалуйста.
А этот v4l2loopback без г-стримера разве сам не умеет перекидывать с /dev/video0 на его виртуальный /dev/video1 ?