ExoPlayer에서 모든 미디어는 MediaItem
로 표현됩니다. 하지만
내부적으로 플레이어에는 콘텐츠를 재생하려면 MediaSource
인스턴스가 필요합니다. 이
플레이어는 MediaSource.Factory
를 사용하여 미디어 항목에서 이러한 항목을 만듭니다.
기본적으로 플레이어는 DefaultMediaSourceFactory
를 사용합니다.
다음 콘텐츠 MediaSource
구현의 인스턴스:
- DASH의 경우
DashMediaSource
SsMediaSource
: SmoothStreaming- 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()
자바
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
: 단일 항목처럼 보입니다. 만약 여러 항목을 재생하기 위해 수정이 이루어지는데, 이렇게 보이게 해서는 안 되는 playlist API 메서드와 같이 사용하는 것이 바람직합니다.Player.addMediaItem
를 대신 사용하세요.SilenceMediaSource
: 지정된 시간 동안 무음을 생성합니다. 격차를 메우는 데 유용합니다.AdsMediaSource
: 클라이언트 측 광고 삽입으로 미디어 소스 확장 기능을 제공합니다 자세한 내용은 광고 삽입 가이드를 참고하세요.ServerSideAdInsertionMediaSource
: 서버 측 광고로 미디어 소스를 확장합니다. 삽입 기능을 사용할 수 있습니다. 자세한 내용은 광고 삽입 가이드를 참고하세요.