2025년 3월 27일부터 AOSP를 빌드하고 기여하려면 aosp-main
대신 android-latest-release
를 사용하는 것이 좋습니다. 자세한 내용은 AOSP 변경사항을 참고하세요.
미디어
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
Android에는 Stagefright가 포함되어 있습니다. 기본 수준에 위치한 이 미디어 재생 엔진에는 대중적인 미디어 형식을 위한 소프트웨어 기반 코덱이 내장되어 있습니다.
Stagefright 오디오 및 동영상 재생 기능에는 OpenMAX 코덱 통합, 세션 관리, 시간 동기화 렌더링, 전송 제어, DRM이 포함되어 있습니다.
또한 Stagefright는 본인이 제공한 맞춤 하드웨어 코덱과의 통합도 지원합니다. 하드웨어 경로를 설정하여 미디어를 인코딩 및 디코딩하려면 하드웨어 기반 코덱을 OpenMax IL(통합 레이어) 구성요소로 구현해야 합니다.
참고: Stagefright 업데이트는 Android 월간 보안 업데이트 프로세스를 통해 발생하거나 Android OS 릴리스의 일환으로 제공될 수 있습니다.
아키텍처
미디어 애플리케이션은 다음 아키텍처에 따라 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/
를 참조하세요. 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>
요소가 더 이상 지원되지 않습니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-27(UTC)"],[],[],null,["# Media\n\nAndroid includes Stagefright, a media playback engine at the native level\nthat has built-in software-based codecs for popular media formats.\n\nStagefright audio and video playback features include integration with\nOpenMAX codecs, session management, time-synchronized rendering, transport\ncontrol, and DRM.\n\nStagefright also supports integration with custom hardware codecs provided by\nyou. To set a hardware path to encode and decode media, you must implement a\nhardware-based codec as an OpenMax IL (Integration Layer) component.\n\n**Note:** Stagefright updates can occur through the\nAndroid [monthly security\nupdate](/docs/security/bulletin) process and as part of an Android OS release.\n\nArchitecture\n------------\n\nMedia applications interact with the Android native multimedia framework\naccording to the following architecture.\n\n**Figure 1.** Media\narchitecture\n\nApplication Framework\n: At the application framework level is application code that utilizes\n [android.media](http://developer.android.com/reference/android/media/package-summary.html)\n APIs to interact with the multimedia hardware.\n\nBinder IPC\n: The Binder IPC proxies facilitate communication over process boundaries.\n They are located in the `frameworks/av/media/libmedia` directory and\n begin with the letter \"I\".\n\nNative Multimedia Framework\n: At the native level, Android provides a multimedia framework that utilizes\n the Stagefright engine for audio and video recording and playback. Stagefright\n comes with a default list of supported software codecs and you can implement\n your own hardware codec by using the OpenMax integration layer standard. For\n more implementation details, see the MediaPlayer and Stagefright components\n located in `frameworks/av/media`.\n\nOpenMAX Integration Layer (IL)\n: The OpenMAX IL provides a standardized way for Stagefright to recognize and\n use custom hardware-based multimedia codecs called components. You must provide\n an OpenMAX plugin in the form of a shared library named\n `libstagefrighthw.so`. This plugin links Stagefright with your custom\n codec components, which must be implemented according to the OpenMAX IL\n component standard.\n\nImplement custom codecs\n-----------------------\n\nStagefright comes with built-in software codecs for common media formats, but\nyou can also add your own custom hardware codecs as OpenMAX components. To do\nthis, you must create the OMX components and an OMX plugin that hooks together\nyour custom codecs with the Stagefright framework. For example components, see\nthe `hardware/ti/omap4xxx/domx/`; for an example plugin for the\nGalaxy Nexus, see `hardware/ti/omap4xx/libstagefrighthw`.\n\nTo add your own codecs:\n\n1. Create your components according to the OpenMAX IL component standard. The component interface is located in the `frameworks/native/include/media/OpenMAX/OMX_Component.h` file. To learn more about the OpenMAX IL specification, refer to the [OpenMAX website](http://www.khronos.org/openmax/).\n2. Create a OpenMAX plugin that links your components with the Stagefright service. For the interfaces to create the plugin, see `frameworks/native/include/media/hardware/OMXPluginBase.h` and `HardwareAPI.h` header files.\n3. Build your plugin as a shared library with the name `libstagefrighthw.so` in your product Makefile. For example: \n\n ```\n LOCAL_MODULE := libstagefrighthw\n ```\n\n In your device's Makefile, ensure you declare the module as a product\n package: \n\n ```\n PRODUCT_PACKAGES += \\\n libstagefrighthw \\\n ...\n ```\n\nExpose codecs to the framework\n------------------------------\n\nThe Stagefright service parses the `system/etc/media_codecs.xml`\nand `system/etc/media_profiles.xml` to expose the supported codecs\nand profiles on the device to app developers via the\n`android.media.MediaCodecList` and\n`android.media.CamcorderProfile` classes. You must create both files\nin the `device/\u003ccompany\u003e/\u003cdevice\u003e/` directory\nand copy this over to the system image's `system/etc` directory in\nyour device's Makefile. For example: \n\n```\nPRODUCT_COPY_FILES += \\\n device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \\\n device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \\\n```\n\nFor complete examples, see `device/samsung/tuna/media_codecs.xml`\nand `device/samsung/tuna/media_profiles.xml` .\n\n**Note:** As of Android 4.1, the\n`\u003cQuirk\u003e` element for media codecs is no longer supported."]]