Media

Ikona Android Media HAL

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

Architektura multimediów Androida

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.

Implementuj niestandardowe kodeki

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:

  1. 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 .
  2. 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 i HardwareAPI.h .
  3. 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ępnij kodeki 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.