미디어

Android 미디어 HAL 아이콘

Android에는 Stagefright가 포함되어 있습니다. 기본 수준에 위치한 이 미디어 재생 엔진에는 대중적인 미디어 형식을 위한 소프트웨어 기반 코드가 내장되어 있습니다.

Stagefright 오디오 및 동영상 재생 기능에는 OpenMAX 코덱 통합, 세션 관리, 시간 동기화 렌더링, 전송 제어 및 DRM이 포함되어 있습니다.

또한 Stagefright는 본인이 제공한 맞춤 하드웨어 코덱과의 통합도 지원합니다. 하드웨어 경로를 설정하여 미디어를 인코딩 및 디코딩하려면 하드웨어 기반 코덱을 OpenMax IL(통합 레이어) 구성요소로 구현해야 합니다.

참고: Stagefright 업데이트는 Android 월간 보안 업데이트 프로세스를 통해 발생하거나 Android OS 릴리스의 일환으로 제공될 수 있습니다.

아키텍처

미디어 애플리케이션은 다음 아키텍처에 따라 Android의 기본 멀티미디어 프레임워크와 상호작용합니다.

Android 미디어 아키텍처

그림 1. 미디어 아키텍처

애플리케이션 프레임워크
애플리케이션 프레임워크 수준에는 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/를, 갤럭시 넥서스의 플러그인 예시는 hardware/ti/omap4xx/libstagefrighthw를 참조하세요.

자체 코덱을 추가하는 방법:

  1. OpenMAX IL 구성요소 표준에 따라 구성요소를 생성합니다. 구성요소 인터페이스는 frameworks/native/include/media/OpenMAX/OMX_Component.h 파일에 있습니다. OpenMAX IL 사양에 대한 자세한 내용은 OpenMAX 웹사이트를 참조하세요.
  2. 구성요소를 Stagefright 서비스에 연결하는 OpenMAX 플러그인을 생성합니다. 인터페이스에서 플러그인을 생성하는 방법은 frameworks/native/include/media/hardware/OMXPluginBase.hHardwareAPI.h 헤더 파일을 참조하세요.
  3. 제품 Makefile에 플러그인을 구축하고 이름을 libstagefrighthw.so로 지정합니다. 예:
        LOCAL_MODULE := libstagefrighthw
        

    기기의 Makefileㅇ서 모듈을 제품 패키지로 선언해야 합니다.

        PRODUCT_PACKAGES += \
          libstagefrighthw \
          ...
        

코덱을 프레임워크에 노출

Stagefright 서비스는 system/etc/media_codecs.xmlsystem/etc/media_profiles.xml을 파싱하여 기기의 지원되는 코덱과 프로필을 앱 개발자에게 노출시키며, 이때 android.media.MediaCodecListandroid.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.xmldevice/samsung/tuna/media_profiles.xml을 참조하세요.

참고: Android 4.1부터는 미디어 코덱의 <Quirk> 요소가 더 이상 지원되지 않습니다.