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 dal partner. I componenti multimediali sono pacchettizzati insieme in moduli che consentono di fornire aggiornamenti della sicurezza e delle funzionalità senza richiedere un aggiornamento completo dell'immagine di sistema.

Nei seguenti moduli sono presenti componenti multimediali aggiornabili.

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 separati. 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. A ogni estrattore viene assegnato un nome (per facilitare il debug) e il controllo delle versioni per indicare qual è il più recente.

Il framework multimediale carica automaticamente tutti i file .so degli estrattori disponibili, quindi puoi creare i tuoi estrattori aggiungendo un nuovo file .so senza dover modificare libstagefright o altre librerie di framework multimediali. Puoi anche fare in modo che sia preferibile 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 di 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 container multimediali del framework per estrarre campioni multimediali dai container 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 Codec multimediali include componenti Codec2 software aggiornabili. Il supporto della personalizzazione varia a seconda della release:

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

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

Allocazione della 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 contenente Java e codice nativo.

Aggiornamenti multimediali

Figura 1. Flusso di aggiornamento dei componenti multimediali

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.