Video On Demand desde el ordenador

Antes que nada contaros que la experiencia todavía no ha sido completada con éxito, pero he avanzado bastante.

El Video On Demand (VOD de aquí en adelante) es la tecnología que permite emitir streaming de vídeo por la red, pero con la diferencia de que el usuario final, aquí el televidente, pueda hacer pausa, rebobinar, volver a hacer play ...
Bueno, como la mayoría sabréis, es la tecnología que usa el Videoclub de imagenio.

Sinceramente, el VOD es lo único en que imagenio gana a las demás plataformas, y una vez lo hagamos funcionar desde el ordenador, será un buen electrodoméstico.

Empecemos:

1. En primer lugar, las primeras experiencias eran montar un servidor RTSP con VLC y desde una página web servida desde un apache hacer enlazarlos.

Lanzamos el servidor:
Código:
$ vlc --ttl 12 -vvv --color -I telnet --telnet-password videolan --rtsp-host 0.0.0.0:5554

Y con un telnet a localhost:4212
Código:
new Test vod enabled
setup Test input /tmp/my_video.mpg

Ahora con el vlc podemos comprobar el streaming, y la posibilidad de hacer pausar, ...
Código:
$ vlc rtsp://myserverIP:5554/Test

Podemos comprobar que el servidor funciona tanto si ponemos nuestra IP, o localhost, ...

Ahora desde el imagenio, vamos a internet, ponemos la IP de nuestro ordenador i el path a una página como la siguiente:
Código:
<html>
<body>
<a href="rtsp://myserverIP:5554/Test">Vídeo</a>
</body>
</html>

Cargamos la página, y al darle al link, obtenemos un mensaje de protocolo rtsp no reconocido, o algo similar.

Primer fracaso.

2. Bueno, no podía ser tan fácil. Así que seguimos investigando, vamos a observar algunas tramas con el ethereal. Lo ponemos en marcha y tras unos momentos podemos encontrar unos paquetes bastante curiosos:

Desde la IP 172.26.20.39 (quizás varíe según ciudad/zona/...) hacia 239.0.2.10 vemos paquetes UDP con la siguiente información:
Código:
cfg.browser.portalurls
<?xml version="1.0"?>
<!DOCTYPE PortalURLs SYSTEM "common/portalurls.dtd">
<PortalURLs>
  <TrustedURL>www.svc.imagenio.telefonica.net:2001</TrustedURL>
  <TrustedURL>www.imagenio.telefonica.net:2001</TrustedURL>
  <TrustedURL>webmail.svc.imagenio.telefonica.net:8100/mail</TrustedURL>
  <TrustedURL>webmail.imagenio.telefonica.net:8100/mail</TrustedURL>
  <TrustedURL>proxy-inv.svc.imagenio.telefonica.net</TrustedURL>
  <TrustedURL>proxy-inv.imagenio.telefonica.net</TrustedURL>
  <TrustedURL>213.98.254.170</TrustedURL>
  <TrustedURL>213.98.254.167</TrustedURL>
  <TrustedURL>webtv.tpi.es</TrustedURL>
  <TrustedURL>www.maptel.com</TrustedURL>
  <TrustedURL>www.telefonicaonline.com</TrustedURL>
  <TrustedURL>imagenio.terra.es</TrustedURL>
</PortalURLs>

Y otros con:
Código:
config.portalurls
<?xml version="1.0"?>
<!DOCTYPE PortalURLs SYSTEM "common/portalurls.dtd">
<PortalURLs>
  <PortalURL>www.svc.imagenio.telefonica.net:2001</PortalURL>
  <PortalURL>www.imagenio.telefonica.net:2001</PortalURL>
  <PortalURL>webmail.svc.imagenio.telefonica.net:8100/mail</PortalURL>
  <PortalURL>webmail.imagenio.telefonica.net:8100/mail</PortalURL>
  <PortalURL>proxy-inv.svc.imagenio.telefonica.net</PortalURL>
  <PortalURL>proxy-inv.imagenio.telefonica.net</PortalURL>
  <PortalURL>213.98.254.170</PortalURL>
  <PortalURL>213.98.254.167</PortalURL>
  <PortalURL>webtv.tpi.es</PortalURL>
  <PortalURL>www.maptel.com</PortalURL>
  <PortalURL>www.telefonicaonline.com</PortalURL>
  <PortalURL>imagenio.terra.es</PortalURL>
</PortalURLs>

Uhmm, interesantes IPs, 213.98.254.170 y 213.98.254.167, vamos a verlas.

213.98.254.170
Uhm, un portal parece que en desarrollo de streaming de música y videoclips, ;), y encima con el imagenio, los videoclips se emiten en VOD.
Guardamos las páginas en el disco duro y empezamos a verlas. Código JavaScript para moverse con el mando, y por fin, el código necesario para hacer el VOD.

213.98.254.167
Bueno una simple página de test diciendo que es la planta 2, pues muy bien.

Modificamos las páginas para que en vez de apuntar a sus servidores y a sus vídeos apunten al mio y probamos.

Código:
AuxProgramacion[1] = new Object();
...
AuxProgramacion[1].nom_fichero = "Test";
AuxProgramacion[1].interprete = "Mariano";
AuxProgramacion[1].titulo = "Test Mariano";
...

var servidor="rtsp://myserverIP:5554/";

Bueno, ahora vamos a hacer lo mismo que en 1 pero accediendo a las páginas modificas desde imagenio. Resultado: nos aparece un error de JavaScript en el navegador de imagenio Key Handler undefined o algo por el estilo.

Segundo fracaso.

3. Parece que andamos bien encaminados. Y recordamos los paquetes UDP que hemos visto, bueno, y pienso, me voy a crear un programita en Perl que se dedique a enviar los nuevos paquetes, pero añadiendo como TrustedURL my IP. No fue como esperaba, y seguimos recibiendo el error.

No investigué mucho por que tenia una idea mejor, pero quizás sea el camino que tengamos que seguir en el futuro. Quizá haya que cortar los paquetes UDP de telefónica, para asegurar que sea el nuestro el que coja, no se, pero seguramente en el futuro seguiremos por este camino.

Tercer fracaso.

4. Bueno tenia una idea mejor, vamos a hacer que mi ordenador sea 213.98.254.167.
Código:
$ ifconfig eth0:1 213.98.254.167 up

Telnet a nuestro router, metemos el password y vamos a la línea de comandos (24, :cool:
Código:
TELEFONIC> ip route add 213.98.254.167 192.168.1.33

Donde 192.168.1.33 es una de las IPs internas de mi ordenador.

Tiene buena pinta, ...

Vamos al imagenio, y visitamos a 213.98.254.167, y vemos que ya no sale el error, nos podemos mover a través de los menús con el mando, que emoción. Ya estaba, le damos a play, ya que había modificado la página principal para que al darle al play se cargue una nueva página con mis vídeos, y ... Mierda, aparece un mensaje de error diciendo que no encuentra el “Test Mariano”.

En el ordenado vamos a ver el servidor, a ver que nos cuenta. A priori, nada interesante, vemos la conexión y tal, pero nada aclaratorio, así que volvemos a hacer uso del ethereal. Con este vemos que nuestro servidor le envia una redirección al fichero pero con la IP 0.0.0.0 y después un 404. Vale, eso parece fácil de arreglar. Lanzamos el servidor:
Código:
$ vlc --ttl 12 -vvv --color -I telnet --telnet-password videolan --rtsp-host 213.98.254.167:5554

De nuevo el telnet a localhost:4212
Código:
new Test vod enabled
setup Test input /tmp/my_video.mpg

Volvemos a intentarlo en el imagenio, y ... Mierda de nuevo, tampoco puede encontrarlo, volvemos al ethereal y la negociación ya parece que funcione más o menos pero vemos discordancia en el transport.

En el log del server vemos algo parecido a :
Código:
HTTPD_MSG_SETUP: transport=MP2T/H2221/UDP;unicast;...el puerto y eso que ahora no tengo a mano...

Mientras que con el VLC desde el ordenador vemos:
Código:
HTTPD_MSG_SETUP: transport=RTP/AVP;unicast;client_port=33718-33719
HTTPD_MSG_SETUP: unicast ip=127.0.0.1 port=33718

Vemos la documentación del VLC, y vemos que existe la propiedad 'mux' la cual podemos poner el valor 'mp2t', así que, lanzamos el servidor de nuevo y telnet al 4212.
Código:
new Test vod input /tmp/my_video.mpg mux mp2t enabled

Volvemos al imagenio y ni por esas, :(
Probé también con un servidor de ejemplo que viene en la librería LiveMedia, testMPEG1or2VideoStreamer, pero tampoco.

Así que cuarto fracaso, pero ahora solo me falta lograr la configuración exacta del VLC, modificar este para que funcione, o buscar un servidor que funcione.

Así que, os dejo esto, diciendo que 4 manos trabajan mejor que dos.

</Mariano>
 
Contactos con tacto

El usuario para publicar lo he sacado de BugMeNot.com, bendito sea, así que no respondo a mensajes privados, los datos del perfil o lo que sea no son los mios, así que para todo lo que querais fuera del foro:

mariano.cano +++++ una arrobita +++++ gmail y punto com

</Mariano>
 
Nos puedes traducir al cristiano que es exactamente, la pretensión final, pero para torpes totales. ;)


Saludos
 
XIMOSO dijo:
Nos puedes traducir al cristiano que es exactamente, la pretensión final, pero para torpes totales. ;)

