ExoPlayer에서 모든 미디어는 MediaItem
로 표현됩니다. 그러나 내부적으로는 플레이어에서 콘텐츠를 재생하려면 MediaSource
인스턴스가 필요합니다. 플레이어는 MediaSource.Factory
를 사용하여 미디어 항목에서 이를 만듭니다.
기본적으로 플레이어는 다음과 같은 콘텐츠 MediaSource
구현의 인스턴스를 만들 수 있는 DefaultMediaSourceFactory
를 사용합니다.
- DASH의 경우
DashMediaSource
- SmoothStreaming:
SsMediaSource
- HLS용
HlsMediaSource
ProgressiveMediaSource
: 일반 미디어 파일- RTSP용
RtspMediaSource
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()
Java
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()
Java
// 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
와 같은 playlist API 메서드를 대신 사용하는 것이 좋습니다.SilenceMediaSource
: 지정된 시간 동안 간격을 채우는 데 유용한 무음을 생성합니다.AdsMediaSource
: 클라이언트 측 광고 삽입 기능이 있는 미디어 소스를 확장합니다. 자세한 내용은 광고 삽입 가이드를 참고하세요.ServerSideAdInsertionMediaSource
: 서버 측 광고 삽입 기능으로 미디어 소스를 확장합니다. 자세한 내용은 광고 삽입 가이드를 참고하세요.