Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





[Humor] Reproductor de video en Javascript.

Iniciado por Tei, 08 de Noviembre de 2007, 12:09:50 PM

« anterior - próximo »

Tei

La mejor solución para el problema de mostrar video en internet es un sistema de streaming que envie frames de video uno detras de otro de modo que teniendo parte del video se pueda reproducir.

Las imagenes no se pueden enviar en formato raw, porque la mas trivial ocupara 4 MB, y es deseable consumos de 4 KB. Asi que se tienen que enviar comprimidas,  y generalmente con un algoritmo de compresion con perdida semejante a jpg.  
Estos algoritmos estan sujetos a patentes, y a las pelease de la industria por imponer un estandar de video. Impidiendo que haya aparecido en internet un estandar de video, porque habiendo muchas posibles soluciones, se han excluido todas entre ellas.

Internet ha "routeado el problema" utilizando un formato que no es de stream de video, sino un formato de stream de dibujo vectorial. Macromedia Flash.   Como es en el caso de youtube.

Este sistema es un sistema hibrido, que utiliza las caracteristicas de representacion de graficos, y de scripting, de un plugin para navegadores web.  Plugin que no esta extendido a todos los navegadores, y que ni siquiera tiene una version de 64 bits.

Asi que he escrito un reproductor de video en javascript que no utiliza plugins, y que funciona utilizando unicamente estandars del WC3.

Deberia funcionar asi:

Un proceso "de carga" se dedica a cargar nodos "img" en un array, a modo de buffer.
Un proceso "de control" decide cuando suficientes nodos se han cargado para empezar la reproducicion.
Un proceso "de visualizacion" mueve los nodos a un area de la pantalla a una velocidad fija, esperando si ha consumido todos los nodos disponibles, y parandose cuando se haya completado el video (o reempeanzo si hay loop).

He escrito una prueba de concepto, que utiliza una version simplificada, sin buffering ni un throlling decente.

http://www.servicios-dpi.com/fun/videolol/

lo llamo VideoLOL   (Hibrid - Video Loader on Load )

RobiHm

la gracia de ese gif es poner 4 !! 2 horizontales 2 verticales :P
Web : Indómita
Blog : MiBlog
Evobas : Evobas
Kobox : Kobox

Tei

Cita de: "RobiHm"la gracia de ese gif es poner 4 !! 2 horizontales 2 verticales :P

ya, ya lo se, ... fue lo primero que encontre en google por "gif animado".

la verdad es que es un mal ejemplo, la gente va a pensar que no es un reproductor de video, sino un gif animado a pedales.  Y realmente se puede usar cualquier tipo de soporte de  imagen que aguante <img>, como jpg, etc.

pero vamos, es una demostración de concepto. nada mas.

en unos dias lo quitare de estar online, o le quitare la caracteristica de "loop", sino igual alguien me genera una burrada de trafico a lo tonto... aunque como se solicitan ficheros estaticos, enseguida estan cacheados y el servidor genera un 304 "Tio, ya tienes el fichero en tu cache".
es parte de la gracia de este sistema, que utiliza un recurso estatico, y por tanto se puede hostear por servidores optimizados para la velocidad, y los ficheros se van a aprovechar de todo mecanismo de caching que existe (del navegador, proxy de lan, proxy transparente, etc).

jazcks

esto te implicaria sacar todas los frames de un video a jpg,gif o png no? aunque claro tb podrias tener algo como dinamico como video.php?frame=12 que te las generara al vuelo.

de todas maneras, tus ideas cada dia me sorprenden mas xD

Tei

Cita de: "jazcks"esto te implicaria sacar todas los frames de un video a jpg,gif o png no? aunque claro tb podrias tener algo como dinamico como video.php?frame=12 que te las generara al vuelo

Si, pero es un solo comando de imagemagick :D
$ convert video.avi frames.jpg

También se puede usar para lo mismo ffmpeg

Hehehehehe.....   :* )

jazcks

si, pero creo que el flv tendra algo de optimizacion, si tienes un video donde todos los frames son iguales o muy parecidos, supongo que hace algo tipo dirty rectangles, y con el imagemagick tienes todos iguales con diferentes ficheros, por lo que no puedes hacer cache, iria mas lento no?

vas hacer alguna prueba con mas frames? algo largo?
o no tiene ningun sentido intentarlo? por eso pones [humor]? XD

Tei

Cita de: "jazcks"si, pero creo que el flv tendra algo de optimizacion, si tienes un video donde todos los frames son iguales o muy parecidos, supongo que hace algo tipo dirty rectangles, y con el imagemagick tienes todos iguales con diferentes ficheros, por lo que no puedes hacer cache, iria mas lento no?

tienes razon, aunque gif hace esto tambien, no actualiza todo el frame, sino solo lo que modifica.  Entonces seria posible redondear la jugada y en lugar de cargar simplemente un gif, se carga un objeto json donde esta embebida la imagen. y que tenga de parametros ademas del rectangulo, las coordenadas.  Entonces se podrian superponer imagenes, y tal.

otra opcion interesante es multiplicar por dos la velocidad de actualizacion, en pantalla (sin aumentar la de peticiones a red) y que en los frames impares se muestren dos frames a la vez, con el de encima solo con un 50% de transparencia.  Esto seria bastante sencillo.

en realidad no necesita ser TAN optimo como un mpeg o un divx o algo de esto. A los ordenadores de hoy en dia les sobra potencia para conseguir el mismo efecto con un sacrificio de un 20%.

Citar
vas hacer alguna prueba con mas frames? algo largo?
o no tiene ningun sentido intentarlo? por eso pones [humor]? XD

hombre, este es un proyecto humoristico, para reirme un poco.  Originalmente la idea la queria implementar en CSS, queria hacer un reproductor en CSS.  Con algo como  background-image: url(data:image/gif,....) ;  pero luego me he dado cuenta que usar nodos <img> es mucho mas sencillo Y robusto. Asi que he tenido que desechar el usar CSS,... desgraciadamente el resultado es menos original :(

pero vamos, sigo sin verle la menor utilidad en el mundo real.

si tengo un rato, sacare de youtube algun video que ejemplifique mejor el tema.  y hare unos cuantos experimentos.   No se los algoritmos de compresion en general, pero con VideoLOL puedo comprimir los frames a distintos niveles, incluso a distinta resolucion ...

...pero vamos, tampoco me llama mucho la atencion terminar de implementar esto, una vez demostrado el concepto. Ya nos hemos reido, y para el mundo real no es util, asi que tampoco tiene demasiado sentido seguir, solo seguire por dejar las cosas un poco cerradas, y poder olvidarme de ellas :D

jazcks

hombre, util no se del todo, pero hay dispositivos que no tiene soporte flash y si tiene JS y XMLHttpRequest, como por ejemplo, el Opera de nintendo DS. El iphone/touch creo que no tiene flash, pero tienen un programa aparte solo para youtube :P






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.