Media

Icona Android Media HAL

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.

Architettura multimediale di Android

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:

  1. 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.
  2. 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 e HardwareAPI.h.
  3. 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.