Saludos

Cuando logremos que todo funcione, crearemos un tutorial para torpes.

O a que te refieres con lo de "pretensión final" ? Especifica el texto si hay algo que no se entiende.

Además todo el trabajo se ha hecho en un linux, los comandos en windows serian distintos.
 
XIMOSO dijo:
¿Qué utilidad tendrá para el usuario?

Un usuario podrá emitir sus películas/series/... que tenga guardadas en el ordenador de su casa, pudiendo pausar, rebobinar, volver a hacer play, sin tener que ir al ordenador a hacerlo, directamente desde el mando de imagenio.

En mi caso, el ordenador lo tengo bastante lejos de la tele, y seria un coñazo ir al ordenador cada vez que quisiera rebobinar por que me he perdido un detalle, o para ir a mear.

Simplemente es comodidad, se ve en la tele, no necesitas pasarlo a dvd/cd, y encima lo manejas desde el mando.

</Mariano>
 
Aquellos usuarios que se interesen por esta nueva utilidad, ya saben MindSlaver, nos puede hechar una mano, exponerle todas las difilcultades que se os presenten...

Buen trabajo...

Saludos
 
Me interesa muchisimo porque yo tengo un deco adb, pero no tengo imagenio contratado..
 
El curro que has hecho esta de puta madre, a ver si encuentro algo de tiempo y me pongo a probar todo esto que has hecho y te puedo echar una mano.

Por cierto, has probado de utilizar Windows Media Center para hacer esto, es algo que quiero probar :p
 
Un poco de información extra en los RFCs (por si hay ganas, pero tampoco hace falta por ahora):
Real Time Streaming Protocol (RTSP)
http://www.ietf.org/rfc/rfc2326.txt

¿Qué es el MP2T/H2221/UDP ?
http://www.dmn.tzi.org/ietf/mmusic/47/i ... ext-00.txt
MP2T: Transport. MPEG-2 Transport.
H2221: Profile. The ITU H.222.1 standard for MPEG delivery over ATM.
UDP: Lower transport

RTP Payload Format for MPEG1/MPEG2 Video
http://www.ietf.org/rfc/rfc2250.txt

RTP Profile for Audio and Video Conferences with Minimal Control (describe el profile "RTP/AVP")
http://www.ietf.org/rfc/rfc3551.txt

roenick dijo:
Por cierto, has probado de utilizar Windows Media Center para hacer esto, es algo que quiero probar :p

No, con el WMC no he probado nada, ni creo que lo vaya a hacer. Trabajo desde linux.

</Mariano>
 
Este tema está abandonado ya??Parece muy interesante, yo estaría dispuesto a ayudar, aunque mis conocimientos aáun está verdes.
 
Me puse en contacto con la persona que lo empezó (Mariano), y efectivamente está abandonado.

Luego, estuve pensando en continuarlo Yo mismo, pero con VLS no podría hacerse habría de ser con VLC en ActiveX y lo cierto es que está muy mal documentado como para hacer esto. Sería largo y pesado ir probando, y habría que construir el servidor RTSP completo...
 
Ahms..tonces si los espertos decís que es pesado y complicado yo no serviria de ayuda asique nada.

Bueno un saludo a todos los zoneros.

Chao.
 
Arriba