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.