メディア項目

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 を更新する 再生リストの遷移が発生したとき。

画像

画像を再生するには、メディア アイテムに再生中に画像を表示する時間を指定する時間が必要です。詳しくは、 詳細については、イメージ ガイドページ モーション フォト 画像読み込みライブラリ (例: 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 はこれらのプロパティを DrmSessionManagerProviderDrmSessionManager を取得します。その後、 作成された 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適切に設定する必要があります。