Adobe Flash su sistemi embedded

La tecnologia Adobe con Flash Player si propone di gestire contenuti multimediali con estrema semplicità. Oggi, sempre con maggiore frequenza, le tecnologie embedded ricorrono a questa particolare funzionalità al fine di offrire un prodotto completo.

In che modo è possibile gestire i contenuti multimediali in un sistema embedded? In precedenza avevamo suggerito come costruire un gestore di filmati sfruttando la tecnologia Java con YouTube. Sicuramente esistono però differenti modi per raggiungere questo obiettivo. Ad esempio, ARM ha deciso di garantire il supporto dei contenuti multimediali ricorrendo alla tecnologia di Adobe Flash Player.

In questo modo diventa possibile offrire contenuti multimediali anche su architetture di tipo ARM utilizzando la libreria di Adobe Flash, come la definizione e la realizzazione di interfacce grafiche evolute, vedi ad esempio una Graphical User Interface (GUI). Di sicuro il file di tipo grafico, con i suoi eventuali contenuti multimediali, deve essere prima costruito utilizzando Adobe Flash CS4 sfruttando i diversi script ricorrendo al tool di lavoro Adobe ActionScript. Al fine di realizzare questa facility è necessario però garantire la presenza di un file system, magari utilizzando uno dei tanti sistemi operativi disponibili come Linux, Windows CE, Windows Embedded, Android o Symbian. Successivamente, il file deve essere inserito nel file system presente su ARM secondo un formato particolare riconosciuto da Adobe, come .swf o .flv. Il contenuto multimediale formattato in questo modo deve essere inserito nel target, come ad esempio uno smartphone dove è presente un processore con core ARM compatibile e, successivamente, può essere letto senza problemi con il player Flash di Adobe. ARM ha deciso recentemente di supportare la versione 10 del Flash Player sulle sue architetture per garantire il supporto delle animazioni grafiche di Flash nel browser dei dispositivi mobile, non solo, grazie a questo supporto è anche possibile visionare contenuti su YouTube o presenti all’interno di qualsiasi sito web. Ricordiamo che la libreria software ARM Flash Player è direttamente disponibile da Adobe oltre a tutto il codice sorgente del player. Il costruttore è però direttamente responsabile del suo aggiornamento nelle diverse applicazioni realizzate e distribuite al fine di garantire la compatibilità con i differenti prodotti presenti sul mercato. Oltre alla possibilità di utilizzare Adobe Flash in versione full esiste anche la possibilità di ottenere una versione più leggera realizzata appositamente da Adobe per applicazioni di tipo mobile, quali per il settore della telefonia.

Figura 1: il mondo della telefonia.

Figura 1: il mondo della telefonia.

FLASH LITE

La versione Flash Lite di Adobe è una versione ottimizzata della tecnologia Flash per applicazioni di tipo mobile al fine di ottenere delle piattaforme multimediali con un’enorme capacità di integrazione.

In effetti, inserire applicazioni di tipo digitale nelle applicazioni embedded apporta senza dubbio un valore aggiunto significativo, perché si riesce ad offrire un prodotto che permette enormi vantaggi al consumatore finale. Pensiamo ad esempio ad un modulo di traduzione in tempo reale presente su un telefonino. Ad ogni modo, diventa necessario comprendere la tecnologia in gioco per ricavare il massimo beneficio. In ogni caso, la nostra applicazione deve tenere conto anche dei limiti fisici quali la velocità del processore e le limitazioni dei dispositivi di rete. In un’applicazione di tipo Lite esistono due differenti formati video: nativo e device. I formati classificati come device sono dei formati video dove la decodifica è compiuta dal dispositivo, o device, stesso. In una situazione di questo tipo la tecnologia Flash Lite player sfrutta le API del dispositivo per la decodifica e la riproduzione (rendering) del video sullo schermo del portatile. L’applicazione video del dispositivo non può lavorare in streaming, ma il contenuto deve prima essere scaricato e poi, solo successivamente, si può procedere alla sua visualizzazione.

