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