¿Es posible que dos procesos accedan a la cámara web al mismo tiempo?

14

Me gustaría intentar usar Cheese en Hangouts de Google+ y configuraciones similares, y me gustaría saber si es posible que dos procesos utilicen la cámara web para tener acceso a la cámara web al mismo tiempo. Todavía no lo he probado, pero antes de hacerlo, pensé en preguntar.

Entonces, ¿es posible?

RolandiXor
fuente

Respuestas:

6

Bueno, acabo de intentarlo. Resultados interesantes

Tengo skype and cheese y webcam toy y hangouts (que funcionan) y los probé juntos.

Resultados:

No puedes usar la misma cámara web en 2 cosas a la vez.

Queso (Funcionando) + Webcam Toy (No funciona) + Skype (Pequeño, arriba a la derecha. No funciona).

ingrese la descripción de la imagen aquí

Sin embargo, puedes usar 2 cámaras web en 2 cosas. (Queso + Webcam Toy).

ingrese la descripción de la imagen aquí

Hangouts (no funciona) + queso (en funcionamiento)

ingrese la descripción de la imagen aquí

Hangouts (trabajando solo).

ingrese la descripción de la imagen aquí

Queso roto cuando abrí Hangouts primero. Hizo lo mismo con los demás, pero mi Internet es demasiado lento para cargar cada captura de pantalla (y dudo que aprecies más de 30 capturas de pantalla) ...

ingrese la descripción de la imagen aquí

Incluso intenté hacer un enlace simbólico /dev/video0y guardarlo /devcomo video2. Eso no funcionó.

Tampoco puedo ejecutar 2 procesos de queso a la vez.

Si tuviera que hacerlo, le aconsejaría que hiciera pantalla completa y que hiciera 2 grabaciones de pantalla. Sin embargo, dudo que funcione para lo que quieres.

Tim
fuente
¡Gracias! Esto es conciso y me dice lo que necesito saber. Bonito jardín por cierto! La recompensa se otorgará cuando expire el tiempo de espera (21 horas para el final). Entonces borraré este comentario.
RolandiXor
@Mew Ese fue mi último intento de hacerlo funcionar :)
Tim
@Tim La siguiente respuesta es exactamente lo que estás buscando si vienes aquí porque necesitas una forma de hacerlo.
Isiah Meadows
1
@impinball no, ¡acabo de encontrar una pregunta interesante!
Tim
14

Felizmente, ahora, ¡SÍ!

Actualmente hay un proyecto en GitHub que puede mostrar no solo dos, sino un número infinito (limitado solo por la capacidad del sistema) de dispositivos de video de una sola fuente.

El proyecto se llama v4l2loopback. (Verifique el enlace y desplácese hacia abajo para ver el archivo README para obtener instrucciones).

Puede instalar v4l2loopbackclonando su GitHub y ejecutando estos comandos:

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

Ejemplos

Para ver ejemplos de cómo usarlo con GStreamer, FFmpeg, MPlayer y Skype, consulte su wiki pequeño . Esperemos que pueda encontrar la configuración adecuada para sus necesidades.

¡Disfruta retocando!

El ojo
fuente
1
Los dispositivos virtuales son una de las áreas donde Linux (y * nix, para el caso) brilla. Es más complicado en Windows incluso escribir una teeutilidad básica que no espere a stdinque termine de alimentarlo. No me sorprendería si esto realmente usa un equivalente binario teecon un soporte más escalable debajo del capó.
Isiah Meadows
Si bien esto responde a la pregunta, sería preferible incluir partes del enlace aquí y proporcionar el enlace como referencia, para que tengamos algunos ejemplos, por ejemplo, hacer 2 dispositivos desde 1. ¿Cuáles son las opciones para eso? ¿Y es posible (como se dice en los requisitos del OP) usar con Hangouts de Google? También lo probé con Skype y no parece funcionar. Ahora somos la versión 4.3 no 4.0 ...
Tim
2
Tendré que comprobar esto cuando regrese mi otro sistema. Probablemente daré una recompensa adicional.
RolandiXor
3
Esto ahora es realmente parte de ubuntu, no hay necesidad de git.
nbubis
De hecho, esto ahora está empaquetado para Ubuntu / Debian como v4l2loopback-utils. No es necesario compilar esto automáticamente
Arnaud Jeansen
3

Basado en la respuesta de @The Eye

Primero instalé paquetes gstreamer en 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

Recibí un mensaje de advertencia como aquí en Ubuntu 18.04 LTS https://github.com/umlaeute/v4l2loopback/issues/139 (pero no me impidió cargar el controlador v4l2loopback)

$ sudo depmod -a

Solo tengo 1 cámara web en mi computadora portátil / dev / video0 y quería obtener 2 transmisiones del mismo hardware. Basado en https://github.com/umlaeute/v4l2loopback/blob/master/README.md

$ modprobe v4l2loopback devices=2

Ahora debería haber /dev/video1y /dev/video2creado asumiendo que /dev/video0era el único dispositivo de video.

Ahora ejecuto lo siguiente en una ventana de terminal

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

Abro 2 pestañas más

En la primera pestaña

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

En la segunda pestaña

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

Ahora uno debería ver 2 transmisiones de video

ACTUALIZAR

Incluso si uso el mismo /dev/video1dispositivo varias veces, todo me da tanta transmisión. ejemplo.

En la primera pestaña

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

En la segunda pestaña

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

En la tercera pestaña

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

me da tres corrientes

Entusiasta
fuente
Por cierto, si la cámara web de uno tiene audio, luego filtre los dispositivos de audio con el comando y pactl list | grep -A2 'Source #'luego use ese dispositivo en la siguiente tubería (también puede ejecutar varias instancias de tubería)gst-launch-1.0 pulsesrc device=alsa_input.<name of device> ! autoaudiosink
Entusiasta
Esto funciona mucho mejor que la solución FFmpeg ya que no pude hacer que FFmpeg copiara h264 sin decodificarlo, lo que resultó en que siempre usara la CPU incluso cuando nadie estaba escuchando
Fabian N.
2

La respuesta es no con un quizás ... La Biblioteca, "Video 4 Linux" detecta si se está utilizando un dispositivo y no se inicia. Sin embargo; si desea descargar libv4l-dev y editarlo manualmente, puede editar el código para deshacerse de esta verificación y luego volver a compilarlo. Me imagino que podrías hacer que esto funcione, pero sería extremadamente inestable. Sin embargo, puede valer la pena echarle un vistazo.

TLDR: cualquier cosa es posible si usted es un programador con un poco de grasa útil. ¿No quieres ir tan lejos? Entonces no; no es posible.

Akiva
fuente