Android 10 oder höher enthält mehrere aktualisierbare Medienkomponenten, mit denen Framework-Komponenten über die Google Play Store-Infrastruktur oder über einen von einem Partner bereitgestellten Over-the-Air-Mechanismus (OTA) aktualisiert werden können. Medienkomponenten werden in Modulen zusammengefasst, sodass Sicherheits- und Funktionsupdates bereitgestellt werden können, ohne dass ein vollständiges System-Image-Update 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 Software-Codec2-Komponenten.
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 finden Sie unter Medienkomponenten anpassen.
Medienextraktoren
Unter Android 9 und niedriger werden Extraktoren in einer einzigen libstagefright.so
-Datei kompiliert. Unter Android 10 oder höher sind Media-Extractor separate Komponenten. Jeder Extractor hat eine eigene .so
-Datei mit einem Einstiegspunkt, der eine Sniffer-Funktion zur Bestimmung bereitstellt, ob der Extractor die angegebene Mediendatei verarbeiten kann, und eine Factory-Funktion, die eine Instanz des Extractors für die angegebene Mediendatei erstellt. Jeder Extractor hat einen Namen (zur Unterstützung bei der Fehlerbehebung) und eine Version, um anzugeben, welcher Extractor der neueste ist.
Das Media-Framework lädt automatisch alle verfügbaren .so
-Dateien des Extractors. Du kannst also eigene Extractors erstellen, indem du eine neue .so
-Datei hinzufügst, 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 enthält die folgenden Änderungen an den Quellcodegrenzen:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
. API und dünne Schicht implementieren.external/exoplayer/
. Exoplayer-Wortlautquellen, auf denen MediaParser basiert.
Die MediaParser API kann nicht angepasst werden. Verwende die Tests unter cts/tests/tests/mediaparser/
, um MediaParser zu testen.
Medien-Codecs
Das Modul „Media Codecs“ enthält aktualisierbare Software-Codec2-Komponenten. 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. 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
Unter Android 11 oder höher und mit dem Google Play-Systemupdate v292100200 oder höher können Sie die folgenden Parameter für die ION-Speicherzuordnung 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 Standard-
android.hardware.media.c2
-Dienst 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. Die enthaltenen Medienkomponenten nutzen nur 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 Medienkomponenten
Nachdem das Framework das APEX-Paket installiert hat, wird das Gerät neu gestartet und das Laufwerk-Image wird bereitgestellt. Die Mediensystemprozesse (media.extractor
und media.codec
) laden die aktualisierten Module vom Bereitstellungspunkt.