Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Stati e controllo del player

Mandare in play, mettere in pausa, stoppare e riavviare il video grazie alla gestione degli stati
Mandare in play, mettere in pausa, stoppare e riavviare il video grazie alla gestione degli stati
Link copiato negli appunti

Dopo averlo costruito, il player, viene avviato tramite il metodo startPlayer(). Si utilizza una label per tenere traccia dei vari stati che il player assume, in modo da visualizzarlo nella schermata. Le transizioni previste sono:

  • da STOP a PLAY;
  • da PLAY a PAUSE;
  • da PAUSE a STOP;
  • da PAUSE a PLAY.

Il cambio di stato è gestito tramite il puntatore del telefono. Dopo che il video è avviato, si può mettere in PAUSE premendo il joystick verso sinistra. Da PAUSE si può ritornare a PLAY premendo verso destra (viene chiamato il metodo stop()), il video riprende da dove era stato bloccato. Oppure, si può stoppare la riproduzione premendo verso sinistra (viene chiamato il metodo close() che rilascia le risorse che erano state acquisite e occupate: in tal caso il player non è più utilizzabile per nuove riproduzioni senza una nuova creazione dell'oggetto).
Da STOP è possibile riavviare il video cliccando sul puntatore verso destra.

Gli stati assunti dal video sono evidenziati in basso, mentre il livello di volume è indicato da una serie di piccoli quadrati bianchi in alto (un quadrato ogni 10 unità di volume).

Il controllo del volume è gestito sempre tramite il puntatore del telefono: premendolo verso l'alto si incrementa il volume mentre verso il basso lo si decrementa fino ad arrivare in uno stato di mute.

Listato 25. Gestione controlli (Vedi codice completo)

protected void keyPressed(int key)
{
    super.keyPressed(key);
    if (getGameAction(key)==Canvas.DOWN)
    {
        if (volCont.getLevel() > 0)
        {
            volCont.setLevel(volCont.getLevel() - 10);
        }
    }
    else if (getGameAction(key)==Canvas.UP)
    {
        if (volCont.getLevel() < 80)
        {
            volCont.setLevel(volCont.getLevel() + 10);
        }
    }
    else if (getGameAction(key) == Canvas.RIGHT)
    {
        if (playerState == PAUSE_LABEL)
        {
            startPlayer();
        }
        else if (playerState == STOP_LABEL)
        {
            try
            {
                buildPlayer();
                startPlayer();
            }
..//

Listato 26. disegno del Canvas gestito dal metodo paint()

protected void paint(Graphics g)
{
    g.setColor(0,0,255);
    g.fillRect(0, 0, getWidth(), getHeight());
    
    // Disegno indicatore volume con quadrati bianchi
    g.setColor(255, 255, 255);
    for (int k = 0; k < (volCont.getLevel()/10); k++)
    {
        g.fillRect((3*k)*5, 5, 5, 5);
    }

    // Riporto stato del lettore video
    g.drawString(playerState, getWidth()/2, getHeight() - 10, Graphics.BASELINE | Graphics.HCENTER);
}

Il risultato finale

Per testare la nostra applicazione, nel WTK, si può scegliere il terminale denominato MediaControlSkin nella tendina dei "Devices" e premere "Run".

Figura 12. test dell'applicazione nel WTK
test dell'applicazione nel WTK

Permettere il collegamento via rete quando viene richiesto (anche se in realtà il video si trova nello stesso PC dove gira l'emulatore) e si assisterà alla riproduzione del flusso video:

Figura 13. riproduzione flusso video
riproduzione flusso video

Gestire gli eventi del player: l'interfaccia PlayerListener

Implementando l'interfaccia PlayerListener è possibile gestire la notifica asincrona di eventi generati dal player.

Tale controllore è configurabile nell'oggetto Player tramite il metodo addPlayerListener(). Il metodo che deve essere implementato e che viene chiamato asincronamente è playerUpdate().

Provare con lo streaming

L'esempio appena visto esegue il download del video e la successiva riproduzione. Le applicazione odierne più interessanti sono però quelle che permettono lo streaming dei contenuti da server remoti.

Uno dei protocolli più indicati per questo è il Real Time Protocol Streaming (RTSP) che però non è supportato dal WTK. Ci sono però alcuni terminali che hanno un'implementazione delle MMAPI che permette l'utilizzo di questo protocollo. Tra questi:

  • Motorola E1000;
  • Motorola V975;
  • Sony Ericsson V800;

È necessario inoltre avere un server di streaming a cui il client J2ME si può collegare. Un software free utilizzabile è il Darwin Streaming Server (installabile sia su Windows che su Linux)

Un altro applicativo (a pagamento ma di cui si può provare un trial valido 30 giorni) è Nextreaming Nexcaster.

Quest'ultimo è sicurmente un tool facilmente configurabile rispetto al Darwin che però ha il vantaggio di essere gratuito.

Per connettersi da un reale devices ai server è da considerare che il server dovrà avere assegnato un ip pubblico raggiungibile tramite la connessione del proprio operatore mobile (per ottenere un risultato decente nella ricezione del flusso è utile che sia UMTS).

Ti consigliamo anche