L’impossibilità di procedere alle operazioni di streaming sono insiti nella trama del messaggio, cioè, la ragione per la quale il dispositivo non può trattare il contenuto multimediale direttamente in tempo reale risiede nel processo di decodifica. In effetti, il tempo di esecuzione dell’eseguibile, applicazione Flash Lite, non può riguardare direttamente il formato del video e di conseguenza diventa impossibile mostrare il video in tempo reale. Occorre, al contrario, caricare il video prima localmente e solo successivamente è possibile riprodurlo. Symbian permette di gestire differenti codec video e audio, così, ad esempio, è possibile gestire i codec H.263, PO L10, MPEG-4 e Real Video (7, 8, 9 and 10) o gli audio codec come AMRNB, Real Audio nelle varianti 7,8 e 10, ma anche AAC e AAC+. Al contrario, i video di tipo nativi sono formati che sono decodificati dal lettore Flash Lite e visualizzati sullo schermo del portatile. Dal momento che Flash Lite player è responsabile della sua  decodifica, è possibile utilizzare ActionScript per controllare la riproduzione del video. Nella versione 3.x di Adobe Flash Lite sono previsti i formati video nativi On2 (TrueMotion VP6) e Sorenson Spark (Sorenson Video Quantizer). Non solo, per garantire la gestione in tempo reale delle informazioni video e audio, Adobe Flash Lite utilizza RMTP, o Real Time Messaging Protocol. Ricordiamo che dalla versione 2.0 di Flash Lite sono presenti diverse API che offrono feature in grado di gestire e controllare i contenuti multimediali, questo significa che le API del dispositivo non sono esportate verso l’ActionScript per controllare i parametri della riproduzione. Nella versione 3.0 è, al contrario, possibile raggiungere lo stesso risultato attraverso un’opportuna gestione dei diversi servizi disponibili. Ad esempio, possiamo controllare il volume di qualsiasi applicazione nativa. Questo tipo di approccio è utilizzabile solo per i video di tipo nativo in configurazione streaming, locale o rete, utilizzando le classi NetConnection e NetSream. Il listato 2 mostra la porzione di codice  in grado di gestire questa funzionalità, in particolare lo script carica un contenuto multimediale e tratta lo streaming dell’operazione da un connessione di tipo http.

// create platform variable
var platform_support:Number = fscommand2(“GetPlatform”,”platform”);
if(platform_support > -1){ // device supports platform detection
if(platform.indexOf(“Nokia OS”) > - 1 ||
platform.indexOf(“Series 40”) > -1){
// code for Series 40 Flash Lite 2.0+
trace(“Series 40”);
} else if(platform.indexOf(“Symbian”) > -1){
// code for S60
trace(“s60”);
} else {
// non Nokia device
trace(platform + “ - non Nokia device”);
}
} else {
// device does not support platform detection
trace(“no platform detection”);
}
Listato 1 – Rileviamo la piattaforma
// DECLARING
NetConnection AND NetStream VARIABLES
var video_nc:NetConnection = new NetConnection();
video_nc.connect(null);
var video_ns:NetStream = new NetStream(nc);

// HANDLING THE STATUS OF NetStream
ns.onStatus = function(info) {
     if (info.code == “NetStream.Play.Start”) {
          // PLAYBACK STARTED
     }
     if (info.code == “NetStream.Play.Stop”) {
         // PLAYBACK STOPPED
     }
     if(info.code == “NetStream.Buffer.Full”) {
         // BUFFER FULL
     }
     if(info.code == “NetStream.Buffer.Empty”) {
         // BUFFER EMPTY
     }
};

// HANDLING THE METADATA OF THE NetStream
ns.onMetaData = function(info) {
// METADATA OF THE VIDEO
};

// ATTACHING THE NETSTREAM TO THE VIDEO OBJECT ON STAGE
video_vid.attachVideo(ns);

