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

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

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

14
задан 6 August 2014 в 20:38

6 ответов

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

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

Результаты:

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

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

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

Изображение моего сада, чтобы подбодрить вас, поскольку ответ - нет. Сейчас очень круто: я могу качаться (на качелях), прыгать и приземляться в детский бассейн. Взятые с сыром.

enter image description here

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

0
ответ дан 6 August 2014 в 20:38

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

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

0
ответ дан 6 August 2014 в 20:38

На основе @The Глазного ответа

Я сначала установил gstreamer пакеты на Ubuntu 18.04 https://gstreamer.freedesktop.org/documentation/installing/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

У меня просто есть 1 веб-камера на моем ноутбуке/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

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

3
ответ дан 6 August 2014 в 20:38

Счастливо, теперь, ДА!

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

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

Можно установить v4l2loopback путем клонирования его GitHub и выполнения этих команд:

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

Примеры

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

Любите настраивать вокруг!

13
ответ дан 6 August 2014 в 20:38

Я успешно использовал OBS Open Broadcast Software после следующих шагов:

  1. Установите устройство обратной связи video4linux (v4l2loopback, как предложено другими)

    (я использую Ubuntu 18.04, и мне пришлось установить более новая версия, как предлагается здесь: https://github.com/CatxFish/obs-v4l2sink/issues/30 )

  2. Установить OBS

    (Мне снова пришлось установить более новую версию и ffmpeg согласно этим инструкциям: https://itsubuntu.com/install-obs-in-linux-operating-system/ )

  3. Установите OBS-v4lsink

    (перейдите на https: //github.com/CatxFish/obs-v4l2sink, затем в "релизы", загрузите и установите файл .deb, версия 0.1.0 была единственным файлом deb там)

  4. Запустите v4l2loopback:

     sudo modprobe v4l2loopback
    
  5. В OBS и выберите источник

    В разделе «Источники» нажмите «+», дайте вашему новому слою имя, выберите свою (настоящую) веб-камеру

  6. В OBS выберите приемник

    В верхнем меню перейдите в инструменты> v42lsink, выберите виртуальную веб-камеру (/ dev / videoX, где X - максимальное доступное число), нажмите кнопку «Пуск»

  7. . В ваших приложениях выберите виртуальную веб-камеру.

У меня были Zoom и Discord с использованием одного и того же нового виртуальная веб-камера, а также возможность записи с камеры с помощью OBS

2
ответ дан 2 May 2020 в 18:12

Поскольку нет ответа с помощью ffmpeg, Вот оно.


Объяснение

Хотя v4l2loopback создает виртуальные видеоустройства, по умолчанию они ни с чем не связаны. Чтобы сделать их полезными, вы должны отправлять им потоки через внешние приложения, такие как ffmpeg.

Сначала загрузите модуль

$ sudo modprobe v4l2loopback exclusive_caps=1 video_nr=5 #creates `/dev/video5`

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

$ ffmpeg -i /dev/video0 -f v4l2 -codec:v rawvideo -pix_fmt yuv420p /dev/video5

Теперь /dev/video5 работает как псевдо-веб-камера. Обратите внимание, что в отличие от физической веб-камеры, к одному виртуальному видеоустройству можно получить доступ из нескольких приложений одновременно. Таким образом, в этом случае вам не нужно создавать много виртуальных устройств.

Я написал сценарий, чтобы обернуть эти шаги: v4l2_webcam - GitHub.


Приложение

Вы можете отправить любое (необработанное) видео на виртуальное видеоустройство. Это означает, например, что можно использовать сложно смешанное видео OBS в качестве входа камеры для веб-встречи (например, Skype, Zoom и т. Д.).

Вот относительно сложный, но очень практичный пример:

Структура

example_structure

Результат

example_result

7
ответ дан 27 May 2020 в 11:17

Другие вопросы по тегам:

Похожие вопросы: