VideoLAN es un proyecto que permite tanto visualizar como servir vídeos en forma de streaming y bajo demanda. Es una alternativa más completa a Flumotion, ya que soporta protocolos como RTSP y MMS muy útiles para dispositivos móviles como PDAs. En esta receta no voy a entrar a explicar como funciona el cliente VLC ni nada por el estilo, para eso esta el manual de VideoLAN. Yo solo voy a hacer referencia a como utilizar el core vlm que permite ejecutar VLC como servidor. También he probado VLS como servidor, pero como en las últimas versiones de VideoLAN se ha quedado obsoleto no voy a hacer más referencia a él a no ser que alguien lo pida explícitamente.

Fichero de configuración

Lo primero será crearse el fichero de configuración del servidor. Éste fichero es un simple fichero de texto que puede llamarse de cualquier forma. La nueva sintaxis que han introducido los desarrolladores de VideoLAN es muy coñazo, así que yo creo que mejor explico cada ejemplo por separado.

Ejemplo Unicast

# VLC media player VLM command batch
# http://www.videolan.org/vlc/

### Prueba de Unicast (Cambiar el PC destino)
new prueba1 broadcast enabled loop
setup prueba1 input "/home/.../LOTR-CD3.avi"
setup prueba1 output #duplicate{dst=std{access=udp,mux=ts,dst=EQUIPO_DESTINO:4321}}
control prueba1 play
Lo primero son los comentarios, que como se ve son con la almohadilla. Este ejemplo es de unicast a EQUIPO_DESTINO. Aquí se pone la IP del host cliente al cual se quiere servir el vídeo. En la primera línea se crea un nuevo componente con "new" de nombre "prueba1", lo activamos con "enabled" y hacemos que se ejecute en bucle "loop". En la segunda linea indicamos el vídeo fuente que se va a servir con "input". En la tercera indicamos que el protocolo que se utilizará sera "udp" utilizando el formato MPEG-TS "ts" y cuyo destino será "EQUIPO_DESTINO" al puerto "4321". Por último activamos el streming en el servidor con "play". El cliente simplemente ejecutará en su host:
$ vlc udp://@:4321
O dentro del GUI "Abrir volcado de Red" en la pestaña UDP/RTP y elegir el puerto.

Ejemplo Broadcast

En el fichero de configuración incluimos lo siguiente:
### Prueba de BROADCAST (Solo PCs)
new prueba2 broadcast enabled loop
setup prueba2 input "/home/..../Matrix_f900.avi"
setup prueba2 output #standard{mux=ts,access=udp,dst=225.0.0.1,sap,name="Matrix Trailer"}
control prueba2 play
Este ejemplo es igual que el anterior, pero en el output indicamos una dirección multicast "225.0.0.1" y además incluimos un anuncio SAP del vídeo con el nombre "Matrix Trailer". El cliente debe ejecutar:
$ vlc udp://@225.0.0.1

VoD

### Prueba de VoD con RTSP
new Test vod enabled
setup Test input "/home/...../prueba.mpg"
Este ejemplo es distinto a los anteriores porque el elemento que aquí se necesita es un "vod" en vez de un "broadcast". Como entrada sólo se necesita el vídeo que demanda el cliente. El servidor se deberá ejecutar con las siguientes opciones:
$ vlc -vvv --color -I telnet --rtsp-host SERVIDOR_IP:5554
Y el cliente:
$ vlc rtsp://SERVER_IP:5554/Test

HTTP Streaming

### Prueba de HTTP Straming para la PDA
new PDA broadcast enabled loop
setup PDA input "/home/..../dekkers.avi"
setup PDA output #duplicate{dst=std{access=http,mux=ts,dst=EQUIPO_DESTINO:8080}}
control PDA play
Ahora en el output se utiliza el protocolo "http". Es igual que el primer ejemplo pero sobre el protocolo HTTP. El cliente para visualizarlo:
$ vlc http://SERVER_IP:8080

MMSH de M$

### Prueba con MMSH
new procesado5 broadcast enabled loop
setup procesado5 input "/home/..../dekkers.avi"
setup procesado5 output #duplicate{dst=std{access=mmsh,mux=ts,dst=EQUIPO_DESTINO:5000}}
control procesado5 play
Igual que antes pero utilizando el protocolo "mmsh". Este protocolo también nos vale para el cliente ese raro "Media Player", o algo así creo que se llama. Para cliente GNU/Linux:
$ vlc mmsh://SERVER_IP:8080
Para cliente mierdero (M$) desde el "Media Player" acceder a: mms://SERVER_IP:8080.

Post-procesado

Hasta aquí hemos configurado casi todos los protocolos posibles que nos permite utilizar VideoLAN. Pero hay veces que para determinados dispositivos móviles el bit-rate del streaming es demasiado alto y hay que reducirlo para poder verlos. En esta sección vamos a ver un par de ejemplos de como hacerlo.
### Prueba de post-procesado (reduccion del bit-rate) para PDAs
new procesado1 broadcast enabled loop
setup procesado1 input "/home/.../invalid_display_width.mpeg"
setup procesado1 output #transcode{vcodec=mp2v,vb=512,scale=1,acodec=mp2a,ab=192,channels=2}:duplicate{dst=std{access=http,mux=ts,dst=EQUIPO_DESTINO:8081}}
control procesado1 play
Igual que antes configurábamos para HTTP pero aqui antes de hacer el "duplicate" hacemos un "transcode" que consiste en reducir el ratio de video a 512k y el de audio a 192k. Para ello se ha utilizado los codecs mp2v y mp2a para video y audio respectivamente. Para ver que codecs hay disponibles empollate la documentación que hay mucha. Otro ejemplo:
new procesado4 broadcast enabled loop
setup procesado4 input "/home/.../Matrix_f900.ogg"
setup procesado4 output #transcode{vcodec=theo,vb=128,scale=1,acodec=vorb,ab=64,channels=2}:duplicate{dst=std{access=http,mux=ogg,dst=EQUIPO_DESTINO:8084}}
control procesado4 play
¿ Todo claro ?. Vamos, creo que se explica por sí solo. Un saludo, Arturo.

Referencias

Ejecución del servidor

Se me olvidaba que para ejecutar el servidor en modo "daemon" hay que hacer:
$ vlc -vvv --color --daemon -I telnet --vlm-conf prueba.cfg --ttl 2 --rtsp-host 0.0.0.0:5554

TODO

Elementos scheduled


blog comments powered by Disqus