Moduli multimediali

Android 10 o versioni successive include diversi componenti multimediali aggiornabili che consentono di aggiornare i componenti del framework tramite l'infrastruttura del Google Play Store o tramite un meccanismo over-the-air (OTA) fornito da un partner. I componenti Media vengono raggruppati in moduli che consentono di fornire aggiornamenti di sicurezza e aggiornamenti delle funzionalità senza richiedere un aggiornamento completo dell'immagine di sistema.

I componenti multimediali aggiornabili sono disponibili nei seguenti moduli.

Per informazioni dettagliate sull'aggiunta di estrattori e decodificatori personalizzati, consulta la sezione Personalizzare i componenti Media.

Estrattori di contenuti multimediali

In Android 9 e versioni precedenti, gli estrattori vengono compilati in un unico libstagefright.so file. In Android 10 o versioni successive, gli estrattori di contenuti multimediali sono componenti distinti. Ogni estrattore ha il proprio file .so con un punto di contatto che fornisce una funzione di sniffer per determinare se l'estrattore può gestire il file multimediale specificato e una funzione di factory che crea un'istanza dell'estrattore per il file multimediale specificato. Ogni estrattore è denominato (per facilitare il debug) e viene assegnata una versione per indicare quale estrattore è il più recente.

Il framework multimediale carica automaticamente tutti i file .so di estrazione disponibili, quindi puoi creare i tuoi estrazione aggiungendo un nuovo file .so senza dover modificare libstagefright o altre librerie del framework multimediale. Puoi anche assicurarti che venga preferito un estrattore personalizzato rispetto a quello fornito da Google.

API MediaSession2

L'API MediaSession2 consente alle app multimediali di esporre i controlli di trasporto e le informazioni sulla riproduzione ad altri processi, come il framework Android e altre app. Questo componente non può essere personalizzato.

API MediaParser

L'API MediaParser consente a ExoPlayer di utilizzare in modo efficiente i parser dei contenitori multimediali del framework per estrarre i sample multimediali dai contenitori multimediali. MediaParser include le seguenti modifiche ai confini del codice sorgente:

  • frameworks/base/apex/media/framework/java/android/media/MediaParser.java. Implementazione dell'API e del livello thin.

  • external/exoplayer/. Origini verbatim di Exoplayer su cui è basato MediaParser.

L'API MediaParser non può essere personalizzata. Per testare MediaParser, utilizza i test in cts/tests/tests/mediaparser/.

Codec multimediali

Il modulo Media Codecs include componenti Codec2 software aggiornabili. Il supporto per la personalizzazione varia in base alle release:

  • In Android 11 o versioni successive (in particolare Aggiornamento di sistema Google Play v292100200), puoi personalizzare i parametri per l'allocazione della memoria ION (vedi di seguito per maggiori dettagli).

  • In Android 9 o versioni precedenti, l'API codec OMX non è aggiornabile, ma puoi comunque usarla nella partizione del fornitore.

Allocazione memoria ION

In Android 11 o versioni successive e nell'aggiornamento di sistema Google Play v292100200 o superiore, puoi personalizzare i seguenti parametri per l'allocazione della memoria ION.

Parametro Valore predefinito Descrizione
heapMask 0xFFFFFFFF Sono consentiti tutti i tipi di heap.
allocFlags 0 Nessun flag impostato.
minAlignment 0 Nessun allineamento.

Per eseguire l'override dei parametri:

  1. Registra un servizio android.hardware.media.c2 predefinito e fornisci parametri di utilizzo ION personalizzati.

  2. Aggiungi il seguente codice al dispositivo manifest.xml.

    <hal format="hidl">
        <name>android.hardware.media.c2</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IComponentStore</name>
            <instance>default</instance>
        </interface>
    </hal>
    

Formato e dipendenze

Il modulo Media (com.android.media) e il modulo Media Codec (com.android.media.swcodec) sono in formato APEX. I componenti multimediali inclusi si basano solo sulle API NDK.

Aggiornamenti

Durante un aggiornamento, i componenti del framework sul dispositivo caricano un pacchetto APEX che contiene codice Java e nativo.

Aggiornamenti multimediali

Figura 1. Flusso di aggiornamento del componente multimediale

Dopo che il framework ha installato il pacchetto APEX, il dispositivo si riavvia e monta l'immagine del disco e i processi del sistema multimediale (media.extractor e media.codec) caricano i moduli aggiornati dal punto di montaggio.