Android 10 oder höher umfasst mehrere aktualisierbare Medienkomponenten, die die Aktualisierung von Framework-Komponenten über die Google Play Store-Infrastruktur oder über einen von Partnern bereitgestellten Over-the-Air-Mechanismus (OTA) ermöglichen. Medienkomponenten sind in Modulen zusammengefasst, die die Bereitstellung von Sicherheitsupdates und Funktionsupdates ermöglichen, ohne dass ein vollständiges System-Image-Update erforderlich ist.
In den folgenden Modulen sind aktualisierbare Medienkomponenten vorhanden.
Medien. Dieses Modul umfasst Medienextraktoren ,
MediaSession2
APIs undMediaParser
APIs .Mediencodecs . Dieses Modul enthält aktualisierbare Software-Codec2-Komponenten.
MediaProvider . Dieses Modul optimiert indizierte 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.
Einzelheiten zum Hinzufügen benutzerdefinierter Extraktoren und Decoder finden Sie unter Anpassen von Medienkomponenten .
Medienextraktoren
In 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 verfügt über eine eigene .so
Datei mit einem Einstiegspunkt, der eine Sniffer- Funktion bereitstellt, um festzustellen, ob der Extraktor die angegebene Mediendatei verarbeiten kann, sowie eine Factory- Funktion, die eine Instanz des Extraktors für die angegebene Mediendatei erstellt. Jeder Extraktor wird benannt (um beim Debuggen zu helfen) und mit einer Version versehen, um anzugeben, welcher Extraktor der neueste ist.
Das Medien-Framework lädt automatisch alle verfügbaren Extraktor .so
Dateien, sodass Sie Ihre eigenen Extraktoren erstellen können, indem Sie eine neue .so
Datei hinzufügen, ohne libstagefright
oder andere Medien-Framework-Bibliotheken ändern zu müssen. Sie können auch sicherstellen, dass ein benutzerdefinierter Extraktor dem von Google bereitgestellten Extraktor vorgezogen wird.
MediaSession2-API
Mit der MediaSession2-API können Medien-Apps ihre Transportsteuerung und Wiedergabeinformationen anderen Prozessen wie dem Android-Framework und anderen Apps zur Verfügung stellen. Diese Komponente kann nicht angepasst werden.
MediaParser-API
Mit der MediaParser-API kann ExoPlayer Framework-Mediencontainer-Parser effizient nutzen, um Medienbeispiele aus Mediencontainern zu extrahieren. MediaParser enthält die folgenden Änderungen an den Quellcodegrenzen:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
. API- und Thin-Layer-Implementierung.external/exoplayer/
. Exoplayer-Wortquellen, auf denen MediaParser basiert.
Die MediaParser-API kann nicht angepasst werden. Um MediaParser zu testen, verwenden Sie die Tests in cts/tests/tests/mediaparser/
.
Mediencodecs
Das Media Codecs-Modul enthält aktualisierbare Software-Codec2-Komponenten. Die Unterstützung für die Anpassung unterscheidet sich zwischen den Versionen:
In Android 11 oder höher (insbesondere Google Play System Update v292100200 ) können Sie die Parameter für die ION-Speicherzuweisung anpassen (Einzelheiten siehe unten).
In Android 9 oder niedriger ist die OMX-Codec-API nicht aktualisierbar, Sie können sie jedoch weiterhin in der Herstellerpartition verwenden.
ION-Speicherzuordnung
In Android 11 oder höher und Google Play System Update v292100200 oder höher können Sie die folgenden Parameter für die ION-Speicherzuweisung anpassen.
Parameter | Standardwert | Beschreibung |
---|---|---|
heapMask | 0xFFFFFFFF | Alle Heap-Typen zulässig. |
allocFlags | 0 | Keine Flags gesetzt. |
minAlignment | 0 | Keine Ausrichtung. |
So überschreiben Sie die Parameter:
Registrieren Sie einen Standarddienst
android.hardware.media.c2
und stellen Sie benutzerdefinierte ION-Nutzungsparameter bereit.Um einen neuen Dienst zu erstellen, kopieren Sie die Datei „frameworks/av/media/codec2/hidl/services/vendor.cpp“ in Ihr Repository und ändern Sie dann
StoreImpl::Interface::SetIonUsage()
nach Bedarf.Um den (OMX)
media.codec
Prozess wiederzuverwenden, kopieren und registrieren Sie dieStoreImpl
Klasse aus Frameworks/av/media/codec2/hidl/services/vendor.cpp in die vorhandenemediacodec
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 Mediencodec-Modul ( com.android.media.swcodec
) liegen im APEX- Format vor. Enthaltene Medienkomponenten basieren nur auf NDK-APIs.
Aktualisierung
Bei einem Update laden die Framework-Komponenten auf dem Gerät ein APEX-Paket, das Java und nativen Code enthält.
Abbildung 1. Der Aktualisierungsablauf der Medienkomponente
Nachdem das Framework das APEX-Paket installiert hat, startet das Gerät neu und stellt das Festplatten-Image bereit. Die Mediensystemprozesse ( media.extractor
und media.codec
) laden die aktualisierten Module vom Bereitstellungspunkt.