미디어 항목

playlist APIMediaItem 인스턴스를 기반으로 하며 편리하게 만들 수 있습니다. (MediaItem.Builder 사용) 플레이어 내에서 MediaItem이 다음으로 변환됩니다. MediaSource.Factory의 재생 가능한 MediaSource입니다. 제외 맞춤 구성, 이 변환은 DefaultMediaSourceFactory, 즉 사이트의 속성에 해당하는 복잡한 미디어 소스를 미디어 항목입니다. 미디어 항목에 설정할 수 있는 일부 속성은 참조하세요.

간단한 미디어 항목

스트림 URI로만 구성된 미디어 항목은 fromUri로 빌드할 수 있습니다. 편의 메서드:

Kotlin

val mediaItem = MediaItem.fromUri(videoUri)

자바

MediaItem mediaItem = MediaItem.fromUri(videoUri);

다른 모든 경우에는 MediaItem.Builder를 사용할 수 있습니다. 다음 예에서 미디어 항목은 ID 및 첨부된 메타데이터로 빌드됩니다.

Kotlin

val mediaItem = MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build()

자바

MediaItem mediaItem =
    new MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build();

메타데이터 첨부는 앱 UI 업데이트 알림을 받습니다.

이미지

이미지 재생 시 미디어 항목의 재생 시간을 지정하려면 재생 시간을 지정해야 합니다. 재생 중에 이미지가 표시되어야 합니다. 자세한 내용은 이미지 가이드 페이지에서 모션 사진이미지 로드 라이브러리 (예: Glide)

Kotlin

val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()

자바

MediaItem mediaItem =
    new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();

적응형 미디어용 비표준 파일 확장자

ExoPlayer는 DASH, HLS 및 SmoothStreaming 이러한 적응형 미디어 항목의 URI가 해당 미디어 소스가 자동으로 생성됩니다. 만약 URI에 비표준 확장자가 있거나 확장자가 전혀 없는 경우 MIME 유형이 명시적으로 설정되어야 합니다.

Kotlin

val mediaItem = MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build()

자바

MediaItem mediaItem =
    new MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build();

프로그레시브 미디어 스트림의 경우 MIME 유형이 필요하지 않습니다.

보호된 콘텐츠

보호된 콘텐츠의 경우 미디어 항목의 DRM 속성을 설정해야 합니다. UUID 필수이며 다른 모든 속성은 선택사항입니다.

다음은 Widevine DRM으로 보호되는 항목을 재생하기 위한 구성의 예입니다. 여기서 라이선스 URI를 미디어 (예: DASH 재생목록)에서 직접 사용할 수 없는 경우 여러 세션이 필요한 경우 (예: 키 순환)

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setDrmConfiguration(
      MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
        .setLicenseUri(licenseUri)
        .setMultiSession(true)
        .setLicenseRequestHeaders(httpRequestHeaders)
        .build()
    )
    .build()

자바

MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setDrmConfiguration(
            new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
                .setLicenseUri(licenseUri)
                .setMultiSession(true)
                .setLicenseRequestHeaders(httpRequestHeaders)
                .build())
        .build();

내부 DefaultMediaSourceFactory는 이러한 속성을 DrmSessionManagerProvider: DrmSessionManager를 얻습니다. 생성된 MediaSource에 삽입됩니다. DRM 동작은 더 맞춤설정하여 조정할 수 있습니다

자막 트랙 사이드로드

자막 트랙을 사이드로드하려면 다음 경우에 인스턴스 MediaItem.Subtitle개를 추가하면 됩니다. 미디어 항목을 빌드합니다.

Kotlin

val subtitle =
  SubtitleConfiguration.Builder(subtitleUri)
    .setMimeType(mimeType) // The correct MIME type (required).
    .setLanguage(language) // The subtitle language (optional).
    .setSelectionFlags(selectionFlags) // Selection flags for the track (optional).
    .build()
val mediaItem =
  MediaItem.Builder().setUri(videoUri).setSubtitleConfigurations(listOf(subtitle)).build()

자바

MediaItem.SubtitleConfiguration subtitle =
    new MediaItem.SubtitleConfiguration.Builder(subtitleUri)
        .setMimeType(mimeType) // The correct MIME type (required).
        .setLanguage(language) // The subtitle language (optional).
        .setSelectionFlags(selectionFlags) // Selection flags for the track (optional).
        .build();
MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setSubtitleConfigurations(ImmutableList.of(subtitle))
        .build();

내부적으로 DefaultMediaSourceFactoryMergingMediaSource를 사용하여 다음을 수행합니다. 콘텐츠 미디어 소스를 각 SingleSampleMediaSource와 결합 있습니다. DefaultMediaSourceFactory는 사이드로드를 지원하지 않습니다. 여러 기간 DASH 자막

미디어 스트림 클립

미디어 항목에서 참조하는 콘텐츠를 자르려면 맞춤 시작 및 종료 위치:

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setClippingConfiguration(
      MediaItem.ClippingConfiguration.Builder()
        .setStartPositionMs(startPositionMs)
        .setEndPositionMs(endPositionMs)
        .build()
    )
    .build()

자바

MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setClippingConfiguration(
            new ClippingConfiguration.Builder()
                .setStartPositionMs(startPositionMs)
                .setEndPositionMs(endPositionMs)
                .build())
        .build();

내부적으로 DefaultMediaSourceFactoryClippingMediaSource를 사용하여 래핑합니다. 콘텐츠 미디어 소스입니다. 추가 클리핑 속성이 있습니다. 자세한 내용은 MediaItem.Builder Javadoc을 참고하세요.

광고 삽입

광고를 삽입하려면 미디어 항목의 광고 태그 URI 속성을 설정해야 합니다.

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build())

자바

MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build())
        .build();

내부적으로 DefaultMediaSourceFactory는 콘텐츠 미디어 소스를 AdsMediaSource: 광고 태그에서 정의한 대로 광고를 삽입합니다. 이 작업을 수행하려면 플레이어에는 DefaultMediaSourceFactory도 있어야 합니다. 적절하게 구성되어야 합니다.