TOP

Red5 Creare un’applicazione di videoconferenza in Flash Actionscript 2 e Java

In questo articolo spiegherò, nel modo più semplice possibile, come realizzare un’applicazione di videoconferenza con Red5, in cui l’interfaccia client è realizzata in Flash Actionscript 2. Spero che questo articolo possa essere la “base” per i vostri futuri lavori con Red5.

Il tipo di videoconferenza che andremo a realizzare è uno a molti, ciò significa che c’è un utente che, tramite la propria webcam e microfono, trasmette in diretta un flusso audiovisivo e quest’ultimo può essere visionato da un certo numero di spettatori online.

Prima di partire direttamente con il codice, vediamo di capirne in linea generale l’architettura e la logica.

Scenario della nostra videoconferenza con Red5

Nel nostro esempio di scenario abbiamo un esperto di marketing che è relatore di un seminario online intitolato “Strategie di Marketing Vincenti“. L’esperto trasmette il suo seminario in diretta dal suo ufficio di Roma e partecipano all’evento altri quattro utenti:

  • un direttore di una banca di Torino
  • due studenti della Facoltà di Economia di Milano
  • un promotore finanziario in viaggio sull’Eurostar Torino – Roma

Sia l’esperto di marketing che gli altri quattro utenti sono collegati alla rete di internet con una connessione a banda larga.

Per realizzare una semplice applicazione di videoconferenza “uno a molti” dove c’è un regista che trasmette e tanti che si connetto per ricevere il video abbiamo bisogno di tre elementi:

  • un’applicazione Flash per la regia: è il programma utilizzato dal relatore. Principalmente si occupa di trasmettere il video e l’audio catturato da una webcam e microfono al server multimediale.
  • un server multimediale: riceve il video trasmesso dalla regia e lo ritrasmette a tutti gli utenti connessi in tempo reale.
  • un’applicazione Flash per gli spettatori: è il programma utilizzato da chi guarda il seminario online. Esso riceve il video trasmesso dal server e lo visualizza sul browser.

La figura sottostante rappresenta lo scenario proposto nelle righe precedenti:
Architettura Videoconferenza Red5 - Webtv

Paragone tra Televisione e Web TV

In maniera più generale e riferendoci a titolo esemplificativo ad un caso che ci accompagna tutti i giorni, la nostra applicazione flash per gli spettatori può essere meramente paragonata alla televisione terrestre.
La televisione rappresenta lo strumento tramite il quale l’utente interagisce (aumentando/diminuendo il volume, cambiando canale, attivando il televideo etc) in base alla sua esigenza e permette di visualizzare i programmi trasmessi da uno studio televisivo. Ma attenzione, per poter funzionare correttamente la televisione deve essere collegata all’antenna, perché da sola non può ricevere e visualizzare i flussi audiovisivi trasmessi in diretta o differita. Quindi, essa riceve tale flusso da appositi trasmettitori posti sulla superficie terrestre che utilizzano come mezzo di trasmissione le onde radio.

In conclusione, il server multimediale Red5 si può paragonare al trasmettitore mentre le onde radio alla connessione ad internet, la televisione all’applicazione flash per gli spettatori e gli studi televisivi all’applicazione flash per la regia.

Un aspetto fondamentale deve ancora essere messo in luce per quanto riguarda il formato video utilizzato nel nostro sistema di videoconferenza. E’ ben noto a tutti che al giorno d’oggi esistono diversi formati video (avi, divx, 3gp per cellulari etc) ma nell’ambito web oggi il formato video più diffuso è l’FLV(Flash Video). Tale formato video è così diffuso grazie soprattutto al suo ottimo rapporto qualità/peso. Ad esempio, grossi portali come YouTube e Google Video adottano tale formato per i loro video.

L’applicazione flash per la regia

Tramite il software Adobe Flash Professional e il suo linguaggio Action Script è stata sviluppata l’interfaccia dell’applicazione flash per la regia.

Le principali funzioni di questa interfaccia sono:

  • connettersi al server multimediale tramite la rete internet
  • interfacciarsi con dispositivi hardware di tipo audio/video (webcam, microfono, videocamera)
  • creare un flusso dati (stream) di tipo audiovisivo contenente le informazioni catturate dalla videocamera e microfono
  • inviare il flusso audiovisivo creato al server multimediale in tempo reale attraverso la rete internet

