Cargar un video de Youtube en un player de Flash con ActionScript v.2 (AS2)

Day 244/365
Creative Commons License photo credit: thp365

Actualización 30/Oct/2008: Solucionado ¡¡¡ Visita el post “Descargar un archivo de video flv de youtube.com con ActionScript2 (AS2)” con el nuevo script.

Actualización 27/Oct/2008: Youtube ha realizado cambios que impiden la descarga de los videos en formato flv según el script que describo más abajo.

- - -

Me ha costado encontrar información adecuada en inglés y menos en español, pero al final, gracias al blog de Abdul Qabiz hallé el script adecuado.

createEmptyMovieClip("mc",getNextHighestDepth());
var _mcl:MovieClipLoader = new MovieClipLoader();
_mclListener = new Object();
_mclListener.onLoadInit = function(target:MovieClip) {
    var _lv:LoadVars = new LoadVars();
    _lv.decode(target._url.split("?")[1]);
    _root.videoplayer_mc.contentPath = “http://www.youtube.com/get_video.php?”+”video_id=”+_lv.video_id+”&t=”+_lv.t;
    _mcl.unloadClip(target);
};
_mcl.addListener(_mclListener);
_mcl.loadClip(”http://es.youtube.com/v/2OBZHB5I89A”,mc);

Lo he retocado un poco, pero el mérito es casi todo de Abdul. Y digo casi todo por que cuando pruebas el script en su versión AS2, este no funciona en Internet Explorer, aunque si en Firefox y Ópera. Y la solución la da un comentario del post, escondido casi al final de los 99 que tiene, (uff¡¡¡). Solo había que sustituir “onLoadStar” por “onLoadInit” en la cuarta linea: _mclListener.onLoadInit = function(target:MovieClip) {

El script de ejemplo está pensado para que funcione junto con el componente MediaPlayer que viene por defecto en el FLash8 y CS3.

Solo hay que arrastrarlo desde la pestaña de componentes al escenario, darle un nombre de movieclip, en mi caso “videoplayer_mc“, y añadir el script en el mismo frame pero en otra capa. Todo en la linea principal de tiempo.

Antes se podía acceder a los videos de Youtube añadiendo como parámetro de url, la página propia del video. Por ejemplo: “http://es.youtube.com/v/2OBZHB5I89A”.

Pero desde hace un tiempo esto no es suficiente y hay que añadir un parámetro más, que se obtiene en la respuesta del servidor de Youtube.

Para ver de que hablo:

La URL http://es.youtube.com/watch?v=2OBZHB5I89A también se puede escribir de esta manera: http://es.youtube.com/v/2OBZHB5I89A.

Simplemente se ha sustituido la cadena “watch?v=” por “/v/“.

Cuando se solicita la nueva dirección, el navegador devuelve en la barra de direcciones esta otra ruta: http://es.youtube.com/swf/l.swf?video_id=2OBZHB5I89A&rel=1&eurl=&iurl=http%3A//s3.ytimg.com/vi/2OBZHB5I89A/default.jpg&t=OEgsToPDskLL1pfly-W5a5NQnX3gbuKO

Donde lo que nos interesa se encuentra al final, bajo el valor de la variable “t“.

El script simplemente lo captura y monta el url necesario.

Os podeis bajar un ejemplo .fla: videoyoutube.zip.

43 Responses to “Cargar un video de Youtube en un player de Flash con ActionScript v.2 (AS2)”

  1. Javier ripoll on Mayo 22nd, 2008 at 3:05 pm

    Hola:
    Estoy intentando insertar un video y no puedo.
    Directamente es que no me sale ni el reproductor.
    Me puedes enviar algun archivo de ejemplo??

    Gracias

  2. Añadido archivo de ejemplo al final del post.

    Saludos

  3. Hola antes que nada quiero agradecerte por el código y quisiera preguntarte si se puede agregar una forma de controlar la reproducción, tipo play y stop, como, hago si quiero poner mas de un video. saludos. y muchas gracias

  4. En realidad, el .fla lo que contiene es un componente de reproductor de videos.
    El script le dice el nombre y la ruta en internet para descargarlo y ya está.
    Si en vez del componente que hay en el .fla colocas otro con controles de reproducción, ya lo tienes.
    Y si quieres un selector de videos, pues ya hay que currarse un script para ello. Pero para nada dificil.

  5. muchas gracias por tu ayuda. saludos

  6. muchas gracias al fin lo encontre!!!
    un dato por resaltar es q cuando colocas el URL del video tiene q ser de esta manera:

    _mcl.loadClip(”http://es.youtube.com/v/XXXXXXX”,mc);

    obviamente el ‘xxxxxx’ es la ID del video!!
    acuerdate tiene q solo copiar la Id nada mas!
    thank you!

    si pones asi no funciona!

    _mcl.loadClip(”http://www.youtube.com/v/XXXXXXX”,mc);

  7. Gracias!

    Te agradezco mucho por la explicación tan clara y el ejemplo con el script, fue de gran ayuda. Me he pasado mucho tiempo buscando, con respuestas en otros foros que no han hecho nada más que marear más las cosas ;)

    Saludos!

  8. ;-D
    Pues lo que me ha pasado a mi también. A veces no entiendo como hay problemas cuya solución es tan complicada de encontrar. En esos casos acabo escribiendo un post que como poco siempre acercará a gente agradecida.
    Saludos

  9. hola disculpa la molestia sabe kiero ke me ayude en algo esta muy bueno el reproductor de videos de youtube pero lo ke molesta es ke para cada video tengo ke acer uno de esos no seria posible ke funciona a traves de una variable o de un root yo kiero ke salga asi ejemplo:
    http://eliseo.ueuo.com/edu/repro.swf?video=Rvs8UAzXWn0
    pero no reproduce nada como aria eso yo le puse:
    createEmptyMovieClip(”mc”,getNextHighestDepth());
    var _mcl:MovieClipLoader = new MovieClipLoader();
    _mclListener = new Object();
    _mclListener.onLoadInit = function(target:MovieClip) {
    var _lv:LoadVars = new LoadVars();
    _lv.decode(target._url.split(”?”)[1]);
    _root.videoplayer_mc.contentPath = “http://www.youtube.com/get_video.php?”+”video_id=”+_lv.video_id+”&t=”+_lv.t;
    _mcl.unloadClip(target);
    };
    _mcl.addListener(_mclListener);
    _mcl.loadClip(”http://es.youtube.com/v/”+_root.video+”",mc);

    plis ayudame como aria eso

  10. Hola Eliseo
    Mira para pasar una variable en una URL la página debe tener la extensión htm, html, php, asp, y otras mas, pero no swf como en tu ejemplo.

    Podría ser así
    http://eliseo.ueuo.com/edu/repro.php?video=Rvs8UAzXWn0

    Mediante php o javascript capturas el valor de la variable video y lo añades en el tag object del swf mediante el parámetro FlashVars.

    Y finalmente dentro del swf recuperas la varible mediante actionscript.

    Ya se que es una explicación muy abreviada, pero de verdad que no dispongo de tiempo para montar un ejemplo operativo.

    Saludos

  11. Hola Administrador,

    Yo encontr por ahi el flashtube usa lineas parecidas a el codigo que manejas en el ejemplo, peo no funciona, yo soy novato, pero este script (flashtube) que encontre es practicamente lo que necesito, no se si tengas tiempo de echarle un vistazo y hacerlo funcionar esta completo solo que no se lo que este fallando, este script creo que ayudara a muchos de los que aqui pretenden reproducir varios videos en un solo swf.

    Me podrias proporcionar tu correo para enviarte el script completo?

    pd. Solo funciona lo de cargar las imagenes y el titulo pero no repruduce los video, me imagino que es cuestion de cambiar algo que youtube cambio ultimamente.

    Podrias ayudarme?

  12. Hola Alex.
    Creo que lo mejor es que subas a alguna parte el código y publiques por aquí el enlace para descargarlo.
    Si yo no puedo mirarlo, quizás algún usuario de la web pueda ayudarnos.
    Saludos

  13. Muy bueno el codigo, me costo encontrar el ejemplo, pero una vez lo vi todo funciona perfecto.

    Una cosa solo, como se poria meter ahy los botones de control???

    El play y demas?

    venga un abrazo y de nuevo muchas gracias

  14. Puff, si no se utiliza un componente ya diseñado, entonces hay que currarse toda la programación. Diseñar los botones y añadir los scripts con las clases que gestionan los videos.
    Es igual que hacer funcionar un mp3, solo que el URL aunque sea confuso es el de un video.

  15. hola Administrador; gracia por la molestia pero la verdad ke me digas eso de php no doy mas aun soy novato pero eh visto en otros casos, ya se ke se usa los flashvars pero lo ke no consigo saber es ke es ves de la id del video de youtube ejem(http://es.youtube.com/v/XXXXXXXX); lo ke me gustaria ke me digas en es lo ke va en este caso en ves de XXXXXXXX para usar l flashvar asi cargar distintos videos gracias de antemano

  16. Eliseo, carga cualquier página de Youtube que tenga un video y mira la dirección en la barra de direcciones de tu navegador.
    verás un URL similar a este:
    http://es.youtube.com/watch?v=2OBZHB5I89A
    o a este:
    http://www.youtube.com/watch?v=dYP-wBaqQAI

    Lo que hay después del signo igual (=) es lo que se necesita para que el script, después capture la variable “t” y proporcione el enlace directo al video flv.

  17. y como respuesta a un foro se puede?

  18. ?

  19. eh sergiomas no me referi a eso yo a lo ke me refiero es ke como le ago para ke desde una variable externa del php, reconosca el flash para reproducirlo el video
    www/edu/repro.php?video=Rvs8UAzXWn0
    qu se visualise de esta maneramas no directo en el flash osea yo kiero un repro para varios videos a la ves no solo para uno plis ayuden pes

  20. Eliseo, si quieres un reproductor para listas de video, prueba:
    http://www.jeroenwijering.com/?item=JW_FLV_Media_Player

    También puedes crear una cuenta en Youtube y aceder a una utilidad para crear un player con playlist

  21. sergiomas pero yo kiero pes un reproductor propio
    asi como este es mio
    http://eliseo.ueuo.com/repro.swf
    pero el videos de youtube es :
    http://www.youtube.com/watch?v=E85IFgYpI8A
    eso reproduce au tomatica mente pero lo ke yo kiero
    es ke me ayuden a reproducir varios videos en el mismo reproyo la url del video lo agregue atraves de parametros no se si puedas ayudarme como ago un parametro externo

  22. holas

  23. No acabo de entenderte y no se si es por que escribes sin puntos ni comas como en un sms o por que no te explicas bien.
    Si quieres ayuda para programar un reproductor multivideo no puedo ayudarte.

  24. Hola Administrador;
    Todo me funciona correcto pero el reproductor me sale sin ningun tipo de boton de control del video, no me importa hacerlo pero que codigo pongo para pausar el video o para pararlo?

    Gracias

  25. Javier, en el ejemplo he utilizado el componente por defecto que no tiene botones, pero cámbialo por el que viene completo.
    Le pones el mismo nombre de instancia, y ya está.

  26. Hola administrador

    En primer lugar agradecer vuestra información. Que visto lo que hay por hay supera con crecesv en calidad.

    No soy ninguna lumbrera en programación. Solo un diseñador grafico y animador que intenta colocar sus videos youtube en su web.

    He probado el tema del fatastico scrip y el componente mediaplayer. Me funciona de maravilla localmente, pero en cuanto lo publico en mi servidor nada de nada. Estoy haciendo alguna tonteria que no se ver?

    Agradezco vuestra ayuda de antemano.

  27. Pinko, seguro que hay algo que has pasado por alto.

  28. Perfecto, ya me saio, Gracias.
    Una pregunta;
    Sin este script hay otra manera de hacerlo y carga bien incluso pone el player de youtube en tu flas y tal, mi pregunta es:
    Cuando pones varios no se van el primero que has puesto o sigue oyendose el sonido, sabes como hacerlo de esa manera.

    Gracias

  29. No entiendo bien tu pregunta.
    Si el problema es que al cargar un segundo video se sigue oyendo o viendo el primero, lo que pasa es que no has eliminado la instancia del player anterior. Y eso es un problema de programación actionscript.

  30. Bueno soy yo otra vez Sergio (o a quien pueda ayudarme).

    Intento dar mas detalles de mi asunto.
    Tengo una estrucrura de web en la que un Swf principal va llamando a otros contenidos en una carpeta “archives” y los compone, dentro de un clip vacio por medio de un loadmonvie. Cuando publico una de estos swf independientemente (y lo veo localmente) la cosa funciona. Veo la pelicula sin problemas. Cuando publico el swf principal ya no funciona.

    Podeis darme alguna solucion? Gracias por todo

  31. hola muy buenas llevo tiemo trabajando con flash y youtube.
    y el problema me ha surgido cuando he intentado pasar por xml links de los videos de youtube.(en plan galeria)

    cuando cargo un video:

    this.createEmptyMovieClip(”mc”,2);
    mc.loadMovie(”http://www.youtube.com/v/M9IFJ3KRmMM&hl=es&fs=1″);

    para eliminarlo utilizo:
    mc.destroy();

    mi problema viene cuando necesito n videos de youtube.
    this.createEmptyMovieClip(”mc”,x); x tiene que ir cambiando porke si es el mismo valor que el anterior no funciona.

  32. Hola, lo primero es agradecerte el código y las explicaciones, porque me han servido perfectamente y he conseguido insertar un vídeo de YouTube en mi pequeña web en Flash.

    Pero ahora tengo un par de problemillas, algunos ya los han comentado antes y creo que sería interesante publicar otro post ampliando las posibilidades. Sobra decir que te estaría muy agradecido, y supongo que el resto de la comunidad también.
    El primer problema que me he encontrado es el tamaño del vídeo, he intentado aumentarlo mediante la transformación libre del componente MediaDisplay, pero no ha funcionado. Luego he buscado en el código por si en algún sitio se le indica el tamaño que debe tener, pero tampoco he visto nada, así que hasta ahí he llegado. A ver si puedes iluminarme un poco.

    Con ese primer problema ya habrás supuesto que no soy un crack de ActionScript ni de la programación en general, pero me esfuerzo antes de postear sin ton ni son. ;)

    También me ha parecido necesario incluir unos botones básicos de reproducción, y he leído el comentario que hacías más arriba sobre utilizar otro componente que ya posea esos controles. Supongo que me equivoqué totalmente o algo he hecho mal, porque he intentado sustituir el MediaDisplay por el MediaPlayback (no me he olvidado de darle nombre a la instancia) y no me ha funcionado nada bien: aparece el reproductor en blanco y se ve que el vídeo está como por detrás. Vamos, un desastre.

    Creo que aumentar el tamaño del vídeo y ponerle controles puede resultar interesante para todo el mundo, por eso te sugería que igual te merece la pena hacer un post sobre ello. Si no es así, a ver si puedes al menos echarme una mano.

    Gracias anticipadas, un saludo.

  33. Bueno, pues resulta que sí, que estaba haciendo algo mal y como ya te dije que no era un crack de la programación, pues tampoco lo soy del Flash, porque sólo tuve que ir al Inspector de Componentes y ya vi que podía decirle que me dejase tocar el tamaño, así que ya he solucionado los dos problemas.

    Sin embargo, tengo una pregunta: el componente tiene marcado por defecto que utilice el tamaño predefinido del vídeo, y me ha sorprendido que sea tan pequeño. ¿Realmente es ese el tamaño original que tiene en YouTube?

    Gracias de nuevo.

  34. Hola Barnikel.
    Gracias a tí por compartir el problema y la solución.
    Efectivamente el tamaño del video original es bastante pequeño aunque eso está cambiando últimamente.
    Youtube ya permite subir videos de más calidad y seguramente en breve dispondrá de opciones para mostrar el mismo video en varias calidades.

  35. Hola!hay algo que no me queda muy en claro con el tema de las URL porque en el ejemplo hay dos URL distintas.
    esta URL ”http://es.youtube.com/v/2OBZHB5I89A” es la del video y la otra de donde es???
    Muchas Gracias!

  36. La primera url corresponde a la página de youtube donde se visualiza el video, y la segunda url es el enlace directo al archivo de video.

  37. Saludos a todos.
    He seguido al pie de las instrucciones todo los pasos pero al hacer la prueba me sale el siguiente error:

    Error al abrir la URL ‘http://www.youtube.com/get_video.php?video_id=lulvN1aIQ3A&t=undefined’

    No me esta recogiendo la variable t, alguien sabe que puede estar pasando ya ue con el script de ejemplo me pasa lo mismo.

  38. Cierto.
    Youtube ha cambiado su código.
    Habrá que investigar otra vez.

  39. hola, primero darte la enhorabuena por el código, me funcionó desde el primer dia y gracias a gente como tu, torpes como nosotros podemos avanzar poco a poco :P
    segundo, si que han cambiado el codigo, así que la fiesta se ha terminado por el momento :( pero yo me pongo manos a la obra a ver si puedo aportar algo!
    gracias por el código anterior!!! Saludos

  40. Supongo que utilizando la API de Youtube se puede acceder al flv.
    Lo que está claro es que Youtube no querrá convertirse en un almacén de archivos de vídeo y necesitará informar al usuario que visualice un vídeo de que este está alojado en Youtube, independientemente del player que utilice. Por que si no se le escaparía de las manos cualquier modelo de negocio.
    Espero no tener que andar buscando métodos alternativos de descargar vídeos de youtube cada dos por tres.

  41. [...] Lo mejor sería usar su propia API por que así se evita que cualquier cambio en su sistema invalide nuestros anteriores scripts, como ya me ha pasado. [...]

  42. Tengo un problema y es que _lv.t me dice que es undefined. Qué es lo que pasa?

  43. perdon, ya he visto que youtube ha cambiado y se esta trabajando en ello.

Leave a Reply