Android 12 개발자 프리뷰에 오신 것을 환영합니다. 초기에 자주 의견을 제공하여 Android 12를 최고의 버전으로 만들도록 도와주세요.

호환되는 미디어 트랜스코딩

의견 보내기 아이콘 호환되는 미디어 트랜스코딩과 관련된 의견을 기다리고 있습니다. 간단한 설문조사에 참여하여 의견을 들려주세요. 특히 이번 변경사항으로 영향을 받는 앱의 사용 사례를 알려주세요.

Android 12에서는 동영상 캡처 앱이 다른 앱과의 호환성을 저하하지 않고 기기에 녹화된 동영상의 저장용량 효율적인 최신 인코딩을 활용할 수 있는 새로운 기능을 도입합니다.

Android는 HEVC를 지원하지 않는 앱에서 동영상을 열 때 HEVC(H.265)와 같은 형식으로 녹화된 동영상을 AVC(H.264)로 자동 변환할 수 있습니다.

다음 형식은 기기에서 만들어진 콘텐츠의 경우 자동으로 트랜스코딩될 수 있습니다.

미디어 형식 XML 속성 MediaFormat MIME 유형
HEVC(H.265) HEVC MediaFormat.MIMETYPE_VIDEO_HEVC
HDR10HDR10 MediaFeature.HdrType.HDR10
HDR10+ HDR10Plus MediaFeature.HdrType.HDR10_PLUS

Android에서는 앱이 모든 미디어 형식의 재생을 지원할 수 있다고 가정하므로 호환되는 미디어 트랜스코딩이 기본적으로 사용 중지되어 있습니다. 미디어를 더 잘 호환되는 형식으로 트랜스코딩하도록 요청하려는 앱은 미디어 기능을 선언해야 합니다. 이러한 기능을 선언하는 방법에는 리소스에서 또는 코드에서 인라인으로 두 가지가 있습니다.

리소스에서 기능 선언

먼저 media_capabilities.xml 리소스 파일을 만듭니다.

<?xml version="1.0" encoding="utf-8"?>
<media-capabilities xmlns:android="http://schemas.android.com/apk/res/android">
    <format android:name="HEVC" supported="true"/>
    <format android:name="HDR10" supported="false"/>
    <format android:name="HDR10Plus" supported="false"/>
</media-capabilities>

이 예에서는 기기에 녹화된 HDR 동영상이 AVC SDR(표준 동적 범위) 동영상으로 원활하게 트랜스코딩되는 반면 HEVC 동영상은 트랜스코딩되지 않습니다.

application 태그 내의 property 태그를 사용하여 미디어 기능 파일 참조를 추가합니다. 이러한 속성을 AndroidManifest.xml 파일에 추가합니다.

<property
    android:name="android.media.PROPERTY_MEDIA_CAPABILITIES"
    android:resource="@xml/media_capabilities" />

코드에서 기능 선언

빌더를 사용하여 ApplicationMediaCapabilities 객체의 인스턴스를 생성함으로써 코드에서 미디어 기능을 선언할 수 있습니다.

Kotlin

val mediaCapabilities = ApplicationMediaCapabilities.Builder()
    .addSupportedVideoMimeType(MediaFormat.MIMETYPE_VIDEO_HEVC)
    .addUnsupportedHdrType(MediaFeature.HdrType.HDR10)
    .addUnsupportedHdrType(MediaFeature.HdrType.HDR10_PLUS)
    .build()

자바

ApplicationMediaCapabilities mediaCapabilities = new ApplicationMediaCapabilities.Builder()
        .addSupportedVideoMimeType(MediaFormat.MIMETYPE_VIDEO_HEVC)
        .addUnsupportedHdrType(MediaFeature.HdrType.HDR10)
        .addUnsupportedHdrType(MediaFeature.HdrType.HDR10_PLUS)
        .build();

메서드(예: ContentResolver#openTypedAssetFileDescriptor())를 통해 미디어 콘텐츠에 액세스할 때 이 객체를 사용합니다.

Kotlin

val providerOptions = Bundle().apply {
    putParcelable(MediaStore.EXTRA_MEDIA_CAPABILITIES, mediaCapabilities)
}
contentResolver.openTypedAssetFileDescriptor(mediaUri, mediaMimeType, providerOptions)
    .use { fileDescriptor ->
        // Content will be transcoded based on values defined in the
        // ApplicationMediaCapabilities provided.
    }

자바

Bundle providerOptions = new Bundle();
providerOptions.putParcelable(MediaStore.EXTRA_MEDIA_CAPABILITIES, mediaCapabilities);
try (AssetFileDescriptor fileDescriptor =  contentResolver.openTypedAssetFileDescriptor(mediaUri, mediaMimeType, providerOptions)) {
    // Content will be transcoded based on values defined in the
    // ApplicationMediaCapabilities provided.
}

이 메서드는 앱의 AndroidManifest.xml에 연결된 기능보다 우선하므로 A/B 테스트 실행과 같은 특정 코드 경로를 보다 세밀하게 제어할 수 있습니다.