Utiliser des pistes multimédias

MediaTrack représente une piste multimédia, qui peut être un flux audio, un flux vidéo ou du texte. (sous-titres, par exemple). Votre application peut regrouper des éléments, leur appliquer un style et les activer des pistes multimédias.

Configurer un canal

Vous pouvez configurer un canal et lui attribuer un identifiant unique. Le code suivant crée une piste de texte en anglais, une piste de texte en français et une piste audio en français, chacun avec son propre ID:

Kotlin
val englishSubtitle = MediaTrack.Builder(1 /* ID */, MediaTrack.TYPE_TEXT)
    .setName("English Subtitle")
    .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
    .setContentId("https://some-url/caption_en.vtt")
    /* language is required for subtitle type but optional otherwise */
    .setLanguage("en-US")
    .build()

val frenchSubtitle = MediaTrack.Builder(2, MediaTrack.TYPE_TEXT)
    .setName("French Subtitle")
    .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
    .setContentId("https://some-url/caption_fr.vtt")
    .setLanguage("fr")
    .build()

val frenchAudio = MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO)
    .setName("French Audio")
    .setContentId("trk0001")
    .setLanguage("fr")
    .build()
<ph type="x-smartling-placeholder">
</ph>
Java
MediaTrack englishSubtitle = new MediaTrack.Builder(1 /* ID */,
MediaTrack.TYPE_TEXT)
  .setName("English Subtitle")
  .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
  .setContentId("https://some-url/caption_en.vtt")
  /* language is required for subtitle type but optional otherwise */
  .setLanguage("en-US")
  .build();

MediaTrack frenchSubtitle = new MediaTrack.Builder(2, MediaTrack.TYPE_TEXT)
  .setName("French Subtitle")
  .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
  .setContentId("https://some-url/caption_fr.vtt")
  .setLanguage("fr")
  .build();

MediaTrack frenchAudio = new MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO)
  .setName("French Audio")
  .setContentId("trk0001")
  .setLanguage("fr")
  .build();

Groupes de pistes

Vous pouvez regrouper plusieurs pistes dans un élément multimédia, représenté par MediaInfo Une instance de MediaInfo prend un tableau de pistes et regroupe d'autres informations sur l'élément multimédia. En vous appuyant sur cet exemple, votre application peut ajouter ces trois pistes multimédias à un contenu multimédia. en transmettant une liste de ces trois pistes MediaInfo.Builder.setMediaTracks(List) Votre application doit associer les titres à un MediaInfo de cette manière avant de se charger le contenu multimédia au récepteur.

Kotlin
val tracks: MutableList<MediaTrack> = ArrayList<MediaTrack>()
tracks.add(englishSubtitle)
tracks.add(frenchSubtitle)
tracks.add(frenchAudio)
val mediaInfo = MediaInfo.Builder(url)
    .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
    .setContentType(getContentType())
    .setMetadata(getMetadata())
    .setMediaTracks(tracks)
    .build()
<ph type="x-smartling-placeholder">
</ph>
Java
List tracks = new ArrayList();
tracks.add(englishSubtitle);
tracks.add(frenchSubtitle);
tracks.add(frenchAudio);
MediaInfo mediaInfo = MediaInfo.Builder(url)
  .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
  .setContentType(getContentType())
  .setMetadata(getMetadata())
  .setMediaTracks(tracks)
  .build();

Supprimer les canaux

