TOP

Come creare una nuova applicazione lato server per Red5 0.9.1 Final in linguaggio Java con l’IDE offerto da Eclipse

Struttura delle cartelle in una nuova applicazione per Red5 Molti di voi si saranno domandati come si sviluppi un’applicazione lato server in linguaggio Java che funzioni su Red5. Attenti che questo non è l’unico modo per sviluppare un’applicazione in Red5 poiché il server include un interprete anche per i seguenti linguaggio di scripting: Javascript – version 1.6 (Mozilla Rhino version 1.6 R7), JRuby – version 1.0.1 (Ruby version 1.8.5),Jython – version 2.2 (Python version 2.1), Groovy – version 1.0, Beanshell – version 2.0b4.
Detto ciò, in questo tutorials spiegherò come creare un’applicazione che gira sul server multimediale Red5 in linguaggio Java. La versione che sto utilizzando alla data di stesura di questo tutorial è la 0.9.1. Partiamo dal presupposto che tutte le applicazioni sviluppate con Red5 risiedono all’interno della cartella webapps presente nel direttorio di installazione del server.
La creazione di una nuova applicazione in Red5 si può riassumere in tre fasi:

  1. Creazione di una nuova cartella in webbapps, nel nostro esempio myApp
  2. Creazione delle opportune sottocartelle di myApp ed aggiornamento dei file di configurazione server-side
  3. Creazione e Compilazione di un nuovo progetto Java nell’ambiente di Eclipse

Usare Eclipse non è l’unico modo per compilare un’applicazione con Red5, ce ne sono molti altri, per esempio è possibile compilare la soluzione con il tool ant.

E’ consigliabile partire da un template di applicazione, nelle precedenti versioni di Red5, sotto la cartella doc, era presente un “template” di applicazione da cui si poteva partire copiandone la struttura. Purtroppo nella mia installazione su Windows (e presubilmente anche sulla vostra), questa cartella non c’è più, quindi ho scaricato da svn i sorgenti delle applicazioni di esempio e sono partita copiando quella nominata “test“. Se avete SVN potete prenderla da qui: http://red5.googlecode.com/svn/java/example/trunk/altrimenti nella sezione Download di questo articolo, troverete il template da cui sono partita.

Creiamo la struttura base delle directory

La figura sottostante rappresenta la struttura di un’applicazione in Red5: non è altro che un insieme di cartelle, file di configurazione e file java compilati:

Struttura delle cartelle in una nuova applicazione per Red5

Modificare il file di configurazione red5-web.properties

Apriamo con un qualsiasi editor di testo (Notepad++, PSPAD) il file di configurazione nominato red5-web.properties ed inparticolare andiamo a cambiare la proprietà contextPath:

webapp.contextPath=/myApp
webapp.virtualHosts=localhost, 127.0.0.1
Modificare il file di configurazione web.xml
<DISPLAY-NAME>La mia prima applicazione con Red5</DISPLAY-NAME>

<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/myApp</param-value>
</context-param>
Modificare il file di configurazione red5-web.xml
<bean id="web.handler" class="it.red5server.myApp.Application"/>

dove it.red5server è la struttura del package utilizzato.

Creazione dell’applicazione in Java

Ora che è pronta la configurazione lato server dell’applicazione, creiamo l’applicazione che interagirà con il nostro client in flash.

src: contiene la cartella che contiene la struttura del nostro package org.xyz.
classes: contiene i file compilati class.
lib: contiene il jar dell’applicazione compilata.

Configuriamo un nuovo progetto su Eclipse

Avviamo Eclipse, menu File -> New -> Project
Scriviamo come nome progetto MyRed5FirstApp ed impostiamo come workspace la cartella WEB-INF della nostra applicazione: C:\Programmi\Red5\webapps\myApp\WEB-INF.

Impostazione Nuovo Progetto Eclipse

