Android include Stagefright, un motore di riproduzione multimediale a livello nativo che dispone di 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 nel tempo, il controllo del trasporto e DRM.
Stagefright supporta anche l'integrazione con codec hardware personalizzati forniti dall'utente. Per impostare un percorso hardware per codificare e decodificare i contenuti multimediali, è necessario implementare un codec basato su hardware come componente OpenMax IL (Integration Layer).
Nota: gli aggiornamenti Stagefright possono avvenire tramite il processo di aggiornamento mensile della sicurezza Android e come parte di una versione del sistema operativo Android.
Architettura
Le applicazioni multimediali interagiscono con il framework multimediale nativo di Android secondo la seguente architettura.
- Quadro applicativo
- A livello del framework dell'applicazione c'è il codice dell'applicazione che utilizza le API android.media per interagire con l'hardware multimediale.
- Legante IPC
- I proxy IPC Binder facilitano la comunicazione oltre i confini del processo. Si trovano nella directory
frameworks/av/media/libmedia
e iniziano con la lettera "I". - Framework multimediale nativo
- A livello nativo, Android fornisce una struttura multimediale che utilizza il motore Stagefright per la registrazione e la riproduzione di audio e video. Stagefright viene fornito con un elenco predefinito di codec software supportati ed è possibile implementare il proprio codec hardware utilizzando lo standard del livello di integrazione OpenMax. Per ulteriori dettagli sull'implementazione, vedere i componenti MediaPlayer e Stagefright situati in
frameworks/av/media
. - Livello di integrazione OpenMAX (IL)
- OpenMAX IL fornisce un modo standardizzato per Stagefright di riconoscere e utilizzare codec multimediali basati su hardware personalizzati chiamati componenti. È necessario fornire un plug-in OpenMAX sotto forma di libreria condivisa denominata
libstagefrighthw.so
. Questo plugin collega Stagefright ai componenti codec personalizzati, che devono essere implementati secondo lo standard dei componenti OpenMAX IL.
Implementa codec personalizzati
Stagefright viene fornito con codec software integrati per i formati multimediali più comuni, ma puoi anche aggiungere i tuoi codec hardware personalizzati come componenti OpenMAX. Per fare ciò, devi creare i componenti OMX e un plug-in OMX che colleghi i tuoi codec personalizzati al framework Stagefright. Per i componenti di esempio, vedere hardware/ti/omap4xxx/domx/
; per un plugin di esempio per Galaxy Nexus, vedere hardware/ti/omap4xx/libstagefrighthw
.
Per aggiungere i tuoi codec:
- Crea i tuoi componenti secondo lo standard dei componenti OpenMAX IL. L'interfaccia del componente si trova nel file
frameworks/native/include/media/OpenMAX/OMX_Component.h
. Per ulteriori informazioni sulla specifica OpenMAX IL, fare riferimento al sito Web OpenMAX . - Crea un plug-in OpenMAX che collega i tuoi componenti al servizio Stagefright. Per le interfacce per creare il plugin, vedere
frameworks/native/include/media/hardware/OMXPluginBase.h
e file di intestazioneHardwareAPI.h
. - Costruisci il tuo plugin come libreria condivisa con il nome
libstagefrighthw.so
nel Makefile del tuo prodotto. Per esempio:LOCAL_MODULE := libstagefrighthw
Nel Makefile del tuo dispositivo, assicurati di dichiarare il modulo come pacchetto del 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 i codec e i profili supportati sul dispositivo agli sviluppatori di app 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 tuo dispositivo. Per 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, vedere 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.