
Android include Stagefright, un motore di riproduzione multimediale a livello nativo con codec basati su software integrati per i formati multimediali più diffusi.
Le funzionalità di riproduzione audio e video di Stagefright includono l'integrazione con i codec OpenMAX, la gestione delle sessioni, il rendering sincronizzato con il tempo, il controllo di trasporto e il DRM.
Stagefright supporta anche l'integrazione con codec hardware personalizzati forniti da te. Per impostare un percorso hardware per la codifica e la decodifica dei contenuti multimediali, devi implementare un codec basato su hardware come componente OpenMax IL (Integration Layer).
Nota:gli aggiornamenti di Stagefright possono avvenire tramite la procedura di aggiornamento della sicurezza mensile di Android e nell'ambito di una release del sistema operativo Android.
Architettura
Le applicazioni multimediali interagiscono con il framework multimediale nativo di Android secondo la seguente architettura.

Figura 1. Architettura media
- Framework per applicazioni
- A livello di framework dell'applicazione è presente il codice dell'applicazione che utilizza le API android.media per interagire con l'hardware multimediale.
- Binder IPC
- I proxy IPC di Binder facilitano la comunicazione oltre i confini dei processi.
Si trovano nella directory
frameworks/av/media/libmedia
e iniziano con la lettera "I". - Native Multimedia Framework
- A livello nativo, Android fornisce un framework multimediale che utilizza il motore Stagefright per la registrazione e la riproduzione di audio e video. Stagefright è dotato di un elenco predefinito di codec software supportati e puoi implementare il tuo codec hardware utilizzando lo standard del livello di integrazione OpenMax. Per maggiori dettagli sull'implementazione, consulta i componenti MediaPlayer e Stagefright disponibili in
frameworks/av/media
. - OpenMAX Integration Layer (IL)
- OpenMAX IL fornisce a Stagefright un modo standardizzato per riconoscere e utilizzare codec multimediali basati su hardware personalizzati chiamati componenti. Devi fornire un plug-in OpenMAX sotto forma di una libreria condivisa denominata
libstagefrighthw.so
. Questo plug-in collega Stagefright ai componenti personalizzati del codec, che devono essere implementati in base allo standard del componente OpenMAX IL.
Implementare codec personalizzati
Stagefright è dotato di codec software integrati per i formati multimediali comuni, ma puoi anche aggiungere i tuoi codec hardware personalizzati come componenti OpenMAX. Per farlo, devi creare i componenti OMX e un plug-in OMX che colleghi i codec personalizzati al framework Stagefright. Per esempi di componenti, consulta hardware/ti/omap4xxx/domx/
; per un esempio di plug-in per Galaxy Nexus, consulta hardware/ti/omap4xx/libstagefrighthw
.
Per aggiungere i tuoi codec:
- Crea i componenti in base allo standard del componente OpenMAX IL. L'interfaccia del componente si trova nel file
frameworks/native/include/media/OpenMAX/OMX_Component.h
. Per approfondire la specifica OpenMAX IL, consulta il sito web di OpenMAX. - Crea un plug-in OpenMAX che colleghi i componenti al servizio Stagefright. Per le interfacce per creare il plug-in, consulta i file di intestazione
frameworks/native/include/media/hardware/OMXPluginBase.h
eHardwareAPI.h
. - Compila il plug-in come libreria condivisa con il nome
libstagefrighthw.so
nel file Makefile del prodotto. Ad esempio:
LOCAL_MODULE := libstagefrighthw
Nel file Makefile del dispositivo, assicurati di dichiarare il modulo come pacchetto di prodotto:
PRODUCT_PACKAGES += \ libstagefrighthw \ ...
Esporre i codec al framework
Il servizio Stagefright analizza system/etc/media_codecs.xml
e system/etc/media_profiles.xml
per esporre gli sviluppatori di app ai codec
e ai profili supportati sul dispositivo tramite le classi
android.media.MediaCodecList
e
android.media.CamcorderProfile
. Devi creare entrambi i file
nella directory device/<company>/<device>/
e copiarli nella directory system/etc
dell'immagine di sistema nel
Makefile del dispositivo. Ad esempio:
PRODUCT_COPY_FILES += \ device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \ device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \
Per esempi completi, consulta device/samsung/tuna/media_codecs.xml
e device/samsung/tuna/media_profiles.xml
.
Nota: a partire da Android 4.1, l'elemento <Quirk>
per i codec multimediali non è più supportato.