Cliccando su avanti, Eclipse creerà automaticamente la cartella src. Aggiungiamo la cartella classes e la impostiamo come output folder.
Impostazione cartella Classes e Output Folder

Ora andiamo sul tab Libraries e aggiungiamo la libreria di Red5 (red5.jar) altrimenti nulla funzionerà!!!! Allora andiamo su Library -> Add External Jar –> e dalla finestra di dialogo, selezionare, sotto la cartella di installazione di Red5, il file red5.jar.
Aggiunta libreria Red5.jar al progetto di Eclipse

Ora proviamo a sfogliare la nuova libreria in formato jar e vedremo tutte le API di Red5, come illustrato in figura:
Ambiente Eclipse con Red5.jar

Creiamo un nuovo package cliccando sulla cartella src -> clic dx -> create -> new Package
Creazione del Package

Creiamo una nuova classe Application che estende ApplicationAdapter:
Creazione Classe Application

Ora possiamo iniziare a scrivere la nostra prima applicazione in Java, il primo passo è importare la classe org.red5.server.adapater.ApplicationAdapter ed estendiamo la classe ApplicationAdapter.

package it.red5server.myApp;

import org.red5.server.adapter.ApplicationAdapter;

public class Application extends ApplicationAdapter {
   
    public Boolean appStart(){
        return true;
    }
   
    public void appStop(){
           
    }
}

Per poter analizzare le connessioni dei client bisogna importare la classe: import org.red5.server.api.IConnection;

public class Application extends ApplicationAdapter {
   
    public Boolean appStart(){
        return true;
    }
   
    public void appStop(){
           
    }
   
    public boolean appConnect(IConnection conn , Object[] params )
    {
        return true;
    }

    public void appDisconnect(IConnection conn)
    {
       super.appDisconnect(conn);
    }
}

Per poter debuggare l’applicazione è necessario aggiungere la libreria slf4j:

Importare Logging System
Importiamo le classi:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Ecco il codice completo dell’applicazione:

Creiamo il file Application.java
package it.red5server.myApp;

import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class Application extends ApplicationAdapter {
    private static final Logger log = LoggerFactory.getLogger( Application.class );
    public Boolean appStart(){
        log.info("Red5First.appStart" );
        return true;
    }
   
    public void appStop(){
         log.info("Red5First.appStop" );
    }
   
    public boolean appConnect(IConnection conn , Object[] params )
    {
         log.info("Red5First.appConnect " + conn.getClient().getId() );
         return true;
    }

    public void appDisconnect(IConnection conn)
    {
        log.info("Red5First.appDisconnect " + conn.getClient().getId() );
        super.appDisconnect(conn);
    }
   
    /**This method will be called from the client. This method will show "Hello World!" on
     * *the flash client side .
    */

    public String sayHello(Object[] params){
        log.info("I got your name:-"+params[0].toString());
        return "This is myFirstApp Hello World!" + params[0].toString();
    }  
}

A questo punto l’applicazione è terminate e Eclipse dovrebbe già averla compilata grazie all’opzione “Build Automatically” e nella cartella classes troverete i file class.
8_Eclipse_Building_Automatically

Creiamo l’applicazione Client in Flash
var nc:NetConnection = new NetConnection();

nc.onStatus = function(info){
    trace(info.code);
    switch(info.code){
        case "NetConnection.Connect.Success":
            debug_txt.text+="[INFO] Sei connesso all'applicazione myApp \n";
            callServer();
        break;
   
        case "NetConnection.Connect.Failed":
            debug_txt.text+="[FAILED] " + info.application +" \n";
        break;
   
        case "NetConnection.Connect.Rejected":
            debug_txt.text+="[REJECTED] " + info.application +" \n";
        break;
   
        case "NetConnection.Connect.Closed":
            debug_txt.text+="[CLOSED] " + info.application +" \n";
        break;
    }
};
nc.connect("rtmp://localhost/myApp");

