Android에는 Stagefright가 포함되어 있습니다. 기본 수준에 위치한 이 미디어 재생 엔진에는 대중적인 미디어 형식을 위한 소프트웨어 기반 코덱이 내장되어 있습니다.
Stagefright 오디오 및 동영상 재생 기능에는 OpenMAX 코덱 통합, 세션 관리, 시간 동기화 렌더링, 전송 제어, DRM이 포함되어 있습니다.
또한 Stagefright는 본인이 제공한 맞춤 하드웨어 코덱과의 통합도 지원합니다. 하드웨어 경로를 설정하여 미디어를 인코딩 및 디코딩하려면 하드웨어 기반 코덱을 OpenMax IL(통합 레이어) 구성요소로 구현해야 합니다.
참고: Stagefright 업데이트는 Android 월간 보안 업데이트 프로세스를 통해 발생하거나 Android OS 릴리스의 일환으로 제공될 수 있습니다.
아키텍처
미디어 애플리케이션은 다음 아키텍처에 따라 Android의 기본 멀티미디어 프레임워크와 상호작용합니다.
- 애플리케이션 프레임워크
- 애플리케이션 프레임워크 수준에는 android.media API 를 활용하여 멀티미디어 하드웨어와 상호작용하는 애플리케이션 코드가 있습니다.
- 바인더 IPC
- 바인더 IPC 프록시는 프로세스 경계를 통한 통신을 용이하게 합니다.
frameworks/av/media/libmedia
디렉터리에 위치하며 'I' 문자로 시작합니다. - 기본 멀티미디어 프레임워크
- Android는 기본 수준에서 오디오와 동영상의 녹화 및 재생에 Stagefright 엔진을 활용하는 멀티미디어 프레임워크를 제공합니다. Stagefright는 기본적으로 지원되는 소프트웨어 코드와 함께 제공되며 OpenMax 통합 레이어 표준을 사용하여 자체적인 하드웨어 코덱을 구현할 수 있습니다. 추가 구현 세부정보는
frameworks/av/media
에 있는 MediaPlayer 및 Stagefright 구성요소를 참고하세요. - OpenMAX IL(통합 레이어)
- OpenMAX IL은 Stagefright가 구성요소라고 불리는 맞춤 하드웨어 기반 멀티미디어 코덱을 인식하고 사용할 수 있도록 표준화된 방식을 제공합니다.
libstagefrighthw.so
라는 공유 라이브러리 형식의 OpenMAX 플러그인을 제공해야 합니다. 이 플러그인은 Stagefright를 사용자의 맞춤 코덱 구성요소와 연결하며, 이를 OpenMAX IL 구성요소 표준에 따라 구현해야 합니다.
맞춤 코덱 구현
Stagefright는 일반적인 미디어 형식을 위한 소프트웨어 코덱을 기본으로 제공하지만 나만의 맞춤 하드웨어 코덱을 OpenMAX 구성요소로 추가할 수도 있습니다. 이를 위해서는 OMX 구성요소, 그리고 맞춤 코덱을 Stagefright 프레임워크에 연결하는 OMX 플러그인을 생성해야 합니다. 구성요소의 예는 hardware/ti/omap4xxx/domx/
를 참조하세요. Galaxy Nexus용 플러그인 예는 hardware/ti/omap4xx/libstagefrighthw
를 참고하세요.
자체 코덱을 추가하는 방법:
- OpenMAX IL 구성요소 표준에 따라 구성요소를 생성합니다. 구성요소 인터페이스는
frameworks/native/include/media/OpenMAX/OMX_Component.h
파일에 있습니다. OpenMAX IL 사양에 관한 자세한 내용은 OpenMAX 웹사이트를 참조하세요. - 구성요소를 Stagefright 서비스에 연결하는 OpenMAX 플러그인을 생성합니다. 인터페이스에서 플러그인을 생성하는 방법은
frameworks/native/include/media/hardware/OMXPluginBase.h
및HardwareAPI.h
헤더 파일을 참조하세요. - 제품 Makefile에 이름이
libstagefrighthw.so
인 공유 라이브러리로 플러그인을 빌드합니다. 예:
LOCAL_MODULE := libstagefrighthw
기기의 Makefile에서 모듈을 제품 패키지로 선언해야 합니다.
PRODUCT_PACKAGES += \ libstagefrighthw \ ...
코덱을 프레임워크에 노출
Stagefright 서비스는 system/etc/media_codecs.xml
및 system/etc/media_profiles.xml
을 파싱하여 android.media.MediaCodecList
및 android.media.CamcorderProfile
클래스를 통해 기기에서 지원되는 코덱과 프로필을 앱 개발자에게 노출합니다. 두 파일을 모두 device/<company>/<device>/
디렉터리에 만들고 기기의 Makefile에 있는 시스템 이미지의 system/etc
디렉터리에 복사해야 합니다. 예:
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 \
전체 예시는 device/samsung/tuna/media_codecs.xml
및 device/samsung/tuna/media_profiles.xml
을 참조하세요 .
참고: Android 4.1부터는 미디어 코덱의 <Quirk>
요소가 더 이상 지원되지 않습니다.