Grazie alla classe NetConnection messa a disposizione dal linguaggio Action Script è stato indicato all’applicazione di connettersi al server multimediale Red5 attraverso la rete di internet e il protocollo applicativo RTMP.
Una volta connessi correttamente al server multimediale, tramite le classi Microphone e Camera, l’applicazione si è interfacciata al microfono e alla videocamera collegati al pc. Infine tramite la classe NetStream è stato predisposto un flusso audiovisivo e di seguito è stato compresso e spedito al server multimediale in tempo reale tramite il metodo NetStream.publish(streamname). Per creare un riferimento a un oggetto Camera, si utilizza il metodo Camera.get() mentre per far riferimento ad un oggetto Microphone utilizzare il metodo Microphone.get().

Nella figura è riportato uno screenshot dell’applicazione flash per la regia. Una volta completato il caricamento della pagina web, per iniziare a trasmettere in diretta è sufficiente cliccare sul pulsante “connetti“, il quale instaura la connessione al server multimediale Red5. Successivamente per iniziare a trasmettere online è indispensabile cliccare sul pulsante “trasmetti“.

Codice Actionscript per l’applicativo della Regia
// Oggetto necessario per instaurare la connessione al server
var nc:NetConnection=new NetConnection();
// Stream dedicato alla pubblicazione del flusso sul server
var out_ns:NetStream;
// Crea un oggetto Camera
var publisher_cam:Camera;  
// Crea un oggetto Microfono
var publisher_mic:Microphone;

/*** GESTIONE EVENTI PULSANTI ***/

// Disabilito pulsante trasmetti
recorder_btn.enabled=false;

// Pulsante Trasmetti
recorder_btn.onPress=function(){
    doPublish();
}
// Pulsante Connetti
connect_btn.onPress = function(){  
    doConnect();
}

/*** FINE GESTIONE EVENTI PULSANTI ***/



function init(){
    streamName_txt.text="stream1";
    server_txt.text="rtmp://localhost/oflaDemo";
    width_txt.text=320;
    height_txt.text=240;
   
}
init();


/* GESTIONE CONNESSIONE AL SERVER */
function doConnect(){
    status_txt.text="Connecting to "+ server_txt.text +"...\n";
    nc.connect(server_txt.text);
}

nc.onStatus = function(info){
    status_txt.text+="[INFO]" + info.code + "\n";
    // Se l'instaurazione della connessione è andata a buon fine
    if(info.code=="NetConnection.Connect.Success"){
        //Inizializzo lo stream in uscita
        out_ns = new NetStream(nc);
               
        status_txt.text+="[INFO] Connected to Red5 Streaming Server" + "\n";
               
        // Abilito il pulsante trasmetti
        recorder_btn.enabled=true;
               
        // Imposto le proprietà del video trasmesso dalla WebCam
        publisher_cam.setMode(width_txt.text, height_txt.text);
        // Creo un riferimento alla videocamera
        publisher_cam = Camera.get();
        // Creo un riferimento al microfono
        publisher_mic = Microphone.get()
               
    }else{
        status_txt.text+="[ERROR]" + info.code;
    }
}

function doPublish(){
    publishStream(streamName_txt.text);
}

/* PUBBLICA LO USER STREAM SUL SERVER DI STREAMING */
function publishStream(username:String){
    status_txt.text+="[INFO] Publishing Started for " + username + "\n";
   
    // Collego la web cam all'oggetto
    // video presente sullo stage
    video0.attachVideo(publisher_cam)
   
    //Inserisco l'audio al flusso
    out_ns.attachAudio(publisher_mic);
   
    // Inserisco il video al flusso
    out_ns.attachVideo(publisher_cam);
   
    // Pubblico sul server Red5
    // il flusso audiovisivo
    out_ns.publish(username);
   
    out_ns.onStatus = function(info){
        status_txt.text+="[INFO]" + info.code + "\n";
    }
   
}
Applicazione Java per realizzare la Videoconferenza su Red5

Sul server multimediale Red5 è stata sviluppata un’applicazione in linguaggio Java con le seguenti caratteristiche:

  • attende su una determinata porta TCP, solitamente la 1935, che un client si connetta attraverso il protocollo applicativo RTMP
  • accetta la connessione, identifica il client e il tipo di applicazione richiesta (webtv, videoconferenza, etc)
  • riceve il flusso audiovisivo inviato dal client e lo ritrasmette a tutti gli utenti collegati a quella stessa applicazione

