Виртуальная веб-камера с video4linux2 недоступна в некоторых службах видеочата [дубликат]

Я хочу использовать веб-камеру на своем ноутбуке в качестве видеоустройства на моем компьютере, чтобы использовать его для видеоконференций и т. д.

Так что я не хочу просто транслировать видео. Я действительно хочу "транслировать" все устройство по сети.

Итак, два компьютера, один транслирует поток со своей веб-камеры, другой принимает это как видеоустройство.

Оба компьютера работают в обычном режиме Ubuntu 18.04, однако я скоро обновлюсь до 20.04

24
задан 8 April 2020 в 08:23

6 ответов

Предполагая, что обе машины подключены к сети и ПК может достичь IP-адреса портативного компьютера. Выполните следующие действия:

На портативном компьютере

Установите v4l-utils и ffmpeg , запустив:

sudo apt install v4l-utils ffmpeg

Установите matroska медиа-контейнер, например :

sudo apt install libmatroska6v5

Выполните следующую команду, чтобы открыть прослушиватель netcat для потока камеры:

ffmpeg -i /dev/video0 -codec copy -f matroska - | nc -l 9999

На ПК

Установите v4l-utils и ffmpeg , запустив:

sudo apt install v4l-utils ffmpeg

Установите v4l2loopback и загрузите виртуальную камеру:

  • Запустите это:
sudo apt install v4l2loopback-dkms v4l2loopback-utils
  • Затем это:
sudo modprobe -r v4l2loopback
  • Затем это:
sudo depmod -a
  • Затем это:
sudo modprobe v4l2loopback exclusive_caps=1 card_label="MyLaptopCam:MyLaptopCam"

Протестируйте это :

  • Выполните потоковую передачу с реальной камеры портативного компьютера на виртуальную камеру на ПК (измените IP-адрес ноутбука на IP-адрес портативного компьютера):
nc Laptop_IP 9999 | ffmpeg -i /dev/stdin -codec copy -f v4l2 /dev/video0
  • Запустите и воспроизведите виртуальную камеру:
ffplay /dev/video0
  • Скажите сыр на камеру вашего ноутбука.

Если вы видите свое лицо, значит, он работает.


Микрофон?

Чтобы передать выход микрофона с портативного компьютера на ПК, выполните следующие действия. эти шаги:

На портативном компьютере :

  • Запустите это:
arecord -f cd -c 1 | nc -l 7777

На компьютере:

  • Запустите это:
sudo modprobe snd-aloop
  • Затем это:
arecord -l | grep -i loopback

Результат будет примерно таким:

card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]

мы будем использовать устройство 1 (обычно это виртуальный микрофон) на карте 1 вот так hw: 1,1

  • Затем запустите это (измените Laptop_IP на IP-адрес портативного компьютера) :
nc Laptop_IP 7777 | aplay -f cd -D hw:1,1 
  • Выберите новое микрофонное устройство в Системных настройках -> Звук -> Вход.

Проверьте микрофон и узнайте, что будет задержка звука, поскольку сжатие не используется.


Примечание:

  • Это было протестированы и работают безупречно на двух машинах, работающих под актуальными одинаковыми версиями Ubuntu 19.10 .

Если тест не прошел, то это, вероятно, связано с тем, что у вас есть другие виртуальные камеры или другие камеры, присутствующие на вашем ПК / dev каталог

Чтобы исправить это, запустите ls / dev / video * и обратите внимание на их количество. Затем используйте команду с большим числом после нее в двух командах теста. Это делается так:

  • Запустите sudo modprobe -r v4l2loopback

  • Затем запустите ls / dev / video * и обратите внимание на существующие камеры, например / dev / video0 / dev / video1 / dev / video2 ... etc

  • Затем запустите:

sudo modprobe v4l2loopback exclusive_caps=1 card_label="MyLaptopCam:MyLaptopCam"
  • Затем запустите снова ls / dev / video * , будет добавлена ​​новая камера / dev / video3 примерно так / dev / video0 / dev / video1 / dev / video2 / dev / video3

  • Используйте новую камеру в последних двух командах вместо / dev / video0 вот так:

nc Laptop_IP 9999 | ffmpeg -i /dev/stdin -codec copy -f v4l2 /dev/video3

и

ffplay /dev/video3

Устранение неполадок:

Чтобы проверить, проходит ли поток через , если у вас есть проблемы с v4l2loopback , вы можете запустить на ПК:

nc Laptop_IP 9999 | mplayer -

или

nc Laptop_IP 9999 | vlc -

или

nc Laptop_IP 9999 | ffplay -

Чтобы использовать его с Google Hangouts:

Спасибо @janjaromirhorak , как указано в этом комментарии , цитируемом ниже.

Могут быть другие способы сделать это, но это был мой метод в Mozilla Firefox: откройте Google Hangouts, начните видеозвонок и разрешите оба запросы на микрофон и внутреннюю веб-камеру. Затем щелкните шестеренку значок, чтобы открыть диалоговое окно настроек, в котором можно выбрать веб-камеру. вы хотите использовать. Выберите свою виртуальную веб-камеру, примите разрешение запрос и нажмите "Готово". Также этот параметр, похоже, сохранится в будущем видеозвонки - в следующий раз я обнаружу, что моя виртуальная веб-камера уже выбрана и за работой. :)

15
ответ дан 25 April 2020 в 10:46

Итак, вы хотите одолжить камеру для другого компьютера. Может быть поздно, но этот вопрос, похоже, имеет решение.

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

Вам не хватает только одного элемента:

v4l2loopback

  1. Создайте устройство обратной связи V4L2 на рабочем столе (ПК2)
  2. На портативном компьютере (ПК1) используйте GStreamer ( gst-launch-1.0 ), ffmpeg, vlc, ... чтобы потоковое видео с камеры в сеть
  3. На рабочем столе (ПК2) используйте GStreamer ( gst-launch-1.0 ), ffmpeg, vlc, ... для получения и передачи видео на устройство обратной связи

Затем установите приложения конференции / чата на рабочем столе (ПК2), используя устройство обратной связи V4L2, созданное на шаге (1), в качестве камеры.

Ссылки:

3
ответ дан 25 April 2020 в 10:46

vlc

Использование vlc является одним из способов для достижения этой цели.

Шаг 1 - настройка

Чтобы установить VLC в Debian, Ubuntu или Linux Mint:

$ sudo apt-get install vlc

Чтобы установить VLC в Fedora, сначала включите бесплатный репозиторий RPM Fusion, затем запустите:

$ sudo yum install vlc

Чтобы установить VLC на CentOS или RHEL 6, сначала настройте репозиторий EPEL, а затем используйте следующие команды:

$ cd /etc/yum.repos.d/
$ sudo wget http://pkgrepo.linuxtech.net/el6/release/linuxtech.repo
$ sudo yum install vlc

Шаг 2 - Проверить веб-камеру в VLC

Убедитесь, что ваша веб-камера обнаружена вашей системой Linux и VLC.

Для этого вам необходимо знать имя веб-камеры. В приведенном ниже примере веб-камера называется / dev / video0 .

$ ls /dev/video*
/dev/video0

Затем вам нужно протестировать видео с веб-камеры. Вот команда, которую вам нужно использовать, не забудьте заменить «video0» на имя вашего устройства.

$ vlc v4l2:///dev/video0

Если ваша веб-камера успешно обнаружена VLC, вы сможете увидеть свой видеопоток.

Шаг 3 - Настройте потоковую передачу с веб-камеры на VLC

Вы успешно обнаружили свою веб-камеру в VLC, далее следует настроить потоковую передачу с веб-камеры.

В этом примере веб-камера транслируется по HTTP в формате WMV. Чтобы настроить VLC для потоковой передачи с веб-камеры, сначала запустите VLC.

$ vlc

В меню VLC выберите «Streaming».

На экране выберите имя вашей веб-камеры или аудиоустройства, например, / dev / video0 для веб-камеры и hw: 0, 0 для аудио. Установите флажок «Показать дополнительные параметры» и запишите строки значений в полях «MRL» и «Параметры редактирования». Эти строки будут использоваться позже в учебнике. Нажмите кнопку «Поток».

Проверьте источник видео, например, v4l2: /// dev / video, и нажмите «Далее», чтобы продолжить.

Выберите место назначения, то есть метод / цель потоковой передачи потоковой передачи с веб-камеры . В нашем примере мы выбираем HTTP из раскрывающегося списка и нажимаем «Добавить».

