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:
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()
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.
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()
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:
// 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 ) } })
// 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:
// 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 ) } })
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:
val textTrackStyle = TextTrackStyle.fromSystemSettings(context)
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:
textTrackStyle.foregroundColor = Color.parseColor("#80FF0000")
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:
CaptioningManager.addCaptioningChangeListener(yourChangeListener)
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.