Dostosuj komponenty multimediów

Komponenty modułu wyodrębniania multimediów i kodeka multimediów możesz rozszerzyć za pomocą dostawcy. rozszerzeń. Interfejsów API MediaSession2 i MediaParser nie można dostosować (ale można wprowadzić zmiany na wyższym poziomie w starszych interfejsach API MediaPlayer i MediaSession.

Aby obsługiwać dodatkowe typy multimediów w platformie multimedialnej Androida, musisz wykonać te czynności: utworzysz niestandardowy ektraktor i dekoder. Przykład: aby dodać obsługę plików wideo Windows Media w plikach AVI, należy utworzyć plik AVI Wyodrębnianie i dekoder filmów Windows Media.

Rozszerzenia

Jeśli domyślne moduły wyodrębniania multimediów nie spełniają Twoich wymagań, możesz umieścić niestandardowe wtyczki wyodrębniania w /system/lib[64]/extractors/. Proces wyodrębniania automatycznie wczytuje wtyczki wyodrębniania z udostępnionego przez Google pakietu APEX. od /system/lib[64]/extractors/.

W podobny sposób można konfigurować usługi dla niestandardowych kodeków multimediów, które korzystają z Kodeka 2.0. zdefiniowany w interfejsie frameworks/av/media/codec2/core/. Podstawowe Więcej informacji na ten temat znajdziesz tutaj: frameworks/av/media/codec2/hidl/services/. i punkt wejścia do biblioteki to interfejs C2ComponentStore. Na przykład: do domyślnej implementacji magazynu kodeków oprogramowania na stronie frameworks/av/media/codec2/vndk/C2Store.cpp

Jeśli używasz własnego interfejsu APEX, zbuduj strukturę usługi kodeka i wczytaj plik APEX. przy użyciu tych samych procesów co usługa mediaswcodec. Aby to zrobić, zdefiniuj biblioteki współdzielonej najwyższego poziomu odpowiedzialnej za rejestrację wszystkich komponentów C2, a potem Utworzyć pakiet APEX (z zależnościami pośrednimi), który będzie się znajdował u dostawcy partycji danych. Po rozpoczęciu procesu usługi kodeka dostawcy może on wczytać i punkt wejścia najwyższego poziomu.

Utwórz wyodrębnianie

Podczas dodawania modułu wyodrębniania dla nowego formatu upewnij się, że zależy on tylko od stabilne interfejsy API NDK i nie wymagają żadnych prywatnych interfejsów API. Programy wyodrębniające powinny zaimplementuj interfejs API zdefiniowany przez frameworks/av/include/media/MediaExtractorPluginApi.h i możesz używać języka C++ kody wygody w frameworks/av/include/media/MediaExtractorPluginHelper.h Ponieważ Android 10 lub nowsza obsługuje tylko najwyższą wersję API ekstraktora, pamiętaj, aby modelować ekstraktor po ekstrakcji za pomocą o najwyższym numerze wersji interfejsu API.

Umieść niestandardowe moduły wyodrębniania danych w regionie /system/lib/64/extractors lub APEX dostawcy, który jest otwierany razem z panelem Google APEX zawierającym moduły wyodrębniania Google. Do Sprawdź, czy platforma wczytała Twój ekstraktor, uruchom poniższe polecenie.

adb shell dumpsys media.extractor

Powinna pojawić się lista dostępnych modułów wyodrębniania danych podobna do tej.

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)

Jeśli niestandardowy moduł wyodrębniania obsługuje format, który jest już obsługiwany przez Moduł wyodrębniający udostępniony przez Google możesz wymusić na platformie wyodrębnianie za pomocą: przy użyciu funkcji Sniff() do zwrócenia wyższego poziomu ufności niż Udostępniany przez Google.

Gdy platforma multimediów wczytuje ekstrakt (z /system/lib/64/extractors) lub od APEX dostawcy), rozpoznaje plik i uzyskuje informacje o treści. Następnym krokiem jest dodanie dekodera formatu, aby platforma mogła jak analizować zawartość pliku.

Utwórz własny dekoder

Do każdego formatu, który nie jest jeszcze obsługiwany przez Dekoder udostępniony przez Google. Na przykład:

  • Aby dodać obsługę platformy multimedialnej dla plików AVI zawierających MP3, potrzebny jest plik AVI ale nie potrzebujesz dekodera MP3, bo taki istnieje.

  • Aby dodać obsługę platformy multimediów dla plików AVI zawierających Windows Media, wymagają zarówno ekstraktora AVI, jak i dekodera Windows Media.

Dodawanie nowego dekodera jest podobne do dodawania własnych dekoderów sprzętowych dla AVC lub HEVC.

Podczas wyodrębniania ekstraktor publikuje typ MIME ścieżek multimedialnych, które wykorzystuje kodeki, które obsługują te typy MIME, muszą być dostępne . Używany ciąg tekstowy typu MIME to między modułem wyodrębniania a kodekiem (ciąg znaków nie musi być dodano do pliku MediaDefs.h).

Integracja ze skanerem multimediów

Skaner multimediów szuka nowych typów plików i dodaje je do bazy danych. Aby skaner multimediów obsługiwał pliki niestandardowego typu, skaner musi: o tym wiedzą. Na urządzeniu z Androidem 10 lub nowszym MimeUtils (w libcore) przechowuje mapowanie MIME na rozszerzenia. Wcześniej to mapowanie są obsługiwane w pliku MediaFile.java, który nadal zawiera mapowanie z Typ MIME na MTP.

Moduł wyodrębniający może wyeksportować listę obsługiwanych rozszerzeń nazw plików (np. MP3). lub MP4). Jest jednak używane tylko przez LegacyMediaScanner; nie ma wpływu na ModernMediaScanner (używana domyślnie).