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 des pistes, ce qui vous donne plus de contrôle et 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 différentes méthodes pour interroger et sélectionner les pistes audio actives. Voici un exemple de sélection d'un canal actif 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 de sélection de la première piste audio pour une langue spécifiée, en anglais dans le cas présent:

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 la langue audio est récupéré à partir du fichier manifeste multimédia et doit respecter la norme RFC 5646. Les codes de langue peuvent être présentés à l'aide d'une nomenclature à deux caractères (par exemple, "es", "en" ou "de") ou quatre noms (par exemple "en-us", "es-es" ou "fr-ca").

Si le fichier manifeste multimédia suit 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 des 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();

Lors de la lecture des coupures publicitaires, toute sélection de piste audio (par exemple, la langue) effectuée avant la coupure sera conservée après la coupure pour le même contenu, même si les annonces sont dans une autre langue.

Sous-titres

Pour la sélection de pistes de sous-titres, le SDK Web Receiver fournit la classe TextTracksManager qui simplifie et rationalise la sélection des pistes, ce qui vous donne plus de contrôle et 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 et simplifiée avec d'autres parties du SDK.

L'API permet de contrôler 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 de sélection du 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 textuelle 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 récupéré dans le fichier manifeste multimédia et doit respecter la norme RFC 5646. Les codes de langue peuvent être présentés à l'aide d'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 suit une norme de code de langue différente, l'application Web Receiver doit convertir toutes les requêtes entrantes dans cette norme. Ces requêtes, telles que les commandes vocales, utilisent des codes de langue RFC 5646. Le SDK Web Receiver fournit un intercepteur EDIT_TRACKS_INFO pour traduire les requêtes vers la norme 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 dynamiquement de nouvelles pistes de sous-titres, dans ce cas pour différentes langues et pistes hors bande, puis de sélectionner une 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 des coupures publicitaires, toute sélection de piste textuelle (par exemple, la langue) effectuée avant la coupure sera conservée après la coupure pour le même contenu, même si les annonces sont dans une autre langue.

Sous-titres forcés

Les sous-titres forcés ou la narration forcée sont des textes en superposition qui s'affichent lorsque l'utilisateur comprend quand une autre langue est utilisée ou pour clarifier le son. Contrairement aux sous-titres, les spectateurs n'ont pas besoin d'activer les sous-titres forcés, car ils sont sélectionnés automatiquement en fonction de leurs préférences audio.

Pour ajouter des sous-titres forcés à votre application Cast, vous devez l'inclure dans votre fichier manifeste. Dans le fichier manifeste, définissez le rôle du canal sur forced-subtitle. Lorsque le SDK Cask détecte ces pistes, il les identifie comme des sous-titres forcés. Aucune action n'est requise de la part de l'expéditeur, car le SDK Cast sépare les sous-titres forcés et les sous-titres. Cela signifie qu'il ne peut pas sélectionner des sous-titres forcés.

Lorsque les sous-titres sont activés, les sous-titres forcés sont désactivés pour éviter les chevauchements. Lorsque les sous-titres forcés sont désactivés et que des sous-titres forcés sont fournis dans le fichier manifeste, ils s'affichent en fonction des préférences linguistiques de l'utilisateur.