Затем указываем номер порта и путь к потоковой службе. Для номера порта введите 8080; мы предполагаем, что номер порта не занят, для пути - "/stream.wmv". Для перекодирования выберите профиль «Видео - WMV + WMA (ASF)» из раскрывающегося списка. Нажмите «Далее».

На следующем экране отображается автоматически сгенерированная строка вывода потока. Запишите это и нажмите кнопку «Stream».

На этом этапе VLC должен начать потоковую передачу видео с вашей веб-камеры через HTTP. Потоковый трафик отправляется непосредственно на localhost на TCP-порт с номером 8080, поэтому вы не сможете ничего увидеть в окне VLC.

Чтобы убедиться, что VLC правильно работает на TCP-порту 8080, выполните следующую команду и посмотрите для VLC.

$ sudo netstat -nap | grep 8080

Шаг 4. Просмотр потокового видео с веб-камеры

После запуска потокового сервера прямая трансляция с веб-камеры станет доступна по адресу http: //: 8080 / stream.wmv

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

$ vlc http://:8080/stream.wmv
$ mplayer http://:8080/stream.wmv

Если вы тестируете канал с того же хоста, используйте вместо него адрес обратной связи 127.0.0.1.

2
ответ дан 25 April 2020 в 10:46

Вы можете попробовать использовать DroidCam. У меня нет ПК с ноутбуком в одном месте, поэтому я только что протестировал его на телефоне Android и Ubuntu 19.10. Есть вариант Wifi Server, который вы можете попробовать в вашем случае.

Установка для Ubuntu:

sudo apt install linux-headers-`uname -r`
sudo apt install v4l2loopback-dkms v4l2loopback-utils
sudo modprobe v4l2loopback
wget https://www.dev47apps.com/files/600/droidcam-64bit.tar.bz2 -O droidcam.tar.bz2
tar xjvf droidcam.tar.bz2
cd droidcam-64bit/
sudo ./install
echo -e '[Desktop Entry]\n Version=1.0\n Name=DroidCam\n Exec=droidcam\n Icon=droidcam\n Type=Application\n Categories=Application' | sudo tee /usr/share/applications/droidcam.desktop

Вы можете запустить его с терминала: droidcam &

enter image description here

Разрешение его в брандмауэре:

sudo ufw allow 4747

enter image description here

Для 20.04 эта установка droidcam гид не мог работать. Но я нашел другой способ, описанный здесь .

1
ответ дан 25 April 2020 в 10:46

Если я правильно понимаю, вы имеете в виду, что видеоустройство на одном компьютере получает входные данные от физического устройства на другом. Даже если у меня нет ресурсов для тестирования, я думаю, это возможно. Я помню, как некоторое время назад делал нечто подобное, но не с видео. Согласно this (также this ; обе старые записи), видео также можно делать.

В итоге

Решения и комментарии в этих сообщениях используют dd , ffmpeg или netcat ( nc ) для создания дампа / потоковой передачи видео и mplayer или vlc для просмотра и туннелирования видео. даже трубопровод с тройником .

Если вы сначала попробуете любое из решений, доступных в сообщениях выше, и сообщите обратную связь, это будет хорошей отправной точкой для продвижения вперед.

Создание локального устройства, для доступа к нему точно так же, как если бы веб-камера была подключена локально, не тестировалось. Этот (старый пост) предполагает, что использование SSHFS может помочь. YMMV, в зависимости от того, что вы собираетесь использовать для туннелированного видео.

Ссылки

  1. Подключение видеоустройства по SSH или tcptunnel?

  2. Можно ли передать / dev / video по ssh.

  3. Просмотр удаленной веб-камеры по конвейеру и SSH ?

  4. SSHFS

2
ответ дан 25 April 2020 в 10:46

Мое предложение было бы немного другим, поскольку все параметры уже указаны.

  1. Установите TeamViewer и используйте его для подключения к ноутбуку, проблема Согласно этой идее, камера ноутбука должна быть направлена ​​на вас, даже когда вы используете настольный компьютер. Это будет работать, даже если оба компьютера не находятся в одной сети. TeamViewer имеет бесплатное (некоммерческое) и платное (коммерческое) использование.

  2. Используйте удаленное соединение Вы можете использовать удаленное соединение на вашем компьютере Dekstop с Ubuntu.

0
ответ дан 25 April 2020 в 10:46

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

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