Medienmodule

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.

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-Implementierung

  • external/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:

  1. Registrieren Sie einen android.hardware.media.c2-Standarddienst 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. 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.

Medienupdates

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.