Pour supprimer toutes les pistes du contenu multimédia en cours de lecture (par exemple, en désactivant les trois sous-titres dans l'exemple), appelez MediaInfo.Builder.setMediaTracks(List) et transmettre une liste vide d'ID.

Mettre à jour des canaux

Votre application peut activer un ou plusieurs titres associés au contenu multimédia (après le chargement du média), en appelant RemoteMediaClient.setActiveMediaTracks(long[]) et en transmettant les identifiants des pistes à activer. Cet exemple active Sous-titres en français et audio en français:

Kotlin
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setActiveMediaTracks(longArrayOf(2, 3))
    .setResultCallback(ResultCallback {
            mediaChannelResult: RemoteMediaClient.MediaChannelResult ->
                if (!mediaChannelResult.status.isSuccess) {
                    Log.e(TAG, "Failed with status code:" +
                            mediaChannelResult.status.statusCode
                    )
                }
    })
<ph type="x-smartling-placeholder">
</ph>
Java
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setActiveMediaTracks(new long[]{2, 3})
    .setResultCallback(mediaChannelResult -> {
        if (!mediaChannelResult.getStatus().isSuccess()) {
            Log.e(TAG, "Failed with status code:" +
                    mediaChannelResult.getStatus().getStatusCode());
        }
    });

Appliquer un style aux pistes de texte

TextTrackStyle encapsule les informations de style d'une piste de texte. Après la création ou la mise à jour d'un TextTrackStyle existant, vous pouvez l'appliquer au texte en cours de lecture élément multimédia en appelant RemoteMediaClient.setTextTrackStyle, comme ceci:

Kotlin
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setTextTrackStyle(style)
    .setResultCallback(ResultCallback {
            mediaChannelResult: RemoteMediaClient.MediaChannelResult ->
                if (!mediaChannelResult.status.isSuccess) {
                    Log.e(TAG, "Failed to set the style, status code: " +
                            mediaChannelResult.status.statusCode
                    )
                }
    })
<ph type="x-smartling-placeholder">
</ph>
Java
remoteMediaClient.setTextTrackStyle(style)
    .setResultCallback(mediaChannelResult -> {
        if (!mediaChannelResult.getStatus().isSuccess()) {
            Log.e(TAG, "Failed to set the style, status code: " +
                    mediaChannelResult.getStatus().getStatusCode());
        }
    });

Votre application doit permettre aux utilisateurs de mettre à jour le style des pistes de texte, soit à l'aide de les paramètres fournis par le système ou par l'application elle-même. Dans Android KitKat et versions ultérieures, vous pouvez utiliser les paramètres de sous-titrage du système fournis par framework:

Kotlin
val textTrackStyle = TextTrackStyle.fromSystemSettings(context)
<ph type="x-smartling-placeholder">
</ph>
Java
TextTrackStyle textTrackStyle = TextTrackStyle.fromSystemSettings(context);

Pour les versions antérieures à KitKat, l'appel ci-dessus renvoie un objet dont ne sont pas définis. Vous devez donc les renseigner dans votre application, en fonction en fonction des choix des utilisateurs et de certaines valeurs par défaut. Vous pouvez appliquer un style au texte suivant éléments de style de suivi:

  • Couleur et opacité du premier plan (texte)
  • Couleur et opacité de l'arrière-plan
  • Type de contour
  • Couleur du contour
  • Échelle de police
  • Famille de polices
  • Style de police

Par exemple, définissez la couleur du texte sur rouge (FF) avec une opacité de 50 % (80) comme suit:

Kotlin
textTrackStyle.foregroundColor = Color.parseColor("#80FF0000")
<ph type="x-smartling-placeholder">
</ph>
Java
textTrackStyle.setForegroundColor(Color.parseColor("#80FF0000"));

Dans KitKat et les versions ultérieures, vous devez enregistrer votre application pour recevoir des notifications lorsque les paramètres des sous-titres pour l'ensemble du système sont mis à jour. À cette fin, vous devez implémenter CaptioningManager.CaptioningChangeListener dans votre application et enregistrez cet écouteur en appelant la méthode suivante:

Kotlin
CaptioningManager.addCaptioningChangeListener(yourChangeListener)
<ph type="x-smartling-placeholder">
</ph>
Java
CaptioningManager.addCaptioningChangeListener(yourChangeListener);

Lorsque votre application reçoit un rappel indiquant que les paramètres des sous-titres ont été modifiés, vous vous devrez extraire les nouveaux paramètres et mettre à jour le style du texte des sous-titres pour le contenu multimédia en cours de lecture en appelant RemoteMediaClient.setTextTrackStyle et transmettre le nouveau style.

Recevoir des informations sur l'état d'avancement

Lorsque plusieurs expéditeurs sont connectés au même destinataire, il est important que chaque expéditeur d'être informé des modifications apportées au destinataire, même si celles-ci ont été initiés par d'autres expéditeurs.

À cette fin, votre application doit enregistrer un RemoteMediaClient.Listener et un RemoteMediaClient.ProgressListener

Si le TextTrackStyle des modifications en cours, tous les expéditeurs connectés seront avertis via les deux écouteurs enregistrés ci-dessus. Dans ce cas, le SDK récepteur ne vérifie pas si le nouveau style est différent du précédent et informe tous les expéditeurs connectés. Toutefois, si l'état le suivi actif est modifié, seul le RemoteMediaClient.ProgressListener dans les expéditeurs connectés en seront informés.

Respect des exigences CORS

Pour le streaming multimédia adaptatif, Google Cast nécessite la présence d'un Des en-têtes CORS, mais même des fichiers MP4 simples les flux multimédias nécessitent CORS s'ils incluent des pistes. Si vous souhaitez activer les canaux pour tous les contenus multimédias, vous devez activer le CORS pour vos flux de pistes et vos contenus multimédias flux. Ainsi, si vous n'avez pas d'en-têtes CORS disponibles pour vos fichiers MP4 simples, sur votre serveur, et que vous ajoutez une simple piste de sous-titres, vous ne pourrez pas pour diffuser votre contenu multimédia, sauf si vous mettez à jour votre serveur afin d'y inclure en-tête CORS. En outre, vous devez autoriser au moins les en-têtes suivants: Content-Type, Accept-Encoding et Range. Notez que les deux derniers en-têtes sont des en-têtes supplémentaires dont vous n'aviez peut-être pas besoin auparavant.