지원되는 형식

일반적인 미디어 형식에 관한 소개는 ExoPlayer 지원 형식 페이지를 참고하세요. 스트림 로드, 추출, 디코딩에 관한 동일한 제한사항이 트랜스포머에도 적용되지만 트랜스포머는 ExoPlayer의 번들 소프트웨어 디코더 모듈을 지원하지 않습니다.

또한 트랜스포머는 인코딩을 위해 MediaCodec를 사용하며 출력 미디어 파일을 멀티플렉싱하거나 mux해야 하므로 지원되는 출력 형식이 제한됩니다. 인코딩 제한에 관한 자세한 내용은 MediaCodec 동영상 코덱을 참고하고 출력 미디어 컨테이너에 적용되는 제한에 관한 자세한 내용은 MediaMuxer를 참고하세요. 트랜스포머는 MP4 파일만 출력합니다.

기본적으로 TransformerMediaMuxer를 사용하지만, 진행 중인 InAppMuxer를 선택적으로 사용하여 참조 프레임 구조 및 지원되는 샘플 형식에 관한 MediaMuxer의 일부 제한사항을 방지할 수 있습니다. 기본 멀티플렉서는 향후 버전에서 인앱 멀티플렉서가 됩니다.

이미지 지원

트랜스포머는 BitmapFactory를 사용하여 모든 이미지 애셋을 로드하고 디코딩하므로 트랜스포머는 BitmapFactory가 지원하는 모든 형식을 지원합니다. 지원되는 이미지 유형은 이미지 지원을 참고하세요. 다중 이미지 형식 (예: GIF)의 경우 DefaultAssetLoaderFactory를 사용하면 컨테이너의 단일 이미지 프레임이 표시됩니다.

특수 형식

트랜스포머는 기존 형식에 비해 특별한 기능을 제공하는 최신 미디어 형식의 입력을 처리하는 것을 지원합니다.

HDR 동영상 처리

이제 점점 더 많은 기기에서 HDR 동영상 캡처를 지원하여 더 선명하고 정확한 색상과 더 넓은 밝기 범위를 제공합니다.

트랜스포머는 필수 인코딩 지원이 있는 기기에서 Android 13 (API 수준 33) 이상으로 HDR 동영상 편집을 지원합니다. HDR 동영상을 편집할 때 GL 동영상 효과는 16비트 부동 소수점 색상 구성요소와 BT.2020 색상 공간을 처리해야 합니다. HDR_MODE_KEEP_HDRComposition을 빌드할 때의 기본 모드입니다. HDR 편집이 지원되지 않으면 트랜스포머는 HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL를 사용하도록 대체됩니다.

HDR을 SDR로 변환하는 것, 즉 톤 매핑은 Android 10 (API 수준 29)부터 필수 디코딩 및 OpenGL 지원이 있는 기기에서 지원됩니다. 이는 HDR 콘텐츠의 수집을 지원하지 않는 다른 앱이나 서비스에 HDR 미디어를 공유할 때 유용합니다. OpenGL을 사용하여 톤 매핑을 사용 설정하려면 Composition를 만들 때 setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL)를 호출하세요. Android 12 (API 수준 31)부터 MediaCodec는 HDR 동영상을 캡처할 수 있는 Android 13 이상을 실행하는 모든 기기를 비롯한 일부 기기에서 톤 매핑도 지원합니다. MediaCodec을 사용하여 톤 매핑을 사용 설정하려면 setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC)을 호출하세요.

슬로 모션 미디어 처리

슬로 모션 동영상에는 스트림의 각 섹션을 재생해야 하는 속도를 나타내는 메타데이터가 포함됩니다. 플래트닝은 슬로우 모션 동영상을 기반으로 새 동영상 스트림을 생성하는 프로세스입니다. 이 프로세스에서는 메타데이터를 기반으로 섹션의 속도를 높이거나 낮춰 슬로우 모션 메타데이터를 적용하지 않는 플레이어에서도 올바르게 재생되도록 합니다.

슬로우 모션 스트림을 평면화하려면 EditedMediaItem에서 setFlattenForSlowMotion 빌더 메서드를 사용하세요.

Kotlin

val editedMediaItem =
    EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build()
val transformer =
    Transformer.Builder(context).addListener(transformerListener).build()
transformer.start(editedMediaItem, outputPath)

자바

EditedMediaItem editedMediaItem =
    new EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build();
Transformer transformer =
    new Transformer.Builder(context).addListener(transformerListener).build();
transformer.start(editedMediaItem, outputPath);

따라서 이러한 특수 형식을 처리하는 데 신경 쓰지 않고 슬로우 모션 동영상을 지원할 수 있습니다. 원본 대신 평면화된 버전의 동영상을 저장하고 재생하기만 하면 됩니다.