// PLAY THE STREAM
ns.play(“http://www.mysite.com/video.flv”);
Listato 2 – Controllo contenuto multimediale

Con NetStream non si ha la possibilità di controllare direttamente il volume del contenuto; infatti, questa feature è resa possibile ricorrendo a questa sequenza di operazioni:

this.createEmptyMovieClip
(“videoSound_mc”,2)
videoSound_mc.attachAudio(ns);
video_snd = new Sound
(videoSound_mc);
video_snd.setVolume(75);

GOOGLE TRANSLATOR

Questa è un’altra interessante applicazione. La feature di Google Translator è di enorme importanza perchè permette, attraverso delle opportune API, di offrire un sistema di traduzione automatica; in effetti, attraverso un’opportuna applicazione costruita con Flash Lite possiamo fornire un versatile strumento di traduzioni online. L’idea è abbastanza semplice: occorre interrogare Google Translator attraverso una connessione di rete per ottenere il testo da tradurre. Il testo da tradurre deve essere acquisito in precedenza con un’apposita interfaccia costruita con Flash Lite. Le due figure 2 e 3 pongono in evidenza una possibile interfaccia implementata sul telefonino con Adobe Flash.

Figura 2: Google Translator, Interfaccia

Figura 2: Google Translator, Interfaccia

 

Figura 3: Google Translator, Interfaccia.

Figura 3: Google Translator, Interfaccia.

Il listato 4 presenta una porzione del codice, mentre dal sito della rivista potete scaricare l’intero progetto. In realtà le cose sono leggermente diverse. Google Translator non ospita un web server che accetta i relativi servizi, ma fornisce l’accesso via QueryString. Infatti, il nostro traduttore online dovrà inviare le informazioni utilizzando la QueryString. Le QueryString hanno un formato particolare che sarà trattato nel progetto allegato.

RILEVARE LA PIATTAFORMA IN USO

Ecco un’altra applicazione interessante, proviamo, infatti, a definire un meccanismo che ci consente di rilevare la piattaforma in uso. Un’applicazione del genere ci può tornare utile se abbiamo la necessità di eseguire, ad esempio, un aggiornamento. L’API esterna è una porzione di ActionScript e fornisce un meccanismo di comunicazione tra ActionScript e il codice in esecuzione su un’applicazione cosiddetta “esterna”, ovvero un’applicazione che ha il ruolo di contenitore per Flash Player (di solito, si tratta di un browser Web o di un’applicazione autonoma). In ActionScript 3.0, la funzionalità API esterna è fornita dalla classe ExternalInterface. Nelle versioni di Flash Player precedenti a Flash Player 8, l’azione fscommand() è utilizzata per effettuare la comunicazione con l’applicazione contenitore. La classe ExternalInterface sostituisce fscommand() ed è consigliabile utilizzarla per tutte le comunicazioni tra JavaScript e ActionScript. La classe ExternalInterface è un sottosistema che consente di instaurare comunicazioni da ActionScript e Flash Player su di una pagina HTML contenente JavaScript o ad un’applicazione desktop che incorpora un’istanza di Flash Player. La classe ExternalInterface è disponibile in tutte le versioni supportate di Internet Explorer per Windows (5.0 e versioni successive), in un’applicazione contenitore, come un’applicazione desktop che utilizza un’istanza del controllo ActiveX di Flash Player e, per finire, in tutti i browser che supportano l’interfaccia NPRuntime, tra cui attualmente Firefox 1.0 e versioni successive, Mozilla 1.7.5 e successive, Netscape 8.0 e successive, oltre a Safari 1.3 e versioni successive.Da ActionScript, è possibile chiamare una funzione JavaScript sulla pagina HTML. L’API esterna offre la possibilità di utilizzare qualsiasi funzione JavaScript, non solo le funzioni utilizzabili con fscommand(), ma non solo è anche possibile passare un numero qualsiasi di argomenti. Ricordiamo che non ci sono limitazioni al passaggio di un comando e di un unico argomento String, per questa ragione l’API esterna risulta molto più flessibile rispetto a fscommand(). Detto questo possiamo passare alla realizzazione di quanto accennato. Con Flash Lite, ad esempio nella versione 2, per rilevare la piattaforma in uso esiste il metodo GetPlatform fscommand2. La porzione di codice mostrata qui di seguito pone in evidenza come è stato risolto il problema. Per prima cosa si crea una variabile identificata come platform a cui viene assegnata la stringa restituita dalla chiamata GetPlatform fscommand2:

fscommand2(“GetPlatform”,”platform”);
trace(platform); // outputs “Symbian”

A questo punto la chiamata in questione restituisce una stringa, ad esempio “Nokia OS “ come valore per GetPlatform sui dispositivi della serie 40 “Symbian OS” o “Symbian” oltre al numero della versione, così “Symbian 9.2” per il dispostivo S60. Al contrario, nel caso del dispositivo S40 i parametri che vengono restituiti sono differenti: “Series 40” e “Symbian”. Il listato 1 mostra una porzione di codice in ActionScript 2.0 per Flash Lite al fine di dimostrare come utilizzare le funzioni standard.

MSPLIB

MspLib è una valida alternativa a Adobe Flash Player. La libreria MspLib è presente su Digital Media Elements Solution su tecnologia DaVinci di Texas Instruments che permette di mostrare contenuti multimediali nei formati così messi in evidenza dalla tabella 1.

Tabella 1: codec presenti in MspLib.

Tabella 1: codec presenti in MspLib.

Con il modulo DME-FLV Player, realizzata e ottimizzata per processori DaVinci, è possibile visualizzare contenuti Flash Video (FLV) in real-time. La maggior parte dei video condivisi sulla rete, come YouTube, utilizza il formato FLV e il modulo DME-FLV permette la loro visione in sistemi embedded basati su tecnologia TI. Infatti, Texas Instruments è proprietaria della sua piattaforma eXpressDSP Digital Media Software Standard, o xDM. Il pacchetto di casa TI dispone di diverse API basate su tecnologia DSP in grado di offrire un framework di lavoro per poter gestire diversi codec all’intermo di un’applicazione, il tutto integrato con l’architettura DaVinci. La tecnologia xDM è un’estensione della piattaforma xDM eXpressDSP Algorithm Interoperability Standard (xDAIS). Tutti i codec dispongono di interfacce simili e per la loro gestione si utilizzano quattro API. Ad esempio le quattro APU utilizzate dal decoder FLV si preoccupano di definire una istanza per il decoder video (VIDDEC_create), di sovrintendere al controllo della sua istanza (VIDDEC_control), si preoccupano di eseguire il processo associato all’istanza dell’algoritmo video (VIDDEC_process) e, per concludere, di eliminare l’istanza (VIDDEC_delete). A questo proposito il listato 3 mostra l’uso di VIDDEC_create utilizzata per creare l’istanza di un codec.

/* Create H.264 decoder instance */
params.size                = sizeof(VIDDEC_Params);
params.maxFrameRate        = 0;
params.maxBitRate          = 0;
params.dataEndianness      = XDM_BYTE;
params.forceChromaFormat   = XDM_YUV_422ILE;
params.maxHeight           = height;
params.maxWidth            = width;

hDecode = VIDDEC_create(hEngine, “h264dec”, &params);
Listato 3 – Esempio con MspLib
var lorem_lv:LoadVars = new LoadVars();
// Code in between not shown

// Code Block 1
// The following Code has to appear in KeyPress event or Button Click event
if (source.text != “”) {
                       x1 = escape(source.text);
                       if ((from.selectedIndex == undefined) || (to.selectedIndex == undefined)) {
                           errors.text = “Select languages “;
                           errors.textColor = 0xAA0000;
                           return;
                        }
                        source_lang = determine(from.selectedIndex);
                        dest_lang = determine(to.selectedIndex);
                        from_to_pair = escape(source_lang+”|”+dest_lang);

lorem_lv.load(“http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=”+x1+”&langpair=”+from_to_pair);
                         errors.text = “Connecting “;
                         errors.textColor = 0x00AA00;
 } else {
                         errors.text = “Enter input text “;
                         errors.textColor = 0xAA0000;
 }
// Code Block 1 ends here

lorem_lv.onData = function(src:String):Void {
 // Do the handling of the resultant string.
 // Returns Unable to Load external data in case of Connection failure.
}
Listato 4 – Utilizziamo Google Translator

Scrivi un commento

EOS-Academy
Abbonati ora!