일반적인 미디어 형식에 관한 소개는 ExoPlayer 지원 형식 페이지를 참고하세요. Transformer는 ExoPlayer의 번들 소프트웨어 디코더 모듈을 지원하지 않지만 스트림 로드, 추출, 디코딩에 동일한 제한사항이 적용됩니다.
Transformer는 인코딩을 위해 MediaCodec에도 의존하므로 지원되는 출력 형식이 제한됩니다. 인코딩 제한사항에 관한 자세한 내용은 MediaCodec 동영상 코덱
을 참고하세요.
기본적으로 Transformer는 표준 MP4 파일을 출력합니다.
InAppMp4Muxer 앱에 분할된 MP4가 필요한 경우
다음을 전달하면 됩니다.
InAppFragmentedMp4Muxer.Factory
Transformer 인스턴스를 초기화할 때 Media3은 WebM, AAC, Ogg, WAV와 같은 다른 형식도
WebmMuxer, AacMuxer, OggMuxer, WavMuxer와 같은 전용 멀티플렉서를 사용하여 지원합니다. 이러한 형식은 삽입하려면 커스텀
Muxer.Factory로 래핑해야 하지만 향후 출시에는
이 프로세스를 간소화하는 즉시 사용 가능한 팩토리 구현이 포함될 예정입니다.
이미지 지원
Transformer는 BitmapFactory를 사용하여 모든 이미지 애셋을 로드하고 디코딩하므로 Transformer는 BitmapFactory가 지원하는 모든 형식을 지원합니다. 지원되는 이미지 유형은
이미지 지원
을 참고하세요. 다중 사진 형식 (예: GIF)의 경우 DefaultAssetLoaderFactory가 사용되면 컨테이너의 단일 이미지 프레임이 표시됩니다.
특수 형식
Transformer는 기존 형식에 비해 특수 기능을 제공하는 최신 미디어 형식의 입력을 처리하는 기능을 지원합니다.
HDR 동영상 처리
점점 더 많은 기기가 HDR 동영상 캡처를 지원하여 더 선명하고 정확한 색상과 더 넓은 밝기 범위를 제공합니다.
Transformer는 필요한 인코딩 지원이 있는 기기에서 Android 13 (API 수준 33)부터 HDR 동영상 편집을 지원합니다. HDR 동영상을 편집할 때는 모든 GL 동영상 효과가 16비트 부동 소수점 색상 구성요소와 BT.2020 색상 공간을 처리해야 합니다. HDR_MODE_KEEP_HDR 은 Composition을 빌드할 때 기본 모드입니다. HDR 편집이 지원되지 않으면 Transformer는 HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL을 사용하는 것으로 대체됩니다.
HDR을 SDR로 변환하는 작업(일명 톤 매핑)은 필요한 디코딩 및 OpenGL
지원 기능이 있는 기기에서 Android
10(API 수준 29)부터 지원됩니다. 이는 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);
이렇게 하면 이러한 특수 형식을 처리하는 것에 대해 걱정하지 않고도 슬로 모션 동영상을 지원할 수 있습니다. 원래 동영상 대신 병합된 버전의 동영상을 저장하고 재생하기만 하면 됩니다.