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 を更新する 再生リストの遷移が発生したとき。
画像
画像を再生するには、メディア アイテムに再生中に画像を表示する時間を指定する時間が必要です。詳しくは、 詳細については、イメージ ガイドページ モーション フォト 画像読み込みライブラリ (例: Glide)。
Kotlin
val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()
Java
MediaItem mediaItem = new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();
アダプティブ メディアの非標準のファイル拡張子
ExoPlayer は、DASH、HLS、ML に対応したアダプティブなメディアソースを提供 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 プロパティを設定する必要があります。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()
Java
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setDrmConfiguration( new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID) .setLicenseUri(licenseUri) .setMultiSession(true) .setLicenseRequestHeaders(httpRequestHeaders) .build()) .build();
Google の
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
も適切に設定する必要があります。