viernes, 7 de agosto de 2020

Mandar contenido a la cámara

Durante este confinamiento todos hemos empezado a usar mucho más el ordenador para hacer vídeollamadas, bien sea por motivos de teletrabajo, clases o lo que sea.

Esto nos ha obligado a muchos a estar comprando cámaras web que no teníamos.
La cuestión es ¿Para que comprar una cámara web si nuestros dispositivos móviles ya cuentan con varias? Y en muchos casos nada malas precisamente.

Bien pues en este tutorial y en el siguiente os enseñaré como hice yo para poder configurar la cámara de mi Android como si fuese una cámara web compatible con Skype.

Parte 1: Cómo configurar una cámara virtual.

En esta primera parte crearemos una cámara virtual la cual usaremos para poder colocar cualquier vídeo como fuente de entrada.
Esto resulta bastante interesante ya que si se tiene suficiente imaginación se pueden hacer cosas interesantes. Por ejemplo:

  • Reproducir vídeos de Youtube en una vídeollamada de Skype.
  • Colocar una grabación vuestra haciendo como que hacéis un examen.
  • Usar como fuente de entrada para OBS.
  • Etc.

Cargar el driver de v4l2loopback.

Antes de nada tengo que avisar que esto lo he realizado en un Ubuntu 20.04, así que en otras distribuciones algunos pasos pueden ser algo distintos.

Lo primero que necesitaremos es instalar algunas dependencias:

  • v4l2loopback-dkms: Esta nos permitirá crear la cámara virtual.
  • v4l-utils: Esta nos permitirá controlar los detalles de la cámara.
  • ffmpeg: Esta nos permitirá mandar contenido a ella.
  • youtube-dl: Esta nos permitirá usar vídeos de Youtube como fuente (opcional).
sudo apt install v4l2loopback-dkms v4l-utils ffmpeg youtube-dl

Una vez tengamos las dependencias descargadas e instaladas, hay que crear la cámara virtual. Para ello hay que:

sudo modprobe v4l2loopback video_nr=0 card_label="Mi webcam 1"

Esto dará como resultado el dispositivo nuevo /dev/video0.

  • video_nr: Indica que queremos crear la cámara 0 (Parámetro opcional).
  • card_label: Indica el nombre que le queremos dar a la cámara (Parámetro opcional).

Es posible crear más de una cámara, de esta forma podemos simular que tenemos muchas cámaras.
Para ello solo habría que especificar los números y labels separados por comas. Por ejemplo:

sudo modprobe v4l2loopback video_nr=0,3,5 card_label="Mi webcam 1","Mi otra webcam","La 5 pero que es la tercera"

Aquí se pueden consultar todas las opciones del driver.

Para ver sus detalles se puede ejecutar:

v4l2-ctl --info --device 0
v4l2-ctl --info --device 3
v4l2-ctl --info --device 5

Mandar contenido a la cámara.

Una vez creada la camara, solo queda enviarle contenido:

ffmpeg -re -i vídeo.mkv -vf hflip -f v4l2 /dev/video0
  • -re: Nos vale para que el vídeo se reproduzca como mucho a x1.
  • -i: Indica la fuente de vídeo.
  • -vf hflip: Voltea el vídeo horizontalmente (sino los textos salen del revés).
  • -f v4l2 /dev/video0: Indica la cámara virtual por la cual saldrá el vídeo.

Y listo. Ahora podemos abrir el VLC (por ejemplo) y ver lo que sale por la cámara:

Abrimos el VLC -> Pulsamos sobre el botón de play -> Dispositivo de captura:
    - Capture mode: Vídeo cámara.
    - Nombre del dispositivo de vídeo: /dev/video0
Reproducir.

Extra: Mandar un vídeo de Youtube.

Buscamos un vídeo de Youtube, copiamos la URL.
Con la URL lo primero será listar las distintas fuentes de vídeo, donde seleccionaremos el tamaño de la imagen:

youtube-dl -F https://www.youtube.com/watch?v=t9sK3mD5kzc

En mi caso he optado por la 135.

Ahora para mandarlo a la cámara:

fuente=$(youtube-dl -g -f 135 https://www.youtube.com/watch?v=t9sK3mD5kzc)
ffmpeg -re -i $fuente -f v4l2 /dev/video0

Aquí lo único diferente es que he decidido trocear el comando en 2 partes por claridad.

Y esto es todo.

En la próxima entrada comentaré como hice para usar la cámara de mi Android como webcam mediante la WiFi. 

No hay comentarios:

Publicar un comentario