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.
Media. Questo modulo include estrattori di contenuti multimediali, API
MediaSession2
e APIMediaParser
.Codec multimediali. Questo modulo include componenti software Codec2 aggiornabili.
MediaProvider. Questo modulo ottimizza i metadati indicizzati (audio, video e immagini da schede SD e dispositivi USB) e rende disponibili questi dati alle app tramite le API pubbliche MediaStore.
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:
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, poi modifica
StoreImpl::Interface::SetIonUsage()
in base alle necessità.Per riutilizzare il processo (OMX)
media.codec
, copia e registra la classeStoreImpl
da frameworks/av/media/codec2/hidl/services/vendor.cpp nel 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 che contiene codice Java e nativo.
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.