playlist API は MediaItem
インスタンスに基づいており、MediaItem.Builder
を使用して簡単に作成できます。プレーヤー内では、MediaItem
が MediaSource.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();
内部的には、DefaultMediaSourceFactory
は MergingMediaSource
を使用して、コンテンツ メディアソースと各字幕トラックの 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();
内部的には、DefaultMediaSourceFactory
は ClippingMediaSource
を使用してコンテンツ メディアソースをラップします。その他にもクリッピング プロパティがあります。詳細については、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
を適切に設定する必要もあります。