Moduli multimediali

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

I componenti multimediali aggiornabili sono presenti nei seguenti moduli.

Per dettagli sull'aggiunta di estrattori e decodificatori personalizzati, vedere Personalizzazione dei componenti multimediali .

Estrattori di supporti

In Android 9 e versioni precedenti, gli estrattori vengono compilati in un singolo file libstagefright.so . In Android 10 o versioni successive, gli estrattori 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 di fabbrica che crea un'istanza dell'estrattore per il file multimediale specificato. Ogni estrattore ha un nome (per aiutare nel debug) e 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 estrattori aggiungendo un nuovo file .so senza dover modificare libstagefright o altre librerie del framework multimediale. Puoi anche assicurarti che sia preferito un estrattore personalizzato rispetto all'estrattore fornito da Google.

API MediaSession2

L'API MediaSession2 consente alle app multimediali di esporre i propri 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 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 API e layer sottile.

  • external/exoplayer/ . Sorgenti letterali di Exoplayer su cui è costruito MediaParser.

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

Codec multimediali

Il modulo Media Codecs include componenti software Codec2 aggiornabili. Il supporto per la personalizzazione varia a seconda delle versioni:

  • In Android 11 o versioni successive (in particolare Google Play System Update v292100200 ), è possibile personalizzare i parametri per l'allocazione della memoria ION (vedi sotto per i dettagli).

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

Allocazione della memoria ION

In Android 11 o versioni successive e Google Play System Update v292100200 o versioni successive, è possibile personalizzare i seguenti parametri per l'allocazione della memoria ION.

Parametro Valore di default Descrizione
heapMask 0xFFFFFFFF Sono consentiti tutti i tipi di heap.
allocFlags 0 Nessuna bandiera impostata.
minAlignment 0 Nessun allineamento.

Per sovrascrivere i parametri:

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

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

    <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 multimediale ( 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 Java e codice nativo.

Aggiornamenti multimediali

Figura 1. Il 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.