Éléments multimédias

L'API Playlist est basée sur des instances MediaItem, qui peuvent être créées facilement avec MediaItem.Builder. Dans le lecteur, un MediaItem est converti en un MediaSource jouable par un MediaSource.Factory. Sans configuration personnalisée, cette conversion est effectuée par un DefaultMediaSourceFactory, qui capable de créer des sources multimédias complexes correspondant aux propriétés de élément multimédia. Certaines des propriétés pouvant être définies sur les éléments multimédias sont décrites ci-dessous.

Éléments multimédias simples

Un élément multimédia constitué uniquement de l'URI du flux peut être créé avec fromUri cette méthode pratique:

Kotlin

val mediaItem = MediaItem.fromUri(videoUri)

Java

MediaItem mediaItem = MediaItem.fromUri(videoUri);

Dans tous les autres cas, vous pouvez utiliser un MediaItem.Builder. Dans l'exemple suivant, élément multimédia créé avec un ID et des métadonnées associées:

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

Joindre des métadonnées peut être utile pour Mettre à jour l'interface utilisateur de votre application Lors des transitions entre les playlists

Images

La lecture des images nécessite une durée dans l'élément multimédia pour indiquer combien de temps l'image doit s'afficher pendant la lecture. Consultez le sur la page du guide Images. Photos animées et Bibliothèques de chargement d'images (par exemple, Glide).

Kotlin

val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()

Java

MediaItem mediaItem =
    new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();

Extensions de fichier non standards pour les contenus multimédias adaptatifs

ExoPlayer fournit des sources multimédias adaptatives pour DASH, HLS et SmoothStreaming. Si l'URI d'un tel élément multimédia adaptatif se termine par une chaîne , la source multimédia correspondante est créée automatiquement. Si le L'URI comporte une extension non standard ou n'a aucune extension, alors le type MIME peut doit être défini explicitement pour indiquer le type d'élément multimédia:

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

Pour les flux de médias progressifs, le type MIME n'est pas requis.

Contenu protégé

Pour le contenu protégé, les propriétés DRM de l'élément multimédia doivent être définies. L'UUID est obligatoire, toutes les autres propriétés sont facultatives.

Exemple de configuration permettant de lire un élément protégé par Widevine DRM l'URI de licence n'est pas disponible directement dans le média (par exemple, dans une playlist DASH). plusieurs sessions sont requises (par exemple, en raison de la rotation des clés):

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

Au cœur de la DefaultMediaSourceFactory transmet ces propriétés à un DrmSessionManagerProvider pour obtenir un DrmSessionManager, qui est ensuite injectée dans le MediaSource créé. Le comportement de DRM peut être personnalisation encore plus poussée à vos besoins.

Pistes de sous-titres en téléchargement indépendant

Pour charger indépendamment des pistes de sous-titres, MediaItem.Subtitle instances peuvent être ajoutées lorsque la création d'un élément multimédia:

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

En interne, DefaultMediaSourceFactory utilise un MergingMediaSource pour combiner la source multimédia du contenu avec une SingleSampleMediaSource pour chaque la piste de sous-titres. Le téléchargement indépendant n'est pas possible dans DefaultMediaSourceFactory des sous-titres pour les médias DASH multi-points.

Coupez un flux multimédia

Pour couper le contenu auquel un élément multimédia se rapporte, définissez des Positions de début et de fin:

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

En interne, DefaultMediaSourceFactory utilisera un ClippingMediaSource pour encapsuler la source multimédia du contenu. Il existe d'autres propriétés de rognage. Consultez le MediaItem.Builder Javadoc pour en savoir plus.

Insertion d'annonces

Pour insérer des annonces, vous devez définir la propriété URI du tag d'emplacement publicitaire d'un élément multimédia:

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

En interne, DefaultMediaSourceFactory encapsule la source multimédia du contenu dans un AdsMediaSource pour insérer des annonces telles que définies par le tag d'emplacement publicitaire. Pour que cela fonctionne, le lecteur doit aussi avoir son DefaultMediaSourceFactory configurées en conséquence.

<ph type="x-smartling-placeholder">