Contenuti multimediali

Icona HAL multimediale Android

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.

Architettura multimediale Android

Figura 1. Architettura dei media

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:

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