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ą pakowane w moduły, co umożliwia dostarczanie aktualizacji zabezpieczeń i funkcji bez konieczności aktualizacji całego obrazu systemu.
Komponenty multimediów, które można aktualizować, znajdują się w tych modułach:
Media. Ten moduł obejmuje wyodrębnianie multimediów,
MediaSession2
interfejsy API iMediaParser
interfejsy API.Kodeki multimedialne Ten moduł zawiera oprogramowanie, 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 ekstraktorów i dekoderów znajdziesz w artykule Dostosowywanie komponentów MediaComponent.
Ekstraktory multimediów
W Androidzie 9 i starszych wyodrębnianie jest kompilowane w jeden plik libstagefright.so
. W Androidzie 10 lub nowszym wyodrębniciele multimediów są oddzielnymi komponentami. Każdy ekstraktor ma własny plik .so
z punktem wejścia, który udostępnia funkcję sniffer służącą do sprawdzania, czy ekstraktor może obsłużyć dany plik multimedialny, oraz funkcję factory, 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 multimediów automatycznie wczytuje wszystkie dostępne pliki .so
, dzięki czemu możesz tworzyć własne wyodrębnianie, dodając nowy plik .so
bez konieczności modyfikowania pliku libstagefright
ani innych bibliotek frameworku multimediów. Możesz też określić, że niestandardowy ekstraktor ma być preferowany przed ekstraktorem dostarczonym przez Google.
MediaSession2 API
Interfejs MediaSession2 API umożliwia aplikacjom multimedialnym udostępnianie elementów sterujących transportem i informacji o odtwarzaniu innym procesom, takim jak platforma Android i inne aplikacje. Tego komponentu nie można dostosować.
Interfejs MediaParser API
Interfejs MediaParser API umożliwia ExoPlayerowi efektywne korzystanie z analizatorów kontenerów multimedialnych frameworku do wyodrębniania 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 opiera się MediaParser.
Interfejsu MediaParser API nie można dostosować. Aby przetestować MediaParser, użyj testów w cts/tests/tests/mediaparser/
.
Kodeki multimediów
Moduł kodeków multimedialnych zawiera komponenty Codec2, które można aktualizować. 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 i aktualizacji systemu Google Play w wersji 292100200 lub nowszej możesz dostosować te parametry do alokacji pamięci ION.
Parametr | Wartość domyślna | Opis |
---|---|---|
heapMask |
0xFFFFFFFF |
Dozwolone są wszystkie typy stosu. |
allocFlags |
0 |
Nie ustawiono flag. |
minAlignment |
0 |
Brak dopasowania. |
Aby zastąpić parametry:
Zarejestruj domyślną usługę
android.hardware.media.c2
i podaj niestandardowe parametry ION.Aby utworzyć nową usługę, skopiuj plik frameworks/av/media/codec2/hidl/services/vendor.cpp do repozytorium, a potem w razie potrzeby zmień
StoreImpl::Interface::SetIonUsage()
.Aby ponownie użyć procesu
media.codec
(OMX), skopiuj i zarejestruj klasęStoreImpl
z folderu 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ł Media (com.android.media
) i moduł Media Codec (com.android.media.swcodec
) są w formacie APEX. Zawarte komponenty multimedialne korzystają tylko z interfejsów NDK.
Aktualizacje
Podczas aktualizacji komponenty platformy na urządzeniu wczytują pakiet APEX, który zawiera kod Java i kod natywny.
Rysunek 1. Proces aktualizacji komponentu multimedialnego
Gdy platforma framework zainstaluje pakiet APEX, urządzenie się zrestartuje i zamontuje obraz dysku. Następnie procesy systemu multimedialnego (media.extractor
i media.codec
) wczytują zaktualizowane moduły z punktu zamontowania.