Medienkomponenten anpassen

Sie können den Medienextraktor und die Medien-Codec-Komponenten mithilfe des Erweiterungen. Die MediaSession2 und MediaParser API können nicht angepasst werden (aber kann Änderungen für die Legacy-APIs MediaPlayer und MediaSession vorgelagert werden.

Um weitere Medientypen im Android-Media-Framework zu unterstützen, müssen Sie einen benutzerdefinierten Extractor und Decoder erstellen. Beispiel: Um Windows Media-Videos in AVI-Dateien zu unterstützen, müssen Sie eine AVI-Datei Extractor und ein Windows Media-Video-Decoder.

Erweiterungen

Wenn die Standardmedienextraktoren nicht Ihren Anforderungen entsprechen, können Sie benutzerdefinierte Extrahierer-Plug-ins in /system/lib[64]/extractors/. Der Extrahiererprozess Die Extrahierer-Plug-ins werden automatisch aus dem von Google bereitgestellten APEX-Paket geladen und von /system/lib[64]/extractors/.

Ebenso können Sie benutzerdefinierte Medien-Codec-Dienste einrichten, die den Codec 2.0 verwenden. Schnittstelle definiert in frameworks/av/media/codec2/core/. Für eine einfache Weitere Informationen finden Sie unter frameworks/av/media/codec2/hidl/services/. Die ist die C2ComponentStore-Schnittstelle. Ein Beispiel finden Sie Standard-Codec-Store-Implementierung frameworks/av/media/codec2/vndk/C2Store.cpp

Wenn Sie Ihr eigenes APEX verwenden, strukturieren Sie den Codec-Dienst und laden Sie die APEX-Datei Dabei werden dieselben Prozesse wie beim mediaswcodec-Dienst verwendet. Definieren Sie dazu gemeinsam genutzten Bibliothek für die Registrierung aller C2-Komponenten verantwortlich ist, Ein APEX-Paket (mit transitiven Abhängigkeiten) erstellen, das sich im Anbieter befindet -Partition an. Wenn der Prozess des Anbieter-Codec-Dienstes startet, kann er Einstiegspunkt der obersten Ebene verwenden.

Extrahierer erstellen

Wenn Sie einen Extraktor für ein neues Format hinzufügen, achten Sie darauf, dass der Extraktor nur von stabilen NDK APIs und sind nicht von privaten APIs abhängig. Extraktoren sollten die im folgenden Abschnitt definierte API implementieren: frameworks/av/include/media/MediaExtractorPluginApi.h und können die C++- Convenience-Wrapper in frameworks/av/include/media/MediaExtractorPluginHelper.h. Denn Android ab 10 unterstützt nur die höchste Version des Extractor API verwenden, achten Sie darauf, dass Sie Ihren Extraktor mit dem mit der höchsten API-Versionsnummer.

Platzieren Sie benutzerdefinierte Extraktoren in /system/lib/64/extractors oder einem Anbieter-APEX. das zusammen mit dem Google APEX mit den Google-Extraktoren geöffnet wird. Bis Prüfen Sie, ob das Framework Ihren Extraktor geladen hat, und führen Sie den folgenden Befehl aus.

adb shell dumpsys media.extractor

Sie sollten eine Liste der verfügbaren Extraktoren erhalten, die in etwa so aussieht:

Available extractors:
AAC Extractor: plugin\_version(2), uuid(4fd80eae03d24d729eb948fa6bb54613), version(1), path(/system/lib64/extractors/libaacextractor.so)
AMR Extractor: plugin\_version(2), uuid(c86639c92f3140aca715fa01b4493aaf), version(1), path(/system/lib64/extractors/libamrextractor.so)
FLAC Extractor: plugin\_version(2), uuid(1364b048cc454fda9934327d0ebf9829), version(1), path(/system/lib64/extractors/libflacextractor.so)
MIDI Extractor: plugin\_version(2), uuid(ef6cca0af8a243e6ba5fdfcd7c9a7ef2), version(1), path(/system/lib64/extractors/libmidiextractor.so)
MP3 Extractor: plugin\_version(2), uuid(812a3f6cc8cf46deb5293774b14103d4), version(1), path(/system/lib64/extractors/libmp3extractor.so)
MP4 Extractor: plugin\_version(2), uuid(27575c6744174c548d3d8e626985a164), version(2), path(/system/lib64/extractors/libmp4extractor.so)
MPEG2-PS/TS Extractor: plugin\_version(1), uuid(3d1dcfebe40a436da574c2438a555e5f), version(1), path(/system/lib64/extractors/libmpeg2extractor.so)
Matroska Extractor: plugin\_version(2), uuid(abbedd9238c44904a4c1b3f45f899980), version(1), path(/system/lib64/extractors/libmkvextractor.so)
Ogg Extractor: plugin\_version(2), uuid(8cc5cd06f772495e8a62cba9649374e9), version(1), path(/system/lib64/extractors/liboggextractor.so)
WAV Extractor: plugin\_version(3), uuid(7d61385858374a3884c5332d1cddee27), version(1), path(/system/lib64/extractors/libwavextractor.so)

Wenn Ihr benutzerdefinierter Extraktor ein Format unterstützt, das bereits von einem von Google bereitgestellt wird, können Sie erzwingen, dass das Framework Ihren Extraktor verwendet, indem Sie Sniff()-Funktion verwenden, um ein höheres Konfidenzniveau als das von Google bereitgestellt.

Wenn das Media Framework Ihren Extraktor lädt (von /system/lib/64/extractors) oder von einem Anbieter-APEX), erkennt er die Datei und ruft Informationen Inhalte. Der nächste Schritt besteht darin, einen Decoder für das Format hinzuzufügen, damit das Framework und wissen, wie der Dateiinhalt geparst wird.

