
Android zawiera Stagefright, silnik odtwarzania multimediów na poziomie natywnym, który ma wbudowane kodeki programowe dla popularnych formatów multimediów.
Funkcje odtwarzania audio i wideo Stagefright obejmują integrację z kodekami OpenMAX, zarządzanie sesjami, renderowanie zsynchronizowane w czasie, kontrolę transportu i DRM.
Stagefright obsługuje również integrację z niestandardowymi kodekami sprzętowymi dostarczonymi przez Ciebie. Aby ustawić ścieżkę sprzętową do kodowania i dekodowania nośników, należy zaimplementować koder-dekoder sprzętowy jako komponent OpenMax IL (Warstwa integracji).
Uwaga: aktualizacje Stagefright mogą być wykonywane w ramach comiesięcznego procesu aktualizacji zabezpieczeń systemu Android oraz jako część wydania systemu operacyjnego Android.
Architektura
Aplikacje multimedialne współdziałają z natywną platformą multimedialną systemu Android zgodnie z następującą architekturą.

Rysunek 1. Architektura mediów
- Ramy aplikacji
- Na poziomie struktury aplikacji znajduje się kod aplikacji, który wykorzystuje interfejsy API android.media do interakcji ze sprzętem multimedialnym.
- segregator IPC
- Serwery proxy Binder IPC ułatwiają komunikację ponad granicami procesu. Znajdują się one w katalogu
frameworks/av/media/libmedia
i zaczynają się od litery "I". - Natywna platforma multimedialna
- Na poziomie natywnym system Android zapewnia platformę multimedialną, która wykorzystuje silnik Stagefright do nagrywania i odtwarzania dźwięku i wideo. Stagefright jest dostarczany z domyślną listą obsługiwanych kodeków programowych i możesz zaimplementować własny kodek sprzętowy, korzystając ze standardu warstwy integracji OpenMax. Aby uzyskać więcej szczegółów dotyczących implementacji, zobacz komponenty MediaPlayer i Stagefright znajdujące się w
frameworks/av/media
. - Warstwa integracyjna OpenMAX (IL)
- OpenMAX IL zapewnia znormalizowany sposób rozpoznawania i używania przez Stagefright niestandardowych, sprzętowych kodeków multimedialnych zwanych komponentami. Musisz dostarczyć wtyczkę OpenMAX w postaci biblioteki współdzielonej o nazwie
libstagefrighthw.so
. Ta wtyczka łączy Stagefright z niestandardowymi komponentami kodeka, które muszą być zaimplementowane zgodnie ze standardem komponentów OpenMAX IL.
Wdrażanie niestandardowych kodeków
Stagefright zawiera wbudowane kodeki programowe dla popularnych formatów multimedialnych, ale możesz także dodać własne niestandardowe kodeki sprzętowe jako komponenty OpenMAX. Aby to zrobić, musisz utworzyć komponenty OMX i wtyczkę OMX, która łączy Twoje niestandardowe kodeki z frameworkiem Stagefright. Na przykład komponenty, zobacz hardware/ti/omap4xxx/domx/
; przykładowy plugin do Galaxy Nexus znajdziesz w hardware/ti/omap4xx/libstagefrighthw
.
Aby dodać własne kodeki:
- Twórz swoje komponenty zgodnie ze standardem komponentów OpenMAX IL. Interfejs komponentu znajduje się w pliku
frameworks/native/include/media/OpenMAX/OMX_Component.h
. Aby dowiedzieć się więcej o specyfikacji OpenMAX IL, odwiedź witrynę OpenMAX . - Utwórz wtyczkę OpenMAX, która łączy Twoje komponenty z usługą Stagefright. Aby zapoznać się z interfejsami do tworzenia wtyczki, zobacz pliki nagłówkowe
frameworks/native/include/media/hardware/OMXPluginBase.h
iHardwareAPI.h
. - Zbuduj swoją wtyczkę jako bibliotekę współdzieloną o nazwie
libstagefrighthw.so
w swoim produkcie Makefile. Na przykład:LOCAL_MODULE := libstagefrighthw
Upewnij się, że w pliku Makefile Twojego urządzenia deklarujesz moduł jako pakiet produktu:
PRODUCT_PACKAGES += \ libstagefrighthw \ ...
Udostępnianie kodeków we frameworku
Usługa Stagefright analizuje pliki system system/etc/media_codecs.xml
i system/etc/media_profiles.xml
w celu udostępnienia obsługiwanych kodeków i profili na urządzeniu twórcom aplikacji za pośrednictwem klas android.media.MediaCodecList
i android.media.CamcorderProfile
. Musisz utworzyć oba pliki w katalogu device/<company>/<device>/
i skopiować je do katalogu system/etc
obrazu systemu w pliku Makefile urządzenia. Na przykład:
PRODUCT_COPY_FILES += \ device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \ device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \
Aby zapoznać się z pełnymi przykładami, zobacz device/samsung/tuna/media_codecs.xml
i device/samsung/tuna/media_profiles.xml
.
Uwaga: od Androida 4.1 element <Quirk>
dla kodeków multimedialnych nie jest już obsługiwany.