ExoPlayer에서 모든 미디어는 MediaItem로 표시됩니다. 하지만 내부적으로 플레이어는 콘텐츠를 재생하기 위해 MediaSource 인스턴스가 필요합니다. 플레이어는 MediaSource.Factory을 사용하여 미디어 항목에서 이러한 항목을 만듭니다.
기본적으로 플레이어는 다음 콘텐츠 MediaSource 구현의 인스턴스를 만들 수 있는 DefaultMediaSourceFactory를 사용합니다.
- DASH의
DashMediaSource SsMediaSource(SmoothStreaming용)HlsMediaSource(HLS의 경우)ProgressiveMediaSource(일반 미디어 파일의 경우)RtspMediaSource의 경우 RTSP.
DefaultMediaSourceFactory는 해당 미디어 항목의 속성에 따라 더 복잡한 미디어 소스를 만들 수도 있습니다. 자세한 내용은 미디어 항목 페이지를 참고하세요.
플레이어의 기본 구성에서 지원하지 않는 미디어 소스 설정이 필요한 앱의 경우 맞춤설정을 위한 여러 옵션이 있습니다.
미디어 소스 생성 맞춤설정
플레이어를 빌드할 때 MediaSource.Factory를 삽입할 수 있습니다. 예를 들어 앱에서 광고를 삽입하고 CacheDataSource.Factory를 사용하여 캐싱을 지원하려는 경우 DefaultMediaSourceFactory 인스턴스를 이러한 요구사항에 맞게 구성하고 플레이어 생성 중에 삽입할 수 있습니다.
Kotlin
val mediaSourceFactory: MediaSource.Factory = DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, playerView) val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()
자바
MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView); ExoPlayer player = new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();
DefaultMediaSourceFactory JavaDoc에서는 사용 가능한 옵션을 자세히 설명합니다.
맞춤 MediaSource.Factory 구현을 삽입하여 맞춤 미디어 소스 유형 생성을 지원할 수도 있습니다. 팩토리의 createMediaSource(MediaItem)가 호출되어 재생목록에 추가된 각 미디어 항목의 미디어 소스를 만듭니다.
미디어 소스 기반 재생목록 API
ExoPlayer 인터페이스는 미디어 항목이 아닌 미디어 소스를 허용하는 추가 재생목록 메서드를 정의합니다. 이렇게 하면 플레이어의 내부 MediaSource.Factory를 우회하고 미디어 소스 인스턴스를 플레이어에 직접 전달할 수 있습니다.
Kotlin
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources) // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource) // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)) exoPlayer.prepare() exoPlayer.play()
자바
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources); // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource); // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)); exoPlayer.prepare(); exoPlayer.play();
고급 미디어 소스 구성
ExoPlayer는 다른 MediaSource 인스턴스를 수정하고 구성하는 여러 MediaSource 구현을 제공합니다. 이러한 설정은 여러 맞춤설정을 결합해야 하고 간단한 설정 경로가 충분하지 않은 경우에 가장 유용합니다.
ClippingMediaSource: 미디어를 지정된 타임스탬프 범위로 자를 수 있습니다. 이것이 유일한 수정사항인 경우MediaItem.ClippingConfiguration를 대신 사용하는 것이 좋습니다.FilteringMediaSource: 사용 가능한 트랙을 지정된 유형으로 필터링합니다. 예를 들어 오디오와 동영상이 모두 포함된 파일에서 동영상 트랙만 노출합니다. 이것이 유일한 수정사항인 경우 트랙 선택 매개변수를 대신 사용하는 것이 좋습니다.MergingMediaSource: 여러 미디어 소스를 병합하여 동시에 재생합니다. 거의 모든 경우에 모든 소스가 동시에 시작하고 종료되도록adjustPeriodTimeOffsets및clipDurations을 true로 설정하여 생성자를 호출하는 것이 좋습니다. 이 수정사항이 사이드로드된 자막을 추가하기 위해 이루어진 경우MediaItem.SubtitleConfiguration를 대신 사용하는 것이 좋습니다.ConcatenatingMediaSource2: 연속으로 재생할 여러 미디어 소스를 병합합니다. 사용자에게 표시되는 미디어 구조는 단일Timeline.Window를 노출하므로 단일 항목처럼 보입니다. 이 수정사항이 단일 항목처럼 보이지 않는 여러 항목을 재생하기 위해 이루어진 경우Player.addMediaItem와 같은 재생목록 API 메서드를 대신 사용하는 것이 좋습니다.SilenceMediaSource: 갭을 채우는 데 유용한 지정된 기간 동안 무음을 생성합니다.AdsMediaSource: 클라이언트 측 광고 삽입 기능으로 미디어 소스를 확장합니다. 자세한 내용은 광고 삽입 가이드를 참고하세요.ServerSideAdInsertionMediaSource: 서버 측 광고 삽입 기능으로 미디어 소스를 확장합니다. 자세한 내용은 광고 삽입 가이드를 참고하세요.