Benutzerdefinierten Decoder erstellen

Sie benötigen einen benutzerdefinierten Decoder für jedes Format, das noch nicht von einem Von Google bereitgestellter Decoder Beispiel:

  • Wenn du Media Framework-Unterstützung für AVI-Dateien mit MP3 hinzufügen möchtest, benötigst du ein AVI-Format -Extraktor, benötigen aber keinen MP3-Decoder.

  • Um AVI-Dateien mit Windows Media zu unterstützen, müssen Sie einen AVI-Extraktor und einen Windows Media-Decoder benötigen.

Das Hinzufügen eines neuen Decoders ist vergleichbar mit dem Hinzufügen eigener Hardwaredecoder für AVC oder HEVC.

Während der Extraktor den MIME-Typ der Medien-Tracks enthält, müssen die Codecs, die diese MIME-Typen unterstützen, für den -Datei vollständig unterstützt werden. Der tatsächlich verwendete MIME-Typ-String ist ein Übereinstimmung zwischen dem Extraktor und dem Codec (der String muss nicht wurde der Datei MediaDefs.h hinzugefügt.

Medienscanner einbinden

Der Medienscanner sucht nach neuen Dateitypen und fügt sie der Mediendatenbank hinzu. Damit der Medienscanner Ihren benutzerdefinierten Dateityp verarbeiten kann, muss er davon wissen. Unter Android 10 oder höher: MimeUtils (in libcore) behält die Zuordnung von MIME zu Erweiterung bei. Bisher wurde diese Zuordnung die in der Datei MediaFile.java verarbeitet wird. Diese enthält weiterhin eine Zuordnung von Konstanten vom MIME-Typ zum MTP-Format.

Ein Extraktor kann eine Liste der unterstützten Dateinamenerweiterungen exportieren (z. B. MP3-Dateien) oder MP4). Das wird jedoch nur von LegacyMediaScanner verwendet. hat das keine Auswirkungen auf ModernMediaScanner, die standardmäßig verwendet wird.