Proyecto ELO330 - 2022-2

Solución Cliente-Servidor para transmisión de Webcam por TVD​

 

Sebastián Castillo - Nicolas Miranda

sebastian.castilloar@sansano.usm.cl - nicolas.mirandav@sansano.usm.cl

sábado, 10 de diciembre de 2022


 

1 Índice

1....................................................... Índice. 1

2...................................... Tabla de figuras. 1

3................................................. Resumen. 1

4........................................... Introducción. 1

5.................................................. Solución. 1

5.1......................... Diseño de la solución. 1

5.2.................................. Implementación. 1

5.3... Escenarios de prueba y resultados. 1

6.................. Conclusión y trabajo futuro. 1

7............................................. Referencias. 1

8......................................... Código fuente. 1

9............................. Conceptos Utilizados. 1

 

 

2 Tabla de figuras

Figure 1: relación entre programas. 1

Figure 2: Comunicación en pasos para lograr una transmisión. 1

Figure 3: Diagrama de flujo Cliente Webcam.. 1

Figure 4: Diagrama de flujo server relay. 1

Figure 5: Diagrama de flujo Cliente playout 1

Figure 6: Diagrama de secuencia, conexion entre programas. 1

Figure 7 Ejecución cliente webcam.. 1

Figure 8 Ejecución Cliente playout 1

Figure 9 Resultado prueba 1. 1

Figure 10 Vista cliente playout cuando se conecta otra webcam.. 1

Figure 11 Resultado prueba 2. 1

 

 


 

 

3 Resumen

Se plantea transmitir una señal de video de una webcam desde cualquier punto a servidor playout, el cual se encarga de retransmitir el video para posteriormente por parte del usuario poder visualizar el contenido en televisión digital. Para esto se mejora una solución existente, la cual permite únicamente transmitir webcam a servidor playout desde un lugar fijo, agregándole la capacidad de transmitir desde cualquier punto y además de recibir más de una cámara web seleccionable. Para dicha mejora se plantea una solución en la que se utiliza un servidor intermediario, quien recibe el video de webcam desde cualquier punto y lo retransmite a un dispositivo capaz de comunicarse directamente con el playout. La solución implica a tres programas trabajados en lenguaje C donde los contenidos presentes en la solución, abarcan desde uso de creación de procesos, hilos, sincronización entre ellos, hasta uso de clientes y servidores tanto UDP como TCP.

4 Introducción


El objetivo por alcanzar es transmitir el video emitido por una webcam desde cualquier punto y poder visualizarlo a través de la televisión digital. ¿Cómo se puede lograr en rasgos generales? Para lograrlo se transmite el video de la webcam al playout, este modula el video y lo emite por aire, la señal emitida es recibida por el decodificador el cual recupera el video demodulado para que finalmente pueda ser observado en la televisión. Esta solución ya existe y es usada como base en este proyecto, pero tiene una limitación, pues solo funciona si es que el computador que está emitiendo el video de la webcam tiene comunicación directa con el playout, lo cual sólo se cumple si es que ambos dispositivos están bajo la misma subred. Ahora toca responder la pregunta ¿Por qué sólo se cumple si ambos están bajo la misma red? Porque como muchos dispositivos presentes en Internet, el playout se encuentra escondido detrás de una NAT, lo que provoca que no podamos contactar de forma directa al dispositivo si es que se le desea ubicar desde fuera de la subred. Por lo tanto, la problemática a solucionar se resume en buscar cómo puede llegar el video de la webcam desde fuera de la red al playout.       

 

5 Solución

5.1           Diseño de la solución

 

La solución está compuesta por tres distintos programas:

·       Un cliente webcam que produce un video por Webcam que quiere ser reproducido a una TV mediante el Playout.

·       Un cliente playout que se encuentra en la misma red que el dispositivo playout, y es capaz de elegir un cliente webcam para recibir su video desde el servidor relay y así reenviarlo al playout que permite la reproducción en la TV.

·         Un servidor intermedio que redirecciona los paquetes de video hacia el cliente playout según cual haya pedido. Además, mantiene registro de los posibles clientes webcam disponibles para informarle al cliente playout de sus opciones.

Diagrama

Descripción generada automáticamente

Figure 1: relación entre programas

Toda la comunicación entre ambos clientes ocurre con el servidor como intermediario.

Diagrama

Descripción generada automáticamente

Figure 2: Comunicación en pasos para lograr una transmisión

La estructura general del Cliente Webcam utiliza un solo hilo que se conecta, registra con el servidor y escucha sus comandos para comenzar o terminar la transmisión del video, creando un nuevo proceso que ejecute un script bash con el comando ffmpeg para emitir mediante UDP el video al servidor.

Figure 3: Diagrama de flujo Cliente Webcam

La estructura general del Servidor Relay consta de dos hilos para mantener comunicación con ambos tipos de clientes y un arreglo global con los clientes webcam conectados.

Para los clientes webcam es necesario recibirlos y revisar un espacio en el arreglo global para agregarlos o denegarles la conexión en caso de ser necesario, además estar atento a la desconexión de alguno de los activos para removerlos.

