Возможно ли одновременное обращение к веб-камере двух процессов?

14

Я хотел бы попробовать использовать Cheese в Google+ Hangouts и аналогичные конфигурации, и я хотел бы знать, возможно ли использование веб-камеры двумя процессами для одновременного доступа к веб-камере. Я еще не пробовал, но прежде чем я решил, я бы спросил.

Так возможно ли это?

RolandiXor
источник

Ответы:

6

Ну, я только что попробовал. Интересные результаты.

У меня есть скайп, сыр, игрушка для веб-камеры и тусовки (которые все работают), и я попробовал их вместе.

Результаты:

Вы не можете использовать одну и ту же веб-камеру одновременно на двух вещах.

Сыр (рабочий) + веб-камера игрушка (не работает) + скайп (маленький, справа вверху. Не работает).

введите описание изображения здесь

Вы можете использовать 2 веб-камеры на 2 вещи, хотя. Сыр + Игрушка веб-камеры.

введите описание изображения здесь

Hangouts (не работает) + сыр (работает)

введите описание изображения здесь

Hangouts (работает самостоятельно).

введите описание изображения здесь

Сыр сломался, когда я впервые открыл Hangouts. Он сделал то же самое с остальными, но мой интернет слишком медленно загружает каждый скриншот (и я сомневаюсь, что вы оцените более 30 скриншотов) ...

введите описание изображения здесь

Я даже попытался сделать символическую ссылку /dev/video0и сохранить его в /devкачестве video2. Это не сработало.

Я также не могу запустить 2 процесса сыра одновременно.

Если бы вам пришлось, я бы посоветовал сделать его на весь экран и сделать 2 записи экрана. Я сомневаюсь, что это будет работать для того, что вы хотите, хотя.

Тим
источник
Благодарность! Это сжато и говорит мне, что мне нужно знать. Хороший сад, кстати! Награда будет присуждена по истечении времени ожидания (до 21 часа). Тогда я удалю этот комментарий.
RolandiXor
@Mew Это была моя последняя попытка заставить его работать :)
Тим
@Tim Следующий ответ - именно то, что вы ищете, если вы пришли сюда, потому что вам нужен способ сделать это.
Исия Медоус
1
@impinball Нет, просто нашел интересный вопрос!
Тим
14

К счастью, сейчас ДА!

В настоящее время на GitHub существует проект, который может показывать не только два, но и бесконечное (ограничено только объемом системы) количество видеоустройств из одного источника.

Проект называется v4l2loopback. (Проверьте ссылку и прокрутите вниз, чтобы просмотреть инструкции README.)

Вы можете установить v4l2loopback, клонируя его GitHub и выполнив следующие команды:

$ git clone https://github.com/umlaeute/v4l2loopback.git
$ cd v4l2loopback
$ make
$ sudo make install

Примеры

Примеры того, как использовать его с GStreamer, FFmpeg, MPlayer и Skype, можно найти в их маленькой вики . Надеюсь, вы могли бы найти правильные настройки для удовлетворения ваших потребностей.

Наслаждайтесь настройкой!

Глаз
источник
1
Виртуальные устройства - это одна из областей, где Linux (и * nix, в этом отношении) сияет. В Windows сложнее даже написать простую teeутилиту, которая не дожидается stdinокончания загрузки. Я не удивлюсь, если это на самом деле использует двоичный эквивалент teeс более масштабируемой поддержкой под капотом.
Isiah Meadows
Хотя это и отвечает на вопрос, было бы предпочтительнее включить сюда части ссылки и предоставить ссылку для справки, чтобы у нас было несколько примеров - например, сделать 2 устройства из 1. Какие есть варианты для этого? И можно ли (как сказано в требованиях ОП) использовать с тусовками Google? Я также только что проверил это с Skype, и это, кажется, не работает. Сейчас у нас версия 4.3, а не 4.0 ...
Тим
2
Я должен проверить это, когда моя другая система вернется. Я, вероятно, дам дополнительную награду.
RolandiXor
3
Теперь это фактически часть Ubuntu - нет необходимости в git.
Нбубис
Действительно, теперь это упаковано для Ubuntu / Debian как v4l2loopback-utils. Нет необходимости самостоятельно компилировать это
Арно Жансен
3

Основано на ответе @ The Eye

Я сначала установил пакеты gstreamer в Ubuntu 18.04 https://gstreamer.freedesktop.org/documentation/install/on-linux.html

$ git clone https://github.com/umlaeute/v4l2loopback.git
$ cd v4l2loopback
$ make
$ sudo make install

Я получил предупреждающее сообщение, как здесь, на Ubuntu 18.04 LTS https://github.com/umlaeute/v4l2loopback/issues/139 (но это не помешало мне загрузить драйвер v4l2loopback)

$ sudo depmod -a

У меня только одна веб-камера на моем ноутбуке / dev / video0, и я хотел получить 2 потока с одного и того же оборудования. Основано на https://github.com/umlaeute/v4l2loopback/blob/master/README.md

$ modprobe v4l2loopback devices=2

Теперь должно быть /dev/video1и /dev/video2создано, предполагая, что это /dev/video0было единственное видеоустройство.

Теперь я запускаю следующее в одном окне терминала

gst-launch-1.0 v4l2src device=/dev/video0 ! tee name=t ! queue ! v4l2sink device=/dev/video1 t. ! queue ! v4l2sink device=/dev/video2

Я открываю еще 2 вкладки

В первой вкладке

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

Во второй вкладке

gst-launch-1.0 v4l2src device=/dev/video2 ! videoconvert ! ximagesink

Теперь нужно увидеть 2 видеопотока.

ОБНОВИТЬ

Даже если я использую одно и то же /dev/video1устройство несколько раз, все это дает мне столько потоков. пример.

В первой вкладке

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

Во второй вкладке

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

На третьей вкладке

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

дает мне три потока.

enthusiasticgeek
источник
Кстати, если у вашей веб-камеры есть звук, затем отфильтруйте аудиоустройства с помощью этой команды, а pactl list | grep -A2 'Source #'затем используйте это устройство в следующем конвейере (может также запускать несколько экземпляров конвейера)gst-launch-1.0 pulsesrc device=alsa_input.<name of device> ! autoaudiosink
энтузиастик
Это работает намного лучше, чем решение FFmpeg, так как я не мог заставить FFmpeg скопировать h264 без декодирования, в результате чего он всегда использовал процессор, даже когда никто не слушал
Fabian N.
2

Ответ - нет, возможно ... Библиотека «Видео 4 Linux» определяет, используется ли устройство, и не запускается. Тем не мение; Если вы хотите скачать libv4l-dev и отредактировать его вручную, вы можете отредактировать код, чтобы избавиться от этой проверки, а затем просто перекомпилировать его. Я думаю, вы могли бы заставить это работать, но это было бы крайне нестабильно. Может быть стоит проверить хотя.

TLDR: все возможно, если вы программист, у которого есть немного смазки для локтя. Не хотите идти так далеко? Тогда нет; это невозможно.

Акива
источник