Titres

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.