Android 10 이상에는 업데이트 가능한 여러 미디어 구성요소가 포함되어 있습니다. 이러한 구성요소를 사용하면 Google Play 스토어 인프라 또는 파트너가 제공하는 무선 업데이트(OTA) 메커니즘을 통해 프레임워크 구성요소를 업데이트할 수 있습니다. 미디어 구성요소는 전체 시스템 이미지를 업데이트하지 않고도 보안 업데이트 및 기능 업데이트를 제공할 수 있는 모듈로 함께 패키징됩니다.
업데이트 가능한 미디어 구성요소는 다음 모듈에 있습니다.
미디어. 이 모듈에는 미디어 추출기,
MediaSession2
API 및MediaParser
API가 포함되어 있습니다.미디어 코덱: 이 모듈에는 업데이트 가능한 소프트웨어 Codec2 구성요소가 포함되어 있습니다.
MediaProvider: 이 모듈은 색인이 생성된 메타데이터(SD 카드 및 USB 기기의 오디오, 동영상 및 이미지)를 최적화하고 MediaStore 공개 API를 통해 앱에서 이 데이터를 사용할 수 있도록 합니다.
맞춤 추출기 및 디코더 추가에 관한 자세한 내용은 미디어 구성요소 맞춤설정을 참고하세요.
미디어 추출기
Android 9 이하에서는 추출기가 단일 libstagefright.so
파일에 컴파일됩니다. Android 10 이상에서는 미디어 추출기가 별도의 구성요소입니다. 각 추출기에는 자체 .so
파일이 있으며, 이 파일에는 추출기가 지정된 미디어 파일을 처리할 수 있는지 여부를 확인하는 sniffer 함수와 지정된 미디어 파일의 추출기 인스턴스를 생성하는 팩토리 함수를 제공하는 진입점이 포함되어 있습니다. 각 추출기에는 이름이 지정되고(디버깅에 도움이 되도록) 최신 추출기를 나타내기 위해 버전이 지정됩니다.
미디어 프레임워크는 사용 가능한 모든 추출기 .so
파일을 자동으로 로드합니다. 따라서 개발자는 libstagefright
또는 다른 미디어 프레임워크 라이브러리를 수정할 필요 없이 새 .so
파일을 추가하여 자체 추출기를 만들 수 있습니다. 또한 Google에서 제공하는 추출기보다 맞춤 추출기를 선호하도록 할 수도 있습니다.
MediaSession2 API
MediaSession2 API를 통해 미디어 앱이 전송 컨트롤 및 재생 정보를 Android 프레임워크 및 기타 앱과 같은 다른 프로세스에 노출할 수 있습니다. 이 구성요소는 맞춤설정할 수 없습니다.
MediaParser API
MediaParser API를 통해 ExoPlayer가 프레임워크 미디어 컨테이너 파서를 효율적으로 사용하여 미디어 컨테이너에서 미디어 샘플을 추출할 수 있습니다. MediaParser에서 소스 코드 경계가 다음과 같이 변경되었습니다.
frameworks/base/apex/media/framework/java/android/media/MediaParser.java
- API 및 씬 레이어 구현external/exoplayer/
- MediaParser가 빌드된 Exoplayer 축자(버전) 소스
MediaParser API는 맞춤설정할 수 없습니다. MediaParser를 테스트하려면 cts/tests/tests/mediaparser/
의 테스트를 사용합니다.
미디어 코덱
미디어 코덱 모듈에는 업데이트 가능한 소프트웨어 Codec2 구성요소가 포함되어 있습니다. 맞춤설정 지원은 다음과 같이 출시마다 다릅니다.
Android 11 이상(특히 Google Play 시스템 업데이트 v292100200)에서는 ION 메모리 할당의 매개변수를 맞춤설정할 수 있습니다(자세한 내용은 아래 참고).
Android 9 이하에서는 OMX 코덱 API를 업데이트할 수 없지만 공급업체 파티션에서 계속 사용할 수 있습니다.
ION 메모리 할당
Android 11 이상 및 Google Play 시스템 업데이트 v292100200 이상에서는 ION 메모리 할당의 다음 매개변수를 맞춤설정할 수 있습니다.
매개변수 | 기본값 | 설명 |
---|---|---|
heapMask |
0xFFFFFFFF |
모든 힙 유형이 허용됩니다. |
allocFlags |
0 |
설정된 플래그가 없습니다. |
minAlignment |
0 |
정렬이 없습니다. |
매개변수를 재정의하려면 다음 단계를 따르세요.
기본
android.hardware.media.c2
서비스를 등록하고 맞춤 ION 사용 매개변수를 제공합니다.새 서비스를 생성하려면 frameworks/av/media/codec2/hidl/services/vendor.cpp 파일을 저장소에 복사한 후 필요에 따라
StoreImpl::Interface::SetIonUsage()
를 수정합니다.(OMX)
media.codec
프로세스를 다시 사용하려면 frameworks/av/media/codec2/hidl/services/vendor.cpp의StoreImpl
클래스를 기존mediacodec
파일(frameworks/av/services/mediacodec/main_codecservice.cpp)로 복사하고 등록합니다.
기기
manifest.xml
에 다음 코드를 추가합니다.<hal format="hidl"> <name>android.hardware.media.c2</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IComponentStore</name> <instance>default</instance> </interface> </hal>
형식 및 종속 항목
미디어 모듈(com.android.media
) 및 미디어 코덱 모듈(com.android.media.swcodec
)은 APEX 형식입니다. 포함된 미디어 구성요소는 NDK API에만 의존합니다.
업데이트
업데이트 중에 기기의 프레임워크 구성요소는 자바 및 네이티브 코드가 포함된 APEX 패키지를 로드합니다.
그림 1. 미디어 구성요소 업데이트 흐름
프레임워크가 APEX 패키지를 설치하면 기기가 재부팅되고 디스크 이미지를 마운트하며 미디어 시스템 프로세스(media.extractor
및 media.codec
)가 마운트 지점에서 업데이트된 모듈을 로드합니다.