El único cliente playout debe ser informado de los clientes webcam activos y recibir su opción elegida para comenzar la retransmisión de paquetes UDP, mientras se escucha un requerimiento para parar el video y elegir otro o una desconexión para comenzar a aceptar un nuevo cliente playout.

Diagrama

Descripción generada automáticamente

Figure 4: Diagrama de flujo server relay

El Cliente Playout necesita un solo hilo para conectarse, recibir sus opciones de transmisión, enviar su elección y cuando se reciba la confirmación crear un hilo nuevo solo para redireccionar los paquetes UDP de video hacia el destino final del playout. Además de permitirle al usuario para y comenzar a elegir una nueva transmisión.

 

Figure 5: Diagrama de flujo Cliente playout

5.2           Implementación

 

La implementación de los tres programas es en lenguaje C, con el script ffmpeg en bash.

Para el funcionamiento del script bash es necesario la ejecución del cliente webcam en un computador Linux con webcam y conocer el nombre del dispositivo de video (ejecutar “v4l2-ctl --list-devices”, del paquete v4l-utils). El script permite dos posibles nombres al momento de iniciar la ejecución, “/dev/video0” y “/dev/video1”.  Además, para la transmisión en necesario tener el paquete “ffmpeg” instalado, ya que este se encarga de extraer el video y comenzar a mandar los paquetes UDP al servidor.

Por otro lado para el servidor relay es necesario que tener ip fija y dos puertos fijos para aceptar conexiones.

 

En conjunto el proceso de comunicación entre los programas para iniciar la transmisión de un video es una combinación de TCP para mantener conexión y comunicar comandos, y UDP para transportar el video.

Figure 6: Diagrama de secuencia, conexion entre programas

5.3           Escenarios de prueba y resultados

Se realizaron dos pruebas para observar el resultado de la solución diseñada. Estas fueron hechas en el Laboratorio de Televisión Digital de la universidad, utilizando la red del laboratorio y la proporcionada a los estudiantes. Para ambas pruebas se ejecuta programa Server relay en servidor aragorn.  

1.-Prueba con una cámara fuera de la red del playout:

Se ejecuta programa Cliente webcam en computador conectado a la red de estudiantes.

Texto

Descripción generada automáticamente

Figure 7 Ejecución cliente webcam

Se ejecuta programa Cliente playout en computador conectado a la red del laboratorio, a la cual también está conectado el playout.

Texto

Descripción generada automáticamente

Figure 8 Ejecución Cliente playout

Se sintoniza canal para observar resultado.

Figure 9 Resultado prueba 1

2.-Prueba con dos cámaras fuera de la red del playout:

Para prueba 2 se agrega un cliente webcam y se escoge para su visualización.

Texto

Descripción generada automáticamente

Figure 10 Vista cliente playout cuando se conecta otra webcam

Se sintoniza canal para observar resultado.

Una pantalla de televisión encendida con imagen de hombre

Descripción generada automáticamente

Figure 11 Resultado prueba 2

Video sobre prueba realizada en LAB TVD

6    Conclusión y trabajo futuro

Se logra diseñar una solución a la problemática, pudiendo transmitir video de webcam desde fuera de la red de playout, mejorando así el estado inicial de la solución base. Por otro lado, la manipulación de más de una cámara también se logra de manera satisfactoria.

Respecto a la asignatura Programación de Sistemas, se aplicaron la mayoría de los contenidos impartidos (programación Shell, procesos, hilos, sincronización, comunicación remota…). Además, se logra aplicar el aprendizaje obtenido en una problemática real de otra área, específicamente un problema de Redes de Computadores.   

Para finalizar, se identifican y ofrecen algunos puntos que pueden ser interesantes de trabajar en un futuro:

·       Seguridad de los datos, especialmente tráfico UDP.

·       Aceptar dispositivos webcam según disponibilidad del cliente webcam, por ejemplo: si se tiene más de una webcam conectado al computador poder elegir entre ellas cuál usar.

·       Permitir modificar la transmisión para ajustarse a distintos anchos de banda.

·       Envío instantáneo de video apenas exista conexión para observar respuesta ante cambios de webcam, a diferencia de solución actual que se requiere detener una cámara para comenzar a utilizar otra.

7    Referencias

·              "Manual Transmisión ISDBT V2019"  de Gonzalo Callender y Roberto Muñoz. Con revisión de Eric Borzone.

·              "Manual Transmisión Camara USB ISDBT V2019" de Jose Luis Rojel. Con revisión de Eric Borzone

·              "Transmisión de cámara web a televisión digital – Proyecto ELO323" de Sebastián Castillo, Sebastián Madariaga y Darael Badilla. 

 

8    Código fuente

Repositorio con código fuente:
https://gitlab.com/nicolas.mirandav/elo330-proyecto

9    Conceptos Utilizados

·       Comunicación TCP

·       Comunicación UDP

·       Scripts Bash

·       Manipulación de Hilos

·       Creación de procesos.

·       Sincronización de procesos e hilos.

·       Ejecución de script externo a programa.