Medienmodule

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.

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:

  1. Registrieren Sie einen Standard-android.hardware.media.c2-Dienst und geben Sie benutzerdefinierte ION-Nutzungsparameter an.

  2. 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.

Medienupdates

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.