Jetpack Media3 라이브러리는 동영상 편집을 실시간으로 미리 볼 수 있는 강력한 Player 구현인 CompositionPlayer API를 제공합니다.
앱에서 사용자가 효과 적용, 트리밍 또는 여러 입력 미디어 항목 합성 등의 동영상을 편집할 수 있는 경우 CompositionPlayer를 사용하면 출력을 정확하게 미리 볼 수 있습니다. 이 방법은 적용된 편집을 저장할 필요가 없거나 내보내기를 위해 최종 동영상에 커밋하기 전에 편집이 의도한 대로 구성되었는지 확인하는 경우 유용할 수 있습니다.
CompositionPlayer란 무엇인가요?
CompositionPlayer는
Player 인터페이스의 전문화된 구현으로, Composition 객체를 재생하도록 특별히 설계되었습니다.
Composition은 동영상 클립 및 오디오 트랙과 같은 입력 미디어 애셋이 정렬되는 방식과 오디오 및 동영상 효과를 적용해야 하는 방식을 정의합니다.
Composition API에 관해 자세히 알아보려면 미디어 항목의 Composition 정의를 참고하세요.
CompositionPlayer의 기본 목적은 지정된 모든 편집이 완료된 이 Composition을 실시간으로 렌더링하여 사용자가 시간과 리소스가 많이 소요될 수 있는 내보내기 프로세스를 커밋하기 전에 편집이 어떻게 표시되는지 정확하게 확인할 수 있도록 하는 것입니다. 그런 다음 동일한 Composition 객체를 내보내기를 위해 Transformer 인스턴스와 함께 사용할 수 있습니다. 자세한 내용은 Composition 내보내기를 참고하세요.
CompositionPlayer 및 ExoPlayer 비교
CompositionPlayer와 ExoPlayer는 모두 Media3 내의 Player 구현
이지만 사용 사례에 따라 최적화됩니다.
기능 |
CompositionPlayer |
ExoPlayer |
입력 미디어 |
항목별 효과가 있는 여러 EditedMediaItem 인스턴스로 구성될 수 있는 단일 Composition 객체를 가져옵니다. |
|
타임라인 |
타임라인과 기간은 전체 Composition을 기반으로 합니다. |
타임라인과 기간은 현재 재생 중인 MediaItem에 해당합니다. |
효과 |
효과는 Composition 내에서 정의되며 개별 EditedMediaItem 또는 전체 Composition에 적용할 수 있습니다. |
효과는 setVideoEffects()를 사용하여 ExoPlayer 인스턴스 자체에 설정되며 각 효과는 재생목록의 각 항목에 개별적으로 적용됩니다. |
기본적으로 CompositionPlayer는 일반적으로 편집 컨텍스트에서 미디어 및 효과의 복잡한 Composition을 렌더링해야 할 때 가장 유용합니다. 오디오 또는 동영상 콘텐츠의 범용 재생을 위해 또는 setVideoEffects()를 사용하여 단일 애셋 편집을 미리 보려면 ExoPlayer를 사용하세요.
미리보기를 위한 CompositionPlayer
앱에 CompositionPlayer를 통합하려면 몇 가지 주요 단계를 거쳐야 합니다. 먼저
빌더 패턴을 사용하여 CompositionPlayer를 인스턴스화한 다음 재생할
Composition를 설정합니다.
val compositionPlayer = CompositionPlayer.Builder(context).build() compositionPlayer.setComposition(composition) compositionPlayer.prepare() compositionPlayer.play()
Composition을 만드는 방법은
Composition 만들기 섹션을 참고하세요.
CompositionPlayer는 Player 인터페이스를 구현하므로 표준 Player
메서드를 통해 타겟 출력을 설정하고 플레이어를 제어할 수 있습니다.
오류 처리
Player.Listener 인스턴스를 CompositionPlayer에 연결하여 재생 이벤트 및 오류에 반응합니다. onPlayerError() 콜백은
또는 VideoGraph.Factory과 같은 편집 관련 구성요소에서 발생하는 문제도 표시합니다.Composition 자세한 내용은 플레이어 이벤트
문서를 참고하세요.
중요한 고려사항
CompositionPlayer를 사용할 때 유의해야 할 몇 가지 기능과 제한사항은 다음과 같습니다.
CompositionPlayer는Player인터페이스를 기반으로 하지만 재생을 위해Composition에 종속되므로 일부 동작은ExoPlayer와 다릅니다. 예를 들어CompositionPlayer는 반복 모드 를REPEAT_MODE_OFF또는REPEAT_MODE_ALL로 설정하는 것만 지원합니다.- 기본적으로
CompositionPlayer는SingleInputVideoGraph.Factory을 사용하지만 Composition에서 이미지 또는 동영상 항목이 있는 시퀀스를 두 개 이상 사용하는 경우CompositionPlayer인스턴스를 빌드할 때setVideoGraphFactory()를 사용하여 대신MultipleInputVideoGraph.Factory를 사용해야 합니다. 시퀀스가 하나만 이미지 또는 동영상 항목을 포함하고 다른 시퀀스는 오디오 전용인 경우SingleInputVideoGraph.Factory로 충분합니다. - Composition의 모든 미디어 항목에는 기간이 명시적으로 설정되어야 합니다.
이미지의 경우
MediaItem.Builder.setImageDurationMs()를 사용하거나 오디오 또는 동영상의 경우EditedMediaItem.Builder.setDurationUs()를 사용합니다.
다음 사용 사례가 지원됩니다.
- 단일 애셋 미리보기
- 단일 시퀀스 (즉, 순차적 미디어 항목) 미리보기
- 단일 동영상 시퀀스 + 단일 오디오 시퀀스 (예: 배경 오디오) 미리보기
다음 사용 사례는 현재 개발 중입니다.
- 여러 동영상 시퀀스가 포함된 PIP, 나란히, 그리드와 같은 레이아웃을 포함한 다중 애셋 미리보기
- 다른 그래픽 엔진으로 편집 파이프라인 맞춤설정
기능 요청
CompositionPlayer에 관한 기능 요청이나 의견이 있으면 Media3 GitHub 저장소에서 문제를 제출하세요.