Android 10 lub nowszy zawiera kilka komponentów multimediów, które można aktualizować za pomocą infrastruktury Sklepu Google Play lub mechanizmu OTA udostępnianego przez partnera. Komponenty multimediów są spakowane w moduły, które umożliwiają aktualizowanie zabezpieczeń i funkcji bez konieczności pełnej aktualizacji obrazu systemu.
W poniższych modułach znajdują się komponenty multimediów z możliwością aktualizacji.
Multimedia. Ten moduł obejmuje wyodrębnianie multimediów oraz interfejsy API
MediaSession2
iMediaParser
interfejsy API.Kodeki multimedialne Moduł ten zawiera komponenty Codec2, które można aktualizować.
MediaProvider Ten moduł optymalizuje zaindexowane metadane (dźwięk, wideo i obrazy z kart SD i urządzeń USB) oraz udostępnia te dane aplikacjom za pomocą interfejsów publicznego interfejsu API MediaStore.
Szczegółowe informacje o dodawaniu niestandardowych modułów wyodrębniania i dekoderów znajdziesz w artykule Dostosowywanie komponentów multimediów.
Ekstraktory multimediów
W Androidzie 9 i starszych wyodrębnianie jest kompilowane w jeden plik libstagefright.so
. W Androidzie 10 lub nowszym wyodrębnianie multimediów to osobne komponenty. Każdy moduł wyodrębniania ma własny plik .so
z punktem wejścia udostępniającym funkcję sniffera określającą, czy ekstrator może obsłużyć dany plik multimedialny, oraz funkcję fabryczną, która tworzy instancję ekstraktora dla danego pliku multimedialnego. Każdy ekstraktor ma nazwę (aby ułatwić debugowanie) i wersję, która wskazuje, który ekstraktor jest najnowszy.
Framework mediów automatycznie wczytuje wszystkie dostępne pliki ekstraktora .so
, więc możesz tworzyć własne ekstraktory, dodając nowy plik .so
bez konieczności modyfikowania pliku libstagefright
ani innych bibliotek frameworku mediów. Możesz też sprawdzić, czy preferowany jest niestandardowy moduł wyodrębniania niż udostępniony przez Google.
MediaSession2 API
Interfejs MediaSession2 API pozwala aplikacjom do multimediów ujawniać elementy sterujące transportem i odtwarzać informacje w innych procesach, takich jak platforma Androida i inne aplikacje. Tego komponentu nie można dostosować.
Interfejs API MediaParser
Interfejs API MediaParser umożliwia firmie ExoPlayer efektywne wykorzystanie parserów kontenerów multimediów do wyodrębnienia próbek multimediów z kontenerów multimediów. MediaParser zawiera te zmiany w ograniczeniach kodu źródłowego:
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
. Implementacja interfejsu API i cienkiej warstwy.external/exoplayer/
. Źródła dosłowne Exoplayer, na których oparty jest MediaParser.
Nie można dostosować interfejsu MediaParser API. Aby przetestować MediaParser, użyj testów w cts/tests/tests/mediaparser/
.
Kodeki multimediów
Moduł kodeków multimediów zawiera komponenty Codec2, które można zaktualizować. Obsługa dostosowywania różni się w zależności od wersji:
W Androidzie 11 lub nowszym (szczególnie w aktualizacji systemu Google Play w wersji 292100200) możesz dostosowywać parametry alokacji pamięci ION (szczegóły poniżej).
W Androidzie 9 lub starszym interfejs OMX codec API nie jest aktualizowany, ale nadal możesz go używać na partycji dostawcy.
Przydział pamięci ION
W Androidzie 11 lub nowszym oraz aktualizacji systemowej Google Play w wersji 292100200 lub nowszej możesz dostosować poniższe parametry alokacji pamięci ION.
Parametr | Wartość domyślna | Opis |
---|---|---|
heapMask |
0xFFFFFFFF |
Dozwolone są wszystkie typy stosu. |
allocFlags |
0 |
Nie ustawiono żadnych flag. |
minAlignment |
0 |
Brak wyrównania. |
Aby zastąpić parametry:
Zarejestruj domyślną usługę
android.hardware.media.c2
i podaj niestandardowe parametry użycia ION.Aby utworzyć nową usługę, skopiuj plik frameworks/av/media/codec2/hidl/services/vendor.cpp do repozytorium, a potem w razie potrzeby zmodyfikuj plik
StoreImpl::Interface::SetIonUsage()
.Aby ponownie wykorzystać proces
media.codec
(OMX), skopiuj i zarejestruj klasęStoreImpl
z frameworks/av/media/codec2/hidl/services/vendor.cpp do istniejącego plikumediacodec
(frameworks/av/services/mediacodec/main_codecservice.cpp).
Dodaj ten kod do urządzenia
manifest.xml
.<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 i zależności
Moduły multimediów (com.android.media
) i kodek mediów (com.android.media.swcodec
) mają format APEX. Uwzględnione komponenty multimedialne korzystają tylko z interfejsów API NDK.
Aktualizacje
Podczas aktualizacji komponenty platformy na urządzeniu ładują pakiet APEX, który zawiera kod Java i kod natywny.
Rysunek 1. Proces aktualizacji komponentu multimedialnego
Gdy platforma zainstaluje pakiet APEX, urządzenie uruchomi się ponownie i dołączy obraz dysku oraz procesy systemu multimedialnego (media.extractor
i media.codec
) wczytują zaktualizowane moduły od punktu podłączania.