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.
Media. Questo modulo include estrattori di contenuti multimediali, API
MediaSession2
eMediaParser
API.Codec multimediali. Questo modulo include componenti Codec2 software aggiornabili.
MediaProvider. Questo modulo ottimizza i metadati indicizzati (audio, video e immagini da schede SD e dispositivi USB) e rende disponibili i dati per le app tramite le API pubbliche MediaStore.
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:
Registra un servizio
android.hardware.media.c2
predefinito e fornisci parametri di utilizzo ION personalizzati.Per creare un nuovo servizio, copia il file frameworks/av/media/codec2/hidl/services/vendor.cpp nel tuo repository, quindi modifica
StoreImpl::Interface::SetIonUsage()
in base alle esigenze.Per riutilizzare il processo
media.codec
(OMX), copia e registra la classeStoreImpl
da frameworks/av/media/codec2/hidl/services/vendor.cpp al filemediacodec
esistente (frameworks/av/services/mediacodec/main_codecservice.cpp).
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.
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.