CompositionPlayer로 수정사항 미리보기

Jetpack Media3 라이브러리는 동영상 편집을 실시간으로 미리 볼 수 있는 강력한 Player 구현인 CompositionPlayer API를 제공합니다. 앱에서 사용자가 효과 적용, 트리밍 또는 여러 입력 미디어 항목 합성 등의 동영상을 편집할 수 있는 경우 CompositionPlayer를 사용하면 출력을 정확하게 미리 볼 수 있습니다. 이 방법은 적용된 편집을 저장할 필요가 없거나 내보내기를 위해 최종 동영상에 커밋하기 전에 편집이 의도한 대로 구성되었는지 확인하는 경우 유용할 수 있습니다.

CompositionPlayer란 무엇인가요?

CompositionPlayerPlayer 인터페이스의 전문화된 구현으로, Composition 객체를 재생하도록 특별히 설계되었습니다. Composition은 동영상 클립 및 오디오 트랙과 같은 입력 미디어 애셋이 정렬되는 방식과 오디오 및 동영상 효과를 적용해야 하는 방식을 정의합니다. Composition API에 관해 자세히 알아보려면 미디어 항목의 Composition 정의를 참고하세요.

CompositionPlayer의 기본 목적은 지정된 모든 편집이 완료된 이 Composition을 실시간으로 렌더링하여 사용자가 시간과 리소스가 많이 소요될 수 있는 내보내기 프로세스를 커밋하기 전에 편집이 어떻게 표시되는지 정확하게 확인할 수 있도록 하는 것입니다. 그런 다음 동일한 Composition 객체를 내보내기를 위해 Transformer 인스턴스와 함께 사용할 수 있습니다. 자세한 내용은 Composition 내보내기를 참고하세요.

CompositionPlayerExoPlayer 비교

CompositionPlayerExoPlayer는 모두 Media3 내의 Player 구현 이지만 사용 사례에 따라 최적화됩니다.

기능

CompositionPlayer

ExoPlayer

입력 미디어

항목별 효과가 있는 여러 EditedMediaItem 인스턴스로 구성될 수 있는 단일 Composition 객체를 가져옵니다.

단일 MediaItem 또는 MediaItem 인스턴스의 재생목록을 가져옵니다.

타임라인

타임라인과 기간은 전체 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 만들기 섹션을 참고하세요.

CompositionPlayerPlayer 인터페이스를 구현하므로 표준 Player 메서드를 통해 타겟 출력을 설정하고 플레이어를 제어할 수 있습니다.

오류 처리

Player.Listener 인스턴스를 CompositionPlayer에 연결하여 재생 이벤트 및 오류에 반응합니다. onPlayerError() 콜백은 또는 VideoGraph.Factory과 같은 편집 관련 구성요소에서 발생하는 문제도 표시합니다.Composition 자세한 내용은 플레이어 이벤트 문서를 참고하세요.

중요한 고려사항

CompositionPlayer를 사용할 때 유의해야 할 몇 가지 기능과 제한사항은 다음과 같습니다.

  • CompositionPlayerPlayer 인터페이스를 기반으로 하지만 재생을 위해 Composition에 종속되므로 일부 동작은 ExoPlayer와 다릅니다. 예를 들어 CompositionPlayer는 반복 모드 를 REPEAT_MODE_OFF 또는 REPEAT_MODE_ALL로 설정하는 것만 지원합니다.
  • 기본적으로 CompositionPlayerSingleInputVideoGraph.Factory을 사용하지만 Composition에서 이미지 또는 동영상 항목이 있는 시퀀스를 두 개 이상 사용하는 경우 CompositionPlayer 인스턴스를 빌드할 때 setVideoGraphFactory()를 사용하여 대신 MultipleInputVideoGraph.Factory를 사용해야 합니다. 시퀀스가 하나만 이미지 또는 동영상 항목을 포함하고 다른 시퀀스는 오디오 전용인 경우 SingleInputVideoGraph.Factory로 충분합니다.
  • Composition의 모든 미디어 항목에는 기간이 명시적으로 설정되어야 합니다. 이미지의 경우 MediaItem.Builder.setImageDurationMs()를 사용하거나 오디오 또는 동영상의 경우 EditedMediaItem.Builder.setDurationUs()를 사용합니다.

다음 사용 사례가 지원됩니다.

  • 단일 애셋 미리보기
  • 단일 시퀀스 (즉, 순차적 미디어 항목) 미리보기
  • 단일 동영상 시퀀스 + 단일 오디오 시퀀스 (예: 배경 오디오) 미리보기

다음 사용 사례는 현재 개발 중입니다.

  • 여러 동영상 시퀀스가 포함된 PIP, 나란히, 그리드와 같은 레이아웃을 포함한 다중 애셋 미리보기
  • 다른 그래픽 엔진으로 편집 파이프라인 맞춤설정

기능 요청

CompositionPlayer에 관한 기능 요청이나 의견이 있으면 Media3 GitHub 저장소에서 문제를 제출하세요.