Ayuda con reproductor aac

Buen Día, tengo un una radio on-line con un reproductor en flash con soporte para aac lo cual me funciona de maravillas, el problema consiste en que a la medianoche apagamos los equipos y la radio web queda en off sin música y no estoy dispuesto a pagar el presupuesto de un servicio de auto DJ. Entonces se me ocurrió crear una lista de canciones en mp3 las cuales subiría a un FTP para que se reproduzcan solo cuando la radio esta off-line. Tengo muy pocos conocimientos en flash. Este es el código con el cual se reproduce la radio en aac:
function initialize()
{
    _root.connect.streamStr.text = "http://live1.larastreaming.com:8227";
    _root.connect.connectStr.text = "rtmpt://stream.telvi.de:80/shoutcast";
    _root.connect.connectButton.onPress = _root.doConnect;
    _root.connect.connectButton2.onPress = _root.doConnect;
    metaDataValues.title = "";
    metaDataValues.genre = "";
    metaDataValues.name = "";
    metaDataValues.url = "";
    doConnect();
    trace (System.capabilities.version);
}
function doConnect()
{
    if (nc == null)
    {
        nc = new NetConnection();
        nc.onStatus = function (infoObject)
        {
            trace ("nc: " + infoObject.code + " (" + infoObject.description + ")");
            if (infoObject.code == "NetConnection.Connect.Success")
            {
                playShoutcast();
            } // end if
        };
        nc.connect(_root.connect.connectStr.text);
        enablePlayControls(true);
    }
    else
    {
        if (nsPlay != null)
        {
            nsPlay.attachVideo(null);
            nsPlay.attachAudio(null);
        } // end if
        nsPlay = null;
        nc.close();
        nc = null;
        updateMetaData();
        enablePlayControls(false);
    } // end else if
} // End of the function
function enablePlayControls(isEnable)
{
} // End of the function
function playShoutcast()
{
    nsPlay = new NetStream(nc);
    nsPlay.onStatus = function (infoObject)
    {
        trace ("nsPlay: " + infoObject.code + " (" + infoObject.description + ")");
    };
    nsPlay.onHeaderData = function (infoObject)
    {
        trace ("onHeaderData");
        for (var _loc2 in infoObject)
        {
            trace ("  " + _loc2 + " = " + infoObject[_loc2]);
        } // end of for...in
        if (infoObject["icy-genre"] != undefined)
        {
            metaDataValues.genre = infoObject["icy-genre"];
        } // end if
        if (infoObject["icy-name"] != undefined)
        {
            metaDataValues.name = infoObject["icy-name"];
        } // end if
        updateMetaData();
    };
    nsPlay.onMetaData = function (infoObject)
    {
        trace ("onMetaData");
        for (var _loc2 in infoObject)
        {
            trace ("  " + _loc2 + " = " + infoObject[_loc2]);
        } // end of for...in
        if (infoObject.StreamTitle != undefined)
        {
            metaDataValues.title = infoObject.StreamTitle;
        } // end if
        if (infoObject.StreamUrl != undefined)
        {
            metaDataValues.url = infoObject.StreamUrl;
        } // end if
        updateMetaData();
    };
    nsPlay.setBufferTime(10);
    nsPlay.play(_root.connect.streamStr.text);
    soundRemote.attachAudio(nsPlay);
} // End of the function
this.mc_vc.show_percent = true;
this.mc_vc.shadow = {distance: 0, angle: 0, color: 0};
var nc = null;
var nsPlay = null;
var metaDataValues = new Array();
Stage.align = "TL";
Stage.scaleMode = "noScale";
_global.style.setStyle("backgroundColor", "0xFFCC00 ");
initialize();
_root.musicPlayer.gotoAndPlay(1);
musicPlays = true;
Y mientas pruebo el reproductor aac en la vista previa si la radio esta on-line aparece la ventana output diciendo lo siguiente:
WIN 10,1,52,14
nc: NetConnection.Connect.Success (Connection succeeded.)
nsPlay: NetStream.Play.Reset (Playing and resetting http://live1.larastreaming.com:8227.)
nsPlay: NetStream.Play.Start (Started playing http://live1.larastreaming.com:8227.)
onHeaderData
  icy-metaint = 32768
  uri = ICY 200 OK
  msg = OK
  icy-notice2 = SHOUTcast Distributed Network Audio Server/Linux v1.9.8<BR>
  icy-name = Orban Opticodec-PC Encoder
  icy-pub = 1
  icy-genre = Various
  status = 200
  icy-br = 28
  protocol = ICY
  content-type = audio/aacp
onMetaData
  StreamUrl =
  StreamTitle = Hi-Fi Internet Stream
nsPlay: NetStream.Buffer.Full...

1 Respuesta

Respuesta
1
Lo que tu necesitas es un desarrollos dinámico para ir cambiando las canciones desde un XML y crear un Play List. Los desarrollos dinámicos son muy a la medida, muy específicos para cada sistema, por lo tanto requieren de varios días de trabajo y así mismo, son relativamente caros. Si tienes muy pocos conocimientos de flash es muy difícil que te pueda ayudar a solucionarlo, ya que para lo que tu requieres, se necesita de un nivel avanzado de ActionScript. Necesitas saber programar con cosas básicas como if () {}; for () {}; i++; eval(); arreglos, switch, entre otros.
Si cuentas con la plataforma ya desarrollada del playlist, te puedo ayudar a revisarla, corregirla y montarla a tu estación de radio. Si no pudieras desarrollarla, te aconsejo que busques algún play list en internet gratuito (que los debe haber) o que compres alguno. Si tu búsqueda fue infructuosa, cotiza la ayuda de algún desarrollador que use ActionScript y checa los costos para saber cual es más conveniente a tu proyecto según tu presupuesto. (Obviamente si es un proyecto libre te aconsejo los programas ya hechos que hay en internet y que son de uso libre)
Yo tengo conocimiento en Quick Basic pero en flash muy poco ya que en el curso de programación al que hacisto vimos las herramientas de diseño que posee por lo cual pude diseñar un skin acorde a mi web para el reproductor en aac partioendo de un reproductor estándar. Yo tengo un reproductor flash que reproduce mp3 desde un archivo externo XML pero no se como hacer para que se inicie cuando mi radio este en off. te adjunto mi actual reproductor web y este que es un reproductor que encontré en la web el cual busca las direcciones de los archivos desde un XML externo.  los ubi a megaupload para que los veas:  http://www.megaupload.com/?d=MYBGD30W
Ah, pues ahí está más fácil! Imaginemos que tu archivo se llama "mi_reproductor.swf" una vez que hayas metido todas las canciones en tu lista del XML, y las hayas subido al ftp, (en la carpeta que te indique el reproductor) en tu código de tu reproductor aac, buscas las últimas líneas y pones el siguiente código:
Buscas la función "doConnect() {" y ahí colocas una condición al momento de que determina que la condición es null, la condición actual establece que cada vez que te intentas comunicar con el servidor y no se logra conectar, lo vuelve a intentar creando una nueva conexión. Lo que tienes que hacer ahora es colocarle en esa misma condición, una indicación de que si no se logra conectar, comience a tocar el archivo "mi_reproductor.swf" esto lo puedes hacer cargándolo como un movie clip externo (necesitas saber como cargar un swf externo, es muy fácil).
El código quedaría más o menos así (no lo puedo probar así que no estoy seguro de que funcione, tu archivo está ofuscado o es versión CS5) 
function doConnect () { 
    if (nc == null) {
        nc = new NetConnection(); 
//--------
        nc.onStatus = function (infoObject) { 
            trace ("nc: " + infoObject.code + " (" + infoObject.description + ")"); 
            if (infoObject.code == "NetConnection.Connect.Success") { 
                playShoutcast(); 
            } else {
<span style="white-space: pre;"> nombre_del_MC_vacio</span>.loadMovie("mi_reproductor.swf");
<span style="white-space: pre;"> </span>    }
        }; 
        nc.connect(_root.connect.connectStr.text); 
        enablePlayControls(true); 
    } else { 
        if (nsPlay != null) { 
            nsPlay.attachVideo(null); 
            nsPlay.attachAudio(null); 
        } else {
<span style="white-space: pre;"> </span>    nombre_del_MC_vacio.loadMovie("mi_reproductor.swf");
<span style="white-space: pre;"> </span>}
        nsPlay = null; 
        nc.close(); 
        nc = null; 
        updateMetaData(); 
        enablePlayControls(false); 
    } 
}
Espero te funcione... 
P.DE, no copies y pegues el código solamente, adáptalo en la parte de tu código dónde comienza la función doConnect. No lo hagas sobre el archivo original, sino sobre una copia. Necesitas crear un emptyMovieClip para insertar el swf, ya sea con código o con un objeto. Si es con código la función sería:
this.createEmptyMovieclip.loadMovie("nombre_de_tu_reproductor.swf"); 
si es con un objeto sería: 
nombre_del_MC_vacio.loadMovie("nombre_de_tu_reproductor.swf");
Gracias por tu rápida respuesta y predisposición, se nota que conoces del tema !, sigo dando vuelta yo no se como crear un emptyMovieClip, cuento encima con adobe flash en inglés(CS5). Guarde nuevamente los archivos pero en formato compatible con flash cs4. acá el link .saludos
Upss.. me falto el link aca esta:  http://www.megaupload.com/?d=Q0SV09WR
Prueba importando tu swf a un archivo nuevo. ¿Cómo hacerlo?
Lo que tienes que hacer es crear un nuevo archivo .fla luego toma la herramienta cuadro y dibuja en cualquier parte del stage un cuadro del tamaño de tu swf que quieres importar. Después lo conviertes a MoviClip y en el nombre de instancia lo llamas "contenedor" una vez creado el MC, creas un nuevo layer, en este layer colocas un nuevo keyframe, ahí vas a escribir las siguientes acciones:
contenedor.loadMovie("nombre_de_tu_archivo.swf");
Y con eso ya puedes cargar un nuevo swf, recuerda que deben de estar en la misma ruta que los demás!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas