
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 z czasem, kontrolę transportu i DRM.
Stagefright obsługuje także integrację z dostarczonymi przez Ciebie niestandardowymi kodekami sprzętowymi. Aby ustawić ścieżkę sprzętową do kodowania i dekodowania multimediów, należy zaimplementować kodek sprzętowy jako komponent OpenMax IL (warstwa integracji).
Uwaga: aktualizacje Stagefright mogą być realizowane w ramach comiesięcznej aktualizacji zabezpieczeń systemu Android oraz w ramach wersji systemu operacyjnego Android.
Architektura
Aplikacje multimedialne współdziałają z natywną platformą multimedialną Androida 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 systemu Android.media do interakcji ze sprzętem multimedialnym.
- Spoiwo IPC
- Serwery proxy Binder IPC ułatwiają komunikację ponad granicami procesów. Znajdują się one w katalogu
frameworks/av/media/libmedia
i zaczynają się na literę „I”. - Natywne środowisko multimedialne
- Na poziomie natywnym Android zapewnia środowisko multimedialne wykorzystujące silnik Stagefright do nagrywania i odtwarzania dźwięku i wideo. Stagefright zawiera domyślną listę obsługiwanych kodeków programowych i można zaimplementować własny kodek sprzętowy, korzystając ze standardu warstwy integracji OpenMax. Więcej szczegółów implementacji można znaleźć w komponentach MediaPlayer i Stagefright znajdujących się w
frameworks/av/media
. - Warstwa integracji OpenMAX (IL)
- OpenMAX IL zapewnia Stagefrightowi ustandaryzowany sposób rozpoznawania i używania 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 kodeków, które muszą być zaimplementowane zgodnie ze standardem komponentów OpenMAX IL.
Implementowanie niestandardowych kodeków
Stagefright ma wbudowane kodeki programowe dla popularnych formatów multimediów, 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 połączy Twoje niestandardowe kodeki ze strukturą Stagefright. Przykładowe komponenty znajdziesz w hardware/ti/omap4xxx/domx/
; przykładową wtyczkę dla Galaxy Nexus znajdziesz pod adresem hardware/ti/omap4xx/libstagefrighthw
.
Aby dodać własne kodeki:
- Twórz komponenty zgodnie ze standardem komponentów OpenMAX IL. Interfejs komponentu znajduje się w pliku
frameworks/native/include/media/OpenMAX/OMX_Component.h
. Więcej informacji na temat specyfikacji OpenMAX IL można znaleźć na stronie internetowej OpenMAX . - Utwórz wtyczkę OpenMAX, która połą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 pliku Makefile produktu. Na przykład:LOCAL_MODULE := libstagefrighthw
Upewnij się, że w pliku Makefile swojego urządzenia zadeklarowałeś moduł jako pakiet produktu:
PRODUCT_PACKAGES += \ libstagefrighthw \ ...
Udostępnianie kodeków frameworkowi
Usługa Stagefright analizuje pliki system/etc/media_codecs.xml
i system/etc/media_profiles.xml
aby udostępnić deweloperom aplikacji obsługiwane kodeki i profile na urządzeniu 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 \
Pełne przykłady można znaleźć w device/samsung/tuna/media_codecs.xml
i device/samsung/tuna/media_profiles.xml
.
Uwaga: od wersji Androida 4.1 element <Quirk>
dla kodeków multimedialnych nie jest już obsługiwany.