Nel nostro caso per semplicità, riutilizziamo l’esempio proposto da Red5 oflaDemo. Tale esempio, se non già presente, va posizionato sotto la cartella di installazione di red5, sotto il direttorio webapps. Se non sapete come installare gli esempi, leggete questo articolo “Far funzionare gli esempi su Red5 streaming server“.


Tutti gli esempi sono scaricabili al termine di questo articolo.

L’applicazione flash per lo spettatore

Tramite il software Adobe Flash Professional e il suo linguaggio Action Script è stata sviluppata l’interfaccia dell’applicazione flash per lo spettatore.

Le principali funzioni di questa interfaccia sono:

  • connettersi al server multimediale tramite la rete internet
  • richiedere di visualizzare lo stream pubblicato dalla regia
  • ricevere e visualizzare sul browser il flusso audiovisivo trasmesso dal server

Anche in questo caso, grazie alla classe NetConnection messa a disposizione dal linguaggio Action Script è stato indicato all’applicazione di connettersi al server multimediale Red5 attraverso la rete di internet e il protocollo RTMP. Una volta connessi correttamente al server, tramite la classe NetStream è stato indicato di ricevere un flusso audiovisivo e di visualizzarlo sul browser.

Codice Actionscript per l’applicativo dello spettatore
/* Precompilo i campi di testo con l'indirizzo RTMP del server ed il nome
dello stream da riprodurre da riprodurre in streaming */

server_txt.text="rtmp://localhost/oflaDemo";
stream_name_txt.text="stream1";

// Creo oggetto NetConnection per instaurare la connessione al server
var nc:NetConnection=new NetConnection();
// Creo oggetto NetStream per riprodurre lo
// stream in entrata
var in_ns:NetStream;
//Url RTMP del server di streaming
var serverURI:String=server_txt.text;
//Flag, vale true se si è connessi al server
var connected:Boolean=false;

// Il pulsante Play è disabilitato all'inizio
play_btn.enabled=false;

/** Gestione Eventi sui pulsanti **/
//Pulsante Riproduci
play_btn.onPress=function(){
    if(connected==false)
        showError("Prima di ricevere il flusso audio/video è necessario collegarsi al server");
    else
        playFlvOnDemand(stream_name_txt.text);
}
//Pulsante connetti
connetti_btn.onPress=function(){
    doConnect();
}

/* GESTIONE CONNESSIONE AL SERVER */
function doConnect():Void{
    status_txt.text="Connecting to Red5 Streaming Server...\n";
    serverURI=server_txt.text;
    nc.connect(serverURI);
}

nc.onStatus = function(info){
       
    status_txt.text+="[INFO]" + info.code + "\n";
       
    // Se l'instaurazione della connessione è andata a buon fine
    if(info.code=="NetConnection.Connect.Success"){
        // Imposto il flag connected a true
        connected=true;
        // abilito il pulsante play
        play_btn.enabled=true;
        //Inizializzo l'oggetto NetStream
        in_ns = new NetStream(nc);
        status_txt.text+="[INFO] Connected to Red5 Streaming Server" + "\n";
               
    }else{
        status_txt.text+="[ERROR]" + info.code;
    }
}

// Funzione che riproduce uno stream pubblicato
// sul  server
function playFlvOnDemand(stream_name:String):Void{
    status_txt.text+= "[INFO] playFlvOnDemand called for" + stream_name +"\n";
               
    //Collego l'oggetto NetStream all'oggetto Video presente nello
        //stage per visualizzarlo
    my_video.attachVideo(in_ns);
               
    in_ns.onStatus = function(info){
        status_txt.text+= "[INFO]" + info.code +"\n";
    }
    // Riproduco il file FLV
        in_ns.play(stream_name);
                   
}

/* Gestione errori */
function showError(msg):Void{
    import mx.controls.Alert;
    Alert.show(msg, "Messaggio d'errore");

}
Download Esempi

