Dopo aver utilizzato le MMAPI per riprodurre un file audio, vediamo come gestire la visualizzazione di un flusso video.
Nell'esempio di seguito, costruiremo una midlet che scarica un file mpg da un web server Apache e oltre a riprodurlo, lo controlla mettendolo in pausa, stoppandolo o regolandone il volume.
Setting dell'ambiente di produzione
Se non ancora presente nel nostro PC, scarichiamo il web server Apache e lo installiamo.
Al termine dell'operazione, prendiamo un file mpeg (possibilmente di dimensioni 176 x 144) e salviamolo nella cartella web di Apache (directory www o htdocs, nel percorso di installazione di Apache, in base alla versione installata).
L'url del nostro video (che supponiamo sia un file video.mpg) è di conseguenza http://127.0.0.1/video.mpg .
Creiamo, con il WTK, il progetto, ricordandosi di selezionare MMAPI nella schermata di scelta delle API.
La midlet di riproduzione
La classe principale della nostra applicazione non fa altro che istanziare il Canvas, che contiene il player e avviare quest'ultimo tramite la chiamata al metodo pubblico startPlayer()
:
Listato 23. Istanzia il Canvas con il player e avvia quest'ultimo
public class VideoDemo extends MIDlet
{
private Display display = null;
public VideoDemo()
{
display = Display.getDisplay(this);
}
protected void startApp() throws MIDletStateChangeException
{
PlayerCanvas player = new PlayerCanvas();
display.setCurrent(player);
player.startPlayer();
}
// .....
La classe principale, del nostro progetto, è però PlayerCanvas
. Nel costruttore viene richiamato il metodo buildPlayer()
che effettua le operazioni di recupero del video e di costruzione grafica della schermata del player:
Listato 24. Recupera il video e costruisce la grafica del player (Vedi codice completo)
..//
private void buildPlayer() throws IOException, MediaException
{
player = Manager.createPlayer(FILE_URL);
player.realize();
if ((vc = (VideoControl) player.getControl("VideoControl")) != null)
{
vc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, this);
vc.setDisplayLocation((getWidth() - vc.getSourceWidth())/2, (getHeight() - vc.getSourceHeight())/2);
vc.setVisible(true);
}
if ((volCont = (VolumeControl) player.getControl("VolumeControl")) != null)
{
volCont.setLevel(VOLUME_START);
}
}
Dapprima viene creato il player, a cui viene passato l'url del file mpg, poi viene creato il VideoControl
che permette di avere a disposizione un oggetto per il controllo del video sia in termini di posizionamento nel Canvas che per quel che riguarda l'avvio, la pausa e lo stop della riproduzione.
Dopo aver settato il VideoControl
(tramite il metodo initDisplayMode
), settiamo la posizione del video al centro del display del terminale e lo rendiamo visibile.
Aggiungiamo anche un oggetto, VolumeControl
, che permette di gestire l'audio del video e settiamo il livello del volume iniziale a 50. Il range di valori varia da 0 a 100 ma la variazione lineare del volume dipende dall'implementazione specifica all'interno di ciascun dispositivo mobile. In realtà, come si può provare nell'emulatore del WTK, non si è potuto settare il volume oltre 80 in quanto viene segnalato che si è superato il limite massimo consentito.