Moduli multimediali

Android 10 o versioni successive includono 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 raggruppati in moduli che consentono di fornire aggiornamenti della sicurezza e delle funzionalità senza richiedere un aggiornamento completo dell'immagine di sistema.

I componenti multimediali aggiornabili sono presenti nei seguenti moduli.

Per informazioni dettagliate sull'aggiunta di estrattori e decodificatori personalizzati, consulta Personalizzazione dei componenti multimediali.

Estrattori di contenuti multimediali

In Android 9 e versioni precedenti, gli estrattori vengono compilati in un unico file libstagefright.so. 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 ingresso che fornisce una funzione sniffer per determinare se l'estrattore può gestire il file multimediale specificato e una funzione factory che crea un'istanza dell'estrattore per il file multimediale specificato. Ogni estrattore ha un nome (per facilitare il debug) e una versione per indicare qual è l'estrattore più recente.

Il framework multimediale carica automaticamente tutti i file .so dell'estrattore disponibili, quindi puoi creare i tuoi estrattori aggiungendo un nuovo file .so senza dover modificare libstagefright o altre librerie del framework multimediale. Puoi anche assicurarti che un estrattore personalizzato venga preferito 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 campioni multimediali dai contenitori multimediali. MediaParser include le seguenti modifiche ai limiti del codice sorgente:

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

  • external/exoplayer/. Exoplayer verbatim sources on which MediaParser is built.

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 per la personalizzazione varia a seconda delle 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 sotto per i dettagli).

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

Allocazione della memoria ION

In Android 11 o versioni successive e nell'aggiornamento di sistema Google Play v292100200 o versioni successive, 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 dei contenuti multimediali

Figura 1. Flusso di aggiornamento del componente multimediale

Dopo che il framework installa 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.