39 comments. Leave a Reply

  1. Miro

    Ciao, volevo sapere con che cosa hai realizzato il disegno che mostra il funzionamento del server, e se per caso hai della documentazione dalla quale prendi spunto per creare i tuoi articoli?

    • Ciao!
      Il disegno è realizzato con Visio.
      Per gli articoli, purtroppo non sto prendendo spunto da nulla perché su internet non ci sono molti siti con degli esempi concreti. Li sto scrivendo in base a dei lavori che ho fatto due-tre anni fa ;-)

  2. tony

    a me non funziona. CONNECTION FAILED…

    qualche suggerimento ?

    • C’è qualche problema con la connessione al server Red5.
      Gli esempi forniti con Red5 ti funzionano?

      • tony

        adesso sono riuscito a far funzionare l’esempio ma si sente solo l’AUDIO (tra l’altro per pochi secondi) mentre il video NO.
        Ho un MAC OS 10.5

        Grazie.

        • Probabilmente bisogna impostare correttamente la webcame corretta, facendo click destro sull’applicazione Impostazioni -> Videocamera.

        • Luanlist

          Scusa, anche io ho il tuo stesso problema, come hai risolto?
          Grazie

  3. miro

    A cosa potrebbe essere dovuto il ritardo della trasmissione della voce?

    • I fattori potrebbero essere molteplici.
      In che condizioni stai testando l’applicativo? Sistema, connessione, etc

  4. Ciao, io sto provando ad usare red5, e finche faccio tutto in localhost funziona alla grande…

    Ho installato videowhisper per joomla e se mi connetto io che sono server tramite l’rmtp://localhost:8888/ecc… lui mi connette.

    Adesso ovviamente vorrei far collegare tutti, ma se inserisco il mio ip (che ho trovato tramite my-ip) non mi connette!! Sicuramente sbaglio io qualcosa, la mia connessione è tramite router di alice, dove ho gia aperto la porta 8888…

    Come ne esco??

    Grazie mille!!!!

    • Deve esserci qualche problema nella rete.
      Hai provato per caso a collegarti ad un altro server installato sulla tua macchina dall’esterno? (Es. server web, mysql, ftp etc).

  5. Pasquale

    Ciao ,
    prima di tutto volevo ringraziarti, il tuo tutorial è a prova di st…..do, quindi bravissima.
    Poi volevo chiederti , siccome ho fatto una prova , la qualità lascia un poso desiderare, come posso alzare la qualità ?

    • Ciao Pasquale,
      grazie!
      Prova ad usare il metodo setQuality della classe Camera :-)

  6. Silvia

    A me continua a dare: NetConnection.Connect.Failed.
    Ho scaricato Red5, istallato oflaDemo che funziona, scaricato la Regia…ma non si connettte al server. Red5 è settetato sulla porta 8080.

    • Ciao Silvia,
      lo esegui da un webserver? :-)

      • Anzi, mi sa che il problema è nell’URL dell’rtmp
        devi mettere rtmp://IP_SERVER:8080/appName

        se hai cambiato la porta di default, devi specificarlo nell’URL

        • Silvia

          Ok, ora funziona.

  7. paolo

    Ciao, ho fatto una prova in locale e funziona tutto!!!!
    Adesso devo metterlo nel mio sito, ho fatto delle prove in locale ho copiato la cartella oflaDemo sotto la tartella del mio sito /miosito/oflaDemo tramite mozilla sono entrato nel mio sito “http://192.168.0.2/miosito/Regista” per aprire la video conferenza ma non si connette ci sono dei parametri da modificare, se si sposta la cartella oflaDemo?

    • Ciao Paolo, non avevo visto il commento.
      Ci sei poi riuscito a farlo funzionare sul tuo sito?

  8. mario

    Ciao ragazzi, ma se volessi tetare l’esempio su scritto della conferenza, dove devo andare a mettere i file Action script ? ed ancora da quali file poi devono esserre chiamati ? Thanx.
    Scusate per le domande banali, ma adesso ho cominciato.

  9. Ciao Mario e Benvenuto su questo blog. ;-)
    Il file con estensione “FLA” che trovi negli esempi, è il file sorgente del programma Adobe Flash e ti serve se e solo se vuoi modificare qualcosa nell’esempio proposto e per fare queste modifiche devi conoscere un minimo l’ambiente di lavoro di Flash ed il linguaggio actionscript. Se invece vuoi soltanto testare l’esempio, non ti serve il “fla”.

    Per evitare messaggi di sicurezza sul flash player, ti converrebbe pubblicare i file html dello spettatore e della regia su un web server e poi richiamarli dalla tuo browser.
    I file che ti servono solo il file swf, il file html e basta. Non servono i file fla perché quelli sono i sorgenti.
    Altrimenti, apri direttamente i file html e se il flash player ti segnala un problema di sicurezza, clicca su impostazione, ti collegherai ad un sito dell’adobe dove dovrai impostare che quel file swf è un file sicuro.

    Spero di essere stata chiara in questo poema ;-) Se hai ancora bisogno scrivi!
    ciau

  10. Simone

    Ciao, scusami ma ho creato un sito di lezioni private. Come faccio a fare 15 collegamenti pear to pear? Ovvero 1 allievo – 1 studente, 1 allievo – 1 studente, etc… Senza passare dal mio server? Grazie e complimenti!

  11. Marco

    Con red5 e’ possibile fare conferenze molti a molti e quanta memoria/cpu/banda occorre ?

    • Si certamente. Per la memoria, banda, cpu dipende da quanti utenti prevedi di avere.

  12. Ma un tutorial su come far visualizzare un video on demand con flash e red5 esiste?

  13. Fgnm

    Salve, sto provando ad usare l’applicativo per la regia ma nonostante abbia istallato : Red5server , oflaDemo , e tutto il resto , la regia mi da sempre Netconnection.connect.failed
    ho provato anche afare un testport e sia sulla porta default che sulla 1935 mi da sucess ma quando scrivo nella regia rtmp://IP_server:8080/oflaDemo o rtmp://IP_server:1935/oflaDemo non si connette a Red5 qualcuno può risolvere il mio problema??

    N.B. tutte le demo di red5 server funzionano ferfettamente

    • Ciao! Hai provato a togliere il : e a farlo connettere direttamente a: rtmp://IP_server/oflaDemo ?

      • fgnm

        Si, ma non funziona lo stesso =( …….. altre idee per potermi aiutare…….questa app mi risolverebbe parecchi problemi.

        • Ma tu lato client il file html lo esegui tramite server web? tipo http://localhost/regia.html ? perché altrimenti potresti avere problemi di sicurezza….

          • fgnm

            Si lo eseguo dall’html ma lo stesso non funziona……… stavo pensando che forse è un problema di router. cioè dovrei aprire una qualche porta ??

  14. Giovanni

    Salve, come prima cosa ringrazio sinceramente per l’esempio proposto in quanto ha risolto uno dei problemi fondamentali comune a credo tutti i non esperti programmatori come me e cioè: “da dove inizio?”.

    Avrei però anche una domanda da fare: è possibile, in linea teorica, dare la possibilità allo spettatore di scegliere tra due traccie audio?

    La mia situazione è questa: ho un evento live che viene anche tradotto simultaneamente e vorrei trasmetterlo sia in lingua originale sia tradotto.

    Sarebbe fattibile in qualche modo?

    Grazie!

    • Ciao Giovanni,
      ti conviene creare due flussi audiovisivi su Red5 (esempio. liveIT e liveENG) e nell’applicazione client mettere un dropdown menu in cui fai scegliere all’utente a quale flusso audiovisivo iscriversi.

  15. PAOLO

    Ciao e complimenti ! C’è un modo per la versione spettatore farlo connettere in automatico senza l’ausilio del pulsante play ? Per la connessione ho risolto e si connette in automatico, ma per il play non riesco a farlo funzionare. Grazie in anticipo. Paolo

    • Basta che richiami la funzione playFlvOnDemand una volta instaurata la connessione con il server Red5, quindi qui:

      if(info.code==”NetConnection.Connect.Success”)

      aggiungi questo primo della chiusura dell’if

      playFlvOnDemand(stream_name_txt.text);

      bye bye

      • Ciao non funziona. Ti posto il listato dov’è l’errore ?

        // Creo oggetto NetConnection per instaurare la connessione al server
        var nc:NetConnection=new NetConnection();
        // Creo oggetto NetStream per riprodurre lo
        // stream in entrata
        var in_ns:NetStream;
        //Url RTMP del server di streaming
        var serverURI:String=server_txt.text;
        //Flag, vale true se si è connessi al server
        var connected:Boolean=true;

        // Il pulsante Play è disabilitato all’inizio
        play_btn.enabled=false;

        /** Gestione Eventi sui pulsanti **/
        //Pulsante Riproduci
        //play_btn.onPress=function(){
        //if(connected==false)
        //showError(“Prima di ricevere il flusso audio/video è necessario collegarsi al server”);
        //else
        //playFlvOnDemand(stream_name_txt.text);
        //

        //}
        //Pulsante connetti
        //connetti_btn.onPress=function(){

        //}

        /* GESTIONE CONNESSIONE AL SERVER */
        function doConnect():Void{
        status_txt.text=”Connecting to Red5 Streaming Server…\n”;
        serverURI=server_txt.text;
        nc.connect(serverURI);
        }

        //nc.onStatus = function(info){

        //status_txt.text+=”[INFO]” + info.code + “\n”;

        // Se l’instaurazione della connessione è andata a buon fine

        //if(info.code==”NetConnection.Connect.Success”){
        // Imposto il flag connected a true
        playFlvOnDemand(stream_name_txt.text=_root.room);
        //connected=true;
        // abilito il pulsante play
        //play_btn.enabled=true;
        //Inizializzo l’oggetto NetStream
        //in_ns = new NetStream(nc);
        //status_txt.text+=”[INFO] Connected to Red5 Streaming Server” + “\n”;

        //}else{
        //status_txt.text+=”[ERROR]” + info.code;
        //}
        //}

        // Funzione che riproduce un file FLV presente sul server
        function playFlvOnDemand(stream_name:String):Void{
        status_txt.text+= “[INFO] playFlvOnDemand called for” + stream_name +”\n”;

        //Collego l’oggetto NetStream all’oggetto Video presente nello
        //stage per visualizzarlo
        my_video.attachVideo(in_ns);

        in_ns.onStatus = function(info){
        status_txt.text+= “[INFO]” + info.code +”\n”;
        }
        // Riproduco il file FLV
        in_ns.play(stream_name);

        }

        /* Gestione errori */
        function showError(msg):Void{
        import mx.controls.Alert;
        Alert.show(msg, “Messaggio d’errore”);

        }

        Ti ringrazio anticipatamente

        Paolo G

        • Direi che hai un po’ esagerato nel commentare :-)

          nc.Onstatus deve rimanere altrimenti nn riesci a capire quando la connessione è stata instaurata con il server, inoltre nn devi nemmeno commentare in_ns altrimenti nn riceverai nessun stream in ingresso.

          In pratica devi solo aggiungere playFlvOnDemand(stream_name_txt.text=_root.room); e poi puoi cancellare il pulsante play

          nc.onStatus = function(info){

          status_txt.text+=”[INFO]” + info.code + “\n”;

          // Se l’instaurazione della connessione è andata a buon fine
          if(info.code==”NetConnection.Connect.Success”){
          // Imposto il flag connected a true
          connected=true;
          // abilito il pulsante play
          play_btn.enabled=true;
          //Inizializzo l’oggetto NetStream
          in_ns = new NetStream(nc);
          status_txt.text+=”[INFO] Connected to Red5 Streaming Server” + “\n”;

          playFlvOnDemand(stream_name_txt.text=_root.room);

          }else{
          status_txt.text+=”[ERROR]” + info.code;
          }
          }

  16. Ciao e grazie per la pazienza. Perdona la mia ignoranza:

    io ho questo:

    server_txt.text=”rtmp://miosit/oflaDemo”;
    stream_name_txt.text=_root.room;

    // Creo oggetto NetConnection per instaurare la connessione al server
    var nc:NetConnection=new NetConnection();
    // Creo oggetto NetStream per riprodurre lo
    // stream in entrata
    var in_ns:NetStream;
    //Url RTMP del server di streaming
    var serverURI:String=server_txt.text;
    //Flag, vale true se si è connessi al server
    var connected:Boolean=false;

    // Il pulsante Play è disabilitato all’inizio
    play_btn.enabled=false;

    /** Gestione Eventi sui pulsanti **/
    //Pulsante Riproduci
    play_btn.onPress=function(){
    if(connected==false)
    showError(“Prima di ricevere il flusso audio/video è necessario collegarsi al server”);
    else
    playFlvOnDemand(stream_name_txt.text);
    }
    //Pulsante connetti
    //connetti_btn.onPress=function(){
    doConnect();
    //}

    /* GESTIONE CONNESSIONE AL SERVER */
    function doConnect():Void{
    status_txt.text=”Connecting to Red5 Streaming Server…\n”;
    serverURI=server_txt.text;
    nc.connect(serverURI);
    }

    nc.onStatus = function(info){

    status_txt.text+=”[INFO]” + info.code + “\n”;

    // Se l’instaurazione della connessione è andata a buon fine
    if(info.code==”NetConnection.Connect.Success”){
    // Imposto il flag connected a true
    connected=true;
    // abilito il pulsante play
    play_btn.enabled=true;
    //Inizializzo l’oggetto NetStream
    in_ns = new NetStream(nc);
    status_txt.text+=”[INFO] Connected to Red5 Streaming Server” + “\n”;

    }else{
    status_txt.text+=”[ERROR]” + info.code;
    }
    }

    // Funzione che riproduce un file FLV presente sul server
    function playFlvOnDemand(stream_name:String):Void{
    status_txt.text+= “[INFO] playFlvOnDemand called for” + stream_name +”\n”;

    //Collego l’oggetto NetStream all’oggetto Video presente nello
    //stage per visualizzarlo
    my_video.attachVideo(in_ns);

    in_ns.onStatus = function(info){
    status_txt.text+= “[INFO]” + info.code +”\n”;
    }
    // Riproduco il file FLV
    in_ns.play(stream_name);

    }

    /* Gestione errori */
    function showError(msg):Void{
    import mx.controls.Alert;
    Alert.show(msg, “Messaggio d’errore”);

    }

  17. Ciao e grazie per la pazienza. Perdona la mia ignoranza:

    io ho questo:

    server_txt.text=”rtmp://miosito.mio/oflaDemo”;
    stream_name_txt.text=_root.room;

    // Creo oggetto NetConnection per instaurare la connessione al server
    var nc:NetConnection=new NetConnection();
    // Creo oggetto NetStream per riprodurre lo
    // stream in entrata
    var in_ns:NetStream;
    //Url RTMP del server di streaming
    var serverURI:String=server_txt.text;
    //Flag, vale true se si è connessi al server
    var connected:Boolean=false;

    // Il pulsante Play è disabilitato all’inizio
    play_btn.enabled=false;

    /** Gestione Eventi sui pulsanti **/
    //Pulsante Riproduci
    play_btn.onPress=function(){
    if(connected==false)
    showError(“Prima di ricevere il flusso audio/video è necessario collegarsi al server”);
    else
    playFlvOnDemand(stream_name_txt.text);
    }
    //Pulsante connetti
    //connetti_btn.onPress=function(){
    doConnect();
    //}

    /* GESTIONE CONNESSIONE AL SERVER */
    function doConnect():Void{
    status_txt.text=”Connecting to Red5 Streaming Server…\n”;
    serverURI=server_txt.text;
    nc.connect(serverURI);
    }

    nc.onStatus = function(info){

    status_txt.text+=”[INFO]” + info.code + “\n”;

    // Se l’instaurazione della connessione è andata a buon fine
    if(info.code==”NetConnection.Connect.Success”){
    // Imposto il flag connected a true
    connected=true;
    // abilito il pulsante play
    play_btn.enabled=true;
    //Inizializzo l’oggetto NetStream
    in_ns = new NetStream(nc);
    status_txt.text+=”[INFO] Connected to Red5 Streaming Server” + “\n”;

    }else{
    status_txt.text+=”[ERROR]” + info.code;
    }
    }

    // Funzione che riproduce un file FLV presente sul server
    function playFlvOnDemand(stream_name:String):Void{
    status_txt.text+= “[INFO] playFlvOnDemand called for” + stream_name +”\n”;

    //Collego l’oggetto NetStream all’oggetto Video presente nello
    //stage per visualizzarlo
    my_video.attachVideo(in_ns);

    in_ns.onStatus = function(info){
    status_txt.text+= “[INFO]” + info.code +”\n”;
    }
    // Riproduco il file FLV
    in_ns.play(stream_name);

    }

    /* Gestione errori */
    function showError(msg):Void{
    import mx.controls.Alert;
    Alert.show(msg, “Messaggio d’errore”);

    }

    Ho provato ad inserire quello che mi ha detto ma non funziona. Mi puoi dire dove devo inserirlo esattamente e se devo eliminare tutto il pulsante.

    Grazie

    Paolo

  18. Ciao ho risolto … ti ringrazio moltissimo :) Paolo

Leave a Reply

Your email is never published nor shared.

You may use these HTML tags and attributes:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>