미디어 소스

ExoPlayer에서 모든 미디어는 MediaItem로 표현됩니다. 하지만 내부적으로 플레이어에는 콘텐츠를 재생하려면 MediaSource 인스턴스가 필요합니다. 이 플레이어는 MediaSource.Factory를 사용하여 미디어 항목에서 이러한 항목을 만듭니다.

기본적으로 플레이어는 DefaultMediaSourceFactory를 사용합니다. 다음 콘텐츠 MediaSource 구현의 인스턴스:

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: 여러 미디어 소스를 병합하여 동시에 재생합니다. 포함 대부분의 경우 adjustPeriodTimeOffsetsclipDurations를 true로 설정하여 모든 소스의 시작과 끝이 동시에 시작됩니다 이 수정을 통해 사이드로드된 자막을 사용하는 경우 대신 MediaItem.SubtitleConfiguration를 사용하세요.
  • ConcatenatingMediaSource2: 여러 미디어 소스를 병합하여 재생합니다. 연속으로 사용할 수 있습니다. 사용자에게 표시되는 미디어 구조는 단일 Timeline.Window: 단일 항목처럼 보입니다. 만약 여러 항목을 재생하기 위해 수정이 이루어지는데, 이렇게 보이게 해서는 안 되는 playlist API 메서드와 같이 사용하는 것이 바람직합니다. Player.addMediaItem를 대신 사용하세요.
  • SilenceMediaSource: 지정된 시간 동안 무음을 생성합니다. 격차를 메우는 데 유용합니다.
  • AdsMediaSource: 클라이언트 측 광고 삽입으로 미디어 소스 확장 기능을 제공합니다 자세한 내용은 광고 삽입 가이드를 참고하세요.
  • ServerSideAdInsertionMediaSource: 서버 측 광고로 미디어 소스를 확장합니다. 삽입 기능을 사용할 수 있습니다. 자세한 내용은 광고 삽입 가이드를 참고하세요.