メディア項目

playlist APIMediaItem インスタンスに基づいており、MediaItem.Builder を使用して簡単に作成できます。プレーヤー内では、MediaItemMediaSource.Factory によって再生可能な MediaSource に変換されます。カスタム構成を使用しない場合、この変換は DefaultMediaSourceFactory によって実行されます。これにより、メディア アイテムのプロパティに対応する複雑なメディアソースをビルドできます。メディア アイテムに設定できるプロパティの一部を以下に示します。

シンプルなメディア アイテム

ストリーム URI のみで構成されるメディア アイテムは、fromUri コンビニエンス メソッドを使用して作成できます。

Kotlin

val mediaItem = MediaItem.fromUri(videoUri)

Java

MediaItem mediaItem = MediaItem.fromUri(videoUri);

それ以外の場合は MediaItem.Builder を使用できます。次の例では、ID とアタッチされたメタデータを使用してメディア アイテムを構築しています。

Kotlin

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

Java

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

メタデータのアタッチは、プレイリストの遷移時にアプリの UI を更新する際に役立ちます。

標準以外のファイル拡張子の処理

ExoPlayer は、DASH、HLS、SmoothStreaming のアダプティブ メディアソースを提供します。このようなアダプティブ メディア アイテムの URI が標準のファイル拡張子で終わる場合、対応するメディアソースが自動的に作成されます。URI に標準以外の拡張子がある場合や、拡張子がまったくない場合は、MIME タイプを明示的に設定して、メディア アイテムのタイプを示します。

Kotlin

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

Java

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

プログレッシブ メディア ストリームの場合、MIME タイプは不要です。

保護されたコンテンツ

保護されたコンテンツの場合、メディア アイテムの DRM プロパティを設定する必要があります。

Kotlin

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

Java

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

この例では、Widevine で保護されたコンテンツのメディア アイテムを作成します。プレーヤー内で、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()

Java

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()

Java

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())

Java

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

内部的には、DefaultMediaSourceFactory はコンテンツ メディアソースを AdsMediaSource でラップし、広告タグで定義された広告を挿入します。これを行うには、プレーヤーの DefaultMediaSourceFactory適切に設定する必要もあります。