Android 10 oder höher umfasst mehrere aktualisierbare Medienkomponenten, die es ermöglichen, Framework-Komponenten über die Google Play Store-Infrastruktur oder über einen vom Partner bereitgestellten OTA-Mechanismus (Over-the-Air) zu aktualisieren. Medienkomponenten werden in Modulen zusammengefasst, sodass Sicherheits- und Funktionsupdates bereitgestellt werden können, ohne dass ein vollständiges Systemimage-Update erforderlich ist.
Aktualisierbare Media-Komponenten sind in den folgenden Modulen verfügbar.
Media Dieses Modul enthält Media-Extraktoren,
MediaSession2
-APIs undMediaParser
-APIs.Media Codecs Dieses Modul enthält aktualisierbare Softwarekomponenten für Codec2.
MediaProvider. Dieses Modul optimiert indexierte Metadaten (Audio, Video und Bilder von SD-Karten und USB-Geräten) und stellt diese Daten Apps über die öffentlichen MediaStore-APIs zur Verfügung.
Weitere Informationen zum Hinzufügen benutzerdefinierter Extraktoren und Decodern finden Sie unter Media-Komponenten anpassen.
Media-Extraktoren
In Android 9 und niedriger werden Extraktoren in einer einzigen libstagefright.so
-Datei kompiliert. In Android 10 oder höher sind Media-Extraktoren separate Komponenten. Jeder Extraktor hat eine eigene .so
-Datei mit einem Einstiegspunkt, der eine Sniffer-Funktion zum Bestimmen enthält, ob der Extraktor die angegebene Media-Datei verarbeiten kann, und eine Factory-Funktion, die eine Instanz des Extraktors für die angegebene Media-Datei erstellt. Jeder Extraktor hat einen Namen (zur Unterstützung beim Debugging) und eine Versionsnummer, um anzugeben, welcher Extraktor der neueste ist.
Das Media-Framework lädt automatisch alle verfügbaren .so
-Dateien für Extraktoren. 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 dafür sorgen, dass ein benutzerdefinierter Extrahierer dem von Google bereitgestellten Extrahierer vorgezogen wird.
MediaSession2 API
Mit der MediaSession2 API können Media-Apps ihre Transportsteuerelemente und Wiedergabeinformationen für andere Prozesse wie das Android-Framework und andere Apps verfügbar machen. Diese Komponente kann nicht angepasst werden.
MediaParser API
Mit der MediaParser API kann ExoPlayer Framework-Media-Container-Parser effizient nutzen, um Media-Samples aus Media-Containern zu extrahieren. MediaParser umfasst die folgenden Änderungen an den Grenzen des Quellcodes:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
. Implementierung der API und der dünnen Schicht.external/exoplayer/
: Exoplayer-Quellen, auf denen MediaParser basiert.
Die MediaParser API kann nicht angepasst werden. Verwenden Sie zum Testen von MediaParser die Tests in cts/tests/tests/mediaparser/
.
Medien-Codecs
Das Modul „Media Codecs“ enthält aktualisierbare Softwarekomponenten für Codec2. Die Unterstützung für die Anpassung unterscheidet sich je nach Release:
Unter Android 11 oder höher (insbesondere Google Play-Systemupdate v292100200) können Sie die Parameter für die ION-Speicherzuweisung anpassen (siehe unten).
In Android 9 oder niedriger kann die OMX-Codec-API nicht aktualisiert werden, aber Sie können sie weiterhin in der Anbieterpartition verwenden.
ION-Arbeitsspeicherzuweisung
Unter Android 11 oder höher und Google Play-Systemupdate v292100200 oder höher können Sie die folgenden Parameter für die ION-Speicherzuweisung anpassen.
Parameter | Standardwert | Beschreibung |
---|---|---|
heapMask |
0xFFFFFFFF |
Alle Heap-Typen sind zulässig. |
allocFlags |
0 |
Keine Flags festgelegt. |
minAlignment |
0 |
Keine Ausrichtung. |
So überschreiben Sie die Parameter:
Registrieren Sie einen Standarddienst für
android.hardware.media.c2
und geben Sie benutzerdefinierte ION-Nutzungsparameter an.Um einen neuen Dienst zu erstellen, kopieren Sie die Datei frameworks/av/media/codec2/hidl/services/vendor.cpp in Ihr Repository und bearbeiten Sie
StoreImpl::Interface::SetIonUsage()
nach Bedarf.Wenn Sie den (OMX)
media.codec
-Prozess wiederverwenden möchten, kopieren Sie die KlasseStoreImpl
aus frameworks/av/media/codec2/hidl/services/vendor.cpp und registrieren Sie sie in der vorhandenen Dateimediacodec
(frameworks/av/services/mediacodec/main_codecservice.cpp).
Fügen Sie den folgenden Code in das Gerät
manifest.xml
ein.<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 Media-Modul (com.android.media
) und das Media Codec-Modul (com.android.media.swcodec
) sind im APEX-Format. Die enthaltenen Media-Komponenten basieren nur 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: Ablauf der Aktualisierung von Media-Komponenten
Nachdem das Framework das APEX-Paket installiert hat, wird das Gerät neu gestartet und das Laufwerk-Image wird eingebunden. Die Media-Systemprozesse (media.extractor
und media.codec
) laden die aktualisierten Module vom Mount-Punkt.