function callServer(){
    var resultObj:Object = new Object();
    nc.call("sayHello", resultObj,"Daniela Remogna aka ~FiMiEtTa~");
   
    resultObj.onResult = function(str){
        debug_txt.text+="\n[sayHello] ha restituito: " + str +" \n";
    }
}

Riavviate il server Red5 ed eseguite il file Flash, otterrete un risultato simile al seguente:
Esempio Client Flash che si collega a myApp

Download

24 comments. Leave a Reply

  1. Pingback: Red5 – Finalmente online il tutorial che spiega come creare una nuova applicazione in Java lato server | Il Blog di Daniela Remogna

  2. samson

    Puntualissima comlimenti.

  3. Keres Contorni

    Daniela, dove và a scrivere i log l’applicativo lato server???

    • E’ necessario configurare il file log4j.properties e utilizzare la libreria log4j nell’applicazione.

  4. Se la classe Application la compilo con javac fa lo stesso?

  5. Se la classe Application la compilo con javac fa lo stesso?
    Preferisco non appesantire l S.O. con eclipse o Ant ,dato che gira con poca ram e Hrz

    • Certamente che va bene lo stesso :) basta solo ricordarsi di includere i vari jar e classpath

  6. Matteo

    Ho avuto dei problemi nel compilare questa applicazione, sia su windows che su ubuntu. Sembra che manchino due jar files importanti.
    Il primo è slf4j-log412-1.6.0.jar (scaricabile da http://www.slf4j.org/download.html), il secondo è log4j-1.2.16.jar (scaricabile da http://logging.apache.org/log4j/1.2/download.html).
    Ho anche sostituito slf4j-api-1.5.0.jar (trovato nella cartella di red5) con slf4j-api-1.6.0.jar (scaricato insieme al pacchetto slf4j dal primo indirizzo).

    • Ma tu prima avevi incluso il jar slf4j indicato nel penultimo screenshot di questo tutorial?

      • Matteo

        Si, avevo seguito dettagliatamente la tua guida.
        Grazie all’errore fornito dal compilatore di eclipse, sono riuscito a risalire alla soluzione descritta. Esso forniva infatti un link a http://www.slf4j.org/codes.html#StaticLoggerBinder

        • Ok, probabilmente allora c’è qualcosa di diverso a livello di jar in quella release di red5!

  7. Matteo

    Una nota per gli utenti di linux. Per ovvi motivi legati ai permessi, non è conveniente lavorare con eclipse all’interno della cartella red5/webapps. E’ preferibile lavorare nella propria home e quindi copiare la cartella myApp in red5/webapps.

    A tal propostito è utile tenere a mente le seguenti considerazioni:
    - accertarsi che l’applicazione sia correttamente compilata e funzioni
    - copiare la cartella myApp in red5/webapps (sudo cp -R ~/myApp /usr/share/red5/webapps/)
    - accertarsi che l’applicazione sia accessibile ed eseguibile da red5 (sudo chmod -R 700 /usr/share/red5/myApp/ && sudo chown -R _red5 /usr/share/red5/myApp/)
    - riavviare il server red5 (sudo /etc/init.d/red5-server restart)

    Questi comandi sono stati eseguiti con red5 installato con apt-get su ubuntu 10.10, e potrebbero essere leggermente diversi con altre distro e metodi di installazione.

  8. Antonio

    Ciao, mi chiedevo se è possibile utilizzare un altro player che non sia flash.
    Eventualmente se volessi creare una webservice per il protocollo RTMP, hai qualche link da consigliarmi? Ti ringrazio

  9. Gianluca Vagnoni

    Ciao, ho un po di domande.
    Nella modifica dei file .xml i tag che hai postato vanno aggiunti a quelli che si trovano già nei file oppure i file vanno prima svuotati e poi riempiti con solo i tuoi tag?
    Nella modifica di red5-web.xml cosa intendi per:
    “dove it.red5server è la struttura del package utilizzato” ?
    Domanda generica: con questo server e protocollo, quando andrò a visualizzare il video avrò la possibilità di spostarmi temporalmente nel video per ricevere lo stream dal minutaggio in cui sono interessato? Se no, che tool/software mi consigli?
    Grazie in anticipo! ;)

    • Ciao :-)
      I tag vanno svuotati e poi riempiti con le informazioni corrette.

      Il package è un modo per organizzare le classi in Java: http://it.wikipedia.org/wiki/Package_(Java)

      Si tramite il metodo seek della classe NetConnection è possibile spostarsi ad un determinato minutaggio.

  10. domenico.fedato@gmail.com

    Ciao,
    ho seguito la tua procedura ma mi perdo nel momento in cui devo creare il client…
    Anche scaricando il client che metti a disposizione nella sezione Download ed eseguendolo ottengo:

    [FAILED] undefined

    Puoi darmi qualche suggerimento?
    Grazie

  11. Andrea

    Ciao,

    ho installato per la prima volta Red5 1.0 RC1 su windows vista pro a casa per vedere com’è.
    Ho impostato il dominio di rete locale 192.168.1.2, porta 8080 del mio pc così da poter provare applicazioni condivise fra diversi pc in casa.
    Tutto ok, vedo gli esempi.

    Invece non riesco a far funzionare questo esempio, ottenendo lo stesso errore sulla NetConnection.Connect di domenico nel client flash:

    trace di ‘NetConnection.Connect.Failed’
    e [FAILED] undefined nel debug_txt

    Rispetto alle tue indicazioni, ho dovuto cambiare il package da includere per poter usare le classi Logger e LoggerFactory, che ho trovato nel package com.springsource.slf4j.api-1.6.1.

    Per quanto riguarda il debug in generale in red5:

    1) Quali sono gli strumenti e le stategie più comuni?
    2) C’è un modo per debuggare solo la applicazione lato server direttamente in java da eclipse, prima di implemantare il client flash, in modo da semplificare e rendere graduale lo scenario di debugging?
    3) Ho provato a debuggare il dialogo client-server con Charles, che mi rileva 5 richieste HTTP identiche:
    POST /open/1 HTTP/1.0
    Content-Type: application/x-fcs
    User-Agent: Shockwave Flash
    Host: 192.168.1.2
    Content-Length: 1
    Pragma: no-cache
    con response vuoto…non riesco a spiegarmi quell’url…
    4) Ho provato a connettermi all’esempio Admin Panel con l’address 192.168.1.2 sperando di trovare un applicazione di amministrazione che mi potesse dare qualche indicazione di che cosa succede lato server, ma non sono riuscito a connettermi ottenendo un
    NetConnection.Connect.Failed

    Insomma, per ora, sconfitto su tutta la linea :-P

    Grazie,
    Andrea

  12. Andrea

    Aggiorno :-P
    L’esempio funziona se riconfiguro il server su 127.0.0.1 in /conf/red5.properties
    Quello che avevo fatto precedentemente era sotuituire tutti i 127.0.0.1 con 192.168.1.2 nel file /conf/red5.properties.
    La domanda che mi viene è: perchè gli altri esempi funzionano lo stesso anche con il server configurato su 192.168.1.2 e questo esempio no?
    C’è qualche parametro di configurazione attinente alle singole applicazioni red5 da tenere in considerazione?
    Scusate la raffica di dubbi :-P
    Grazie,
    Andrea

    • Ciao sono tornata ora dalle ferie, hai risolto oppure hai ancora dei dubbi?

  13. FollowTheMedia

    Ciao, scusa ma non riesco a capire come “compilare” il sorgente per il client flash.
    Tutto chiaro per quanto riguarda la parte lato server. :)

    • La parte client l’ho sviluppata in Adobe Flash.
      Puoi fare una cosa simile anche usando Flash Develop.

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>