Android 10 oder höher enthält mehrere aktualisierbare Medienkomponenten, mit denen Framework-Komponenten über die Google Play Store-Infrastruktur oder über ein von Partnern bereitgestelltes Over-the-Air-Verfahren (OTA) aktualisiert werden können. Medienkomponenten werden in Modulen gepackt, um Sicherheits- und Funktionsupdates bereitzustellen, ohne dass ein vollständiges Update des System-Images erforderlich ist.
In den folgenden Modulen gibt es aktualisierbare Medienkomponenten.
Media. Dieses Modul umfasst Medien-Extractor,
MediaSession2
APIs undMediaParser
APIs.Medien-Codecs Dieses Modul enthält aktualisierbare Codec2-Softwarekomponenten.
MediaProvider Dieses Modul optimiert indexierte Metadaten (Audio, Video und Bilder von SD-Karten und USB-Geräten) und stellt diese Daten über die öffentlichen MediaStore APIs für Apps zur Verfügung.
Weitere Informationen zum Hinzufügen benutzerdefinierter Extraktoren und Decoder findest du unter Medienkomponenten anpassen.
Medienextraktoren
Unter Android 9 und niedriger werden Extraktoren in einer einzigen libstagefright.so
-Datei kompiliert. In Android 10 oder höher sind Medienextraktoren separate Komponenten. Jeder Extraktor hat eine eigene .so
-Datei mit einem Einstiegspunkt, der eine Sniffer-Funktion bereitstellt, mit der bestimmt wird, ob der Extraktor die angegebene Mediendatei verarbeiten kann, sowie eine factory-Funktion, die eine Instanz des Extrahierers für die angegebene Mediendatei erstellt. Jeder Extractor hat einen Namen (zur Unterstützung bei der Fehlerbehebung) und eine Version, die angibt, welcher Extractor der neueste ist.
Das Media-Framework lädt automatisch alle verfügbaren Extrahiererdateien vom Typ .so
. Sie können also eigene Extraktoren erstellen, indem Sie eine neue .so
-Datei hinzufügen, ohne libstagefright
oder andere Media-Framework-Bibliotheken ändern zu müssen. Sie können auch festlegen, dass ein benutzerdefinierter Extraktor dem von Google bereitgestellten Extraktor vorgezogen wird.
MediaSession2-API
Mit der MediaSession2 API können Medien-Apps ihre Transportsteuerungen und Wiedergabeinformationen für andere Prozesse wie das Android-Framework und andere Apps freigeben. Diese Komponente kann nicht angepasst werden.
MediaParser-API
Mit der MediaParser API kann ExoPlayer die Mediacontainer-Parser des Frameworks effizient nutzen, um Mediensamples aus Mediacontainern zu extrahieren. MediaParser umfasst die folgenden Änderungen an den Grenzen des Quellcodes:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
. API- und Thin-Layer-Implementierungexternal/exoplayer/
: Wörtliche Exoplayer-Quellen, auf denen MediaParser erstellt wurde.
Die MediaParser API kann nicht angepasst werden. Verwende die Tests unter cts/tests/tests/mediaparser/
, um MediaParser zu testen.
Medien-Codecs
Das Media-Codecs-Modul enthält aktualisierbare Software-Codec2-Komponenten. Die Unterstützung für Anpassungen unterscheidet sich je nach Releases:
In Android 11 oder höher (insbesondere Google Play-Systemupdate Version 292100200) können Sie die Parameter für die ION-Arbeitsspeicherzuweisung anpassen. Weitere Informationen finden Sie unten.
Unter Android 9 oder niedriger kann die OMX-Codec-API nicht aktualisiert werden, Sie können sie aber weiterhin in der Anbieterpartition verwenden.
ION-Speicherzuweisung
Ab Android 11 und Google Play-Systemupdate v292100200 können Sie die folgenden Parameter für die ION-Arbeitsspeicherzuweisung anpassen.
Parameter | Standardwert | Beschreibung |
---|---|---|
heapMask |
0xFFFFFFFF |
Alle Heap-Typen sind zulässig. |
allocFlags |
0 |
Es wurden keine Flags festgelegt. |
minAlignment |
0 |
Keine Ausrichtung. |
So überschreiben Sie die Parameter:
Registrieren Sie einen
android.hardware.media.c2
-Standarddienst und geben Sie benutzerdefinierte ION-Nutzungsparameter an.Wenn Sie einen neuen Dienst erstellen möchten, kopieren Sie die Datei frameworks/av/media/codec2/hidl/services/vendor.cpp in Ihr Repository und ändern Sie
StoreImpl::Interface::SetIonUsage()
nach Bedarf.Wenn Sie den (OMX)
media.codec
-Prozess wiederverwenden möchten, kopieren und registrieren Sie dieStoreImpl
-Klasse aus frameworks/av/media/codec2/hidl/services/vendor.cpp in der vorhandenenmediacodec
-Datei (frameworks/av/services/mediacodec/main_codecservice.cpp).
Fügen Sie dem Gerät
manifest.xml
den folgenden Code hinzu.<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>
Format und Abhängigkeiten
Das Medienmodul (com.android.media
) und das Medien-Codec-Modul (com.android.media.swcodec
) sind im APEX-Format. Eingeschlossene Medienkomponenten basieren ausschließlich auf NDK-APIs.
Updates
Während eines Updates laden die Framework-Komponenten auf dem Gerät ein APEX-Paket, das Java und nativen Code enthält.
Abbildung 1: Aktualisierungsablauf der Medienkomponente
Nachdem das Framework das APEX-Paket installiert hat, wird das Gerät neu gestartet und das Laufwerk-Image bereitgestellt. Die Mediensystemprozesse (media.extractor
und media.codec
) laden die aktualisierten Module vom Bereitstellungspunkt.