Pistes audio
Pour la sélection de pistes audio, le SDK Web Receiver fournit une classe AudioTracksManager
qui simplifie et rationalise la sélection de pistes. Vous bénéficiez ainsi d'un meilleur contrôle et d'un meilleur accès aux propriétés, telles que le nom, l'URL et la langue. Il est préférable d'utiliser cette classe dans le gestionnaire d'événements pour l'événement cast.framework.events.EventType.PLAYER_LOAD_COMPLETE
.
L'API propose plusieurs méthodes pour interroger et sélectionner les pistes audio actives. Voici un exemple de sélection d'une piste active en spécifiant son ID:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.addEventListener(
cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
const audioTracksManager = playerManager.getAudioTracksManager();
// Get all audio tracks
const tracks = audioTracksManager.getTracks();
// Choose the first audio track to be active by specifying its ID
audioTracksManager.setActiveById(tracks[0].trackId);
});
context.start();
La classe AudioTracksManager
fournit également une méthode getActiveTrack()
.
Voici un exemple montrant comment sélectionner la première piste audio pour une langue donnée (ici, l'anglais) :
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.addEventListener(
cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
const audioTracksManager = playerManager.getAudioTracksManager();
// Set the first matching language audio track to be active
audioTracksManager.setActiveByLanguage('en');
});
context.start();
La classe AudioTracksManager
fournit également une méthode getTracksByLanguage(language)
qui renvoie tous les titres pour la langue spécifiée.
Le code de langue audio est extrait du fichier manifeste multimédia et doit respecter la norme RFC 5646. Les codes de langue peuvent être présentés avec une nomenclature à deux caractères (par exemple, "es", "en" ou "de") ou quatre (par exemple, "en-us", "es-es" ou "fr-ca").
Si le fichier manifeste multimédia respecte une norme de code de langue différente, l'application Web Receiver doit la convertir en code de langue conforme à la norme RFC 5646. Le SDK Web Receiver fournit un intercepteur EDIT_AUDIO_TRACKS
pour effectuer les modifications:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
// Intercept the EDIT_AUDIO_TRACKS request
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.EDIT_AUDIO_TRACKS, request => {
// write logic to convert language codes here
});
context.start();
Lorsque vous écoutez des coupures publicitaires, toutes les pistes audio sélectionnées avant la coupure (par exemple, la langue) sont conservées pour le même contenu, même si les annonces sont dans une autre langue.
Sous-titres
Pour la sélection de la piste de sous-titres, le SDK Récepteur Web fournit la classe TextTracksManager
qui simplifie et rationalise la sélection de la piste. Vous bénéficiez ainsi d'un meilleur contrôle et d'un meilleur accès aux propriétés, telles que le nom, l'URL et la langue.
Il est préférable d'utiliser la classe TextTracksManager
dans le gestionnaire d'événements pour l'événement cast.framework.events.EventType.PLAYER_LOAD_COMPLETE
.
La sélection des sous-titres dans le SDK Web Receiver est simplifiée avec d'autres parties du SDK.
L'API est compatible avec la commande WebVTT, TTML et CEA-608.
La classe TextTracksManager
permet d'interroger et de sélectionner une piste de sous-titres active de différentes manières. Voici un exemple montrant comment sélectionner le premier canal à activer en spécifiant son ID:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.addEventListener(
cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
const textTracksManager = playerManager.getTextTracksManager();
// Get all text tracks
const tracks = textTracksManager.getTracks();
// Choose the first text track to be active by its ID
textTracksManager.setActiveByIds([tracks[0].trackId]);
});
context.start();
La classe TextTracksManager
fournit également une méthode getActiveTracks()
.
Voici un exemple de sélection de la première piste de texte pour une langue spécifique:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.addEventListener(
cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
const textTracksManager = playerManager.getTextTracksManager();
// Set the first matching language text track to be active
textTracksManager.setActiveByLanguage('en');
});
context.start();
La classe TextTracksManager
fournit également une méthode getTracksByLanguage(language)
qui renvoie tous les titres pour la langue spécifiée.
Le code de langue du texte est extrait du fichier manifeste multimédia et doit être conforme à la norme RFC 5646. Les codes de langue peuvent être présentés avec une nomenclature à deux caractères (par exemple, "es", "en" ou "de") ou quatre (par exemple, "en-us", "es-es" ou "fr-ca").
Si le fichier manifeste multimédia respecte une norme de code de langue différente, l'application Web Receiver doit convertir toutes les requêtes entrantes vers cette norme. Ces requêtes, telles que les commandes vocales, utilisent des codes de langue RFC 5646. Le SDK Récepteur Web fournit un intercepteur EDIT_TRACKS_INFO
pour traduire les requêtes au standard de votre fichier manifeste:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
// intercept the EDIT_TRACKS_INFO request
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.EDIT_TRACKS_INFO, request => {
// write logic to convert language codes here
});
context.start();
L'API permet à un développeur d'ajouter de manière dynamique de nouvelles pistes de sous-titres, dans le cas présent pour différentes langues et pistes hors bande, puis de sélectionner la piste active.
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.addEventListener(
cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
// Create text tracks object
const textTracksManager = playerManager.getTextTracksManager();
// Create track 1 for English text
const track1 = textTracksManager.createTrack();
track1.trackContentType = 'text/vtt';
track1.trackContentId = 'http://example.com/en.vtt';
track1.language = 'en';
// Create track 2 for Spanish text
const track2 = textTracksManager.createTrack();
const track2Id = track2.trackId;
track2.trackContentType = 'text/vtt';
track2.trackContentId = 'http://example.com/spa.vtt';
track2.language = 'spa';
// Add tracks
textTracksManager.addTracks([track1, track2]);
// Set the first matching language text track to be active
textTracksManager.setActiveByLanguage('en');
});
context.start();
Lors de la lecture d'une coupure publicitaire, toute sélection de piste de texte (telle que la langue) effectuée avant la coupure persistera pour le même contenu, même si les annonces sont dans une autre langue.