メディア項目

再生リスト 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 も必要です。 適切に構成されている必要があります。