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.
Media. Questo modulo include estrattori 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 tali dati disponibili alle app tramite le API pubbliche di MediaStore .
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:
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()
secondo necessità.Per riutilizzare il processo (OMX)
media.codec
, copiare e registrare la classeStoreImpl
da frameworks/av/media/codec2/hidl/services/vendor.cpp al filemediacodec
esistente ( frameworks/av/services/mediacodec/main_codecservice.cpp ).
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.
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.