Tracce

Tracce audio

Per la selezione delle tracce audio, l'SDK Web Receiver fornisce una classe AudioTracksManager che semplifica e ottimizza la selezione delle tracce, offrendoti un maggiore controllo e un migliore accesso alle proprietà, come nome, URL e lingua. Questa classe è consigliata per la gestione del gestore di eventi per cast.framework.events.EventType.PLAYER_LOAD_COMPLETE.

L'API offre diversi modi per eseguire query e selezionare le tracce audio attive. Ecco un esempio di come selezionare una traccia da attivare specificando il relativo 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();

Il corso AudioTracksManager fornisce anche un metodo getActiveTrack().

Di seguito è riportato un esempio di come selezionare la prima traccia audio per una determinata lingua, in questo caso l'inglese:

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 fornisce anche un metodo getTracksByLanguage(language) che restituisce tutte le tracce per la lingua specificata.

Il codice del linguaggio audio viene recuperato dal manifest multimediale e deve seguire RFC 5646. I codici lingua possono essere composti da una nomenclatura di due caratteri (ad esempio "es", "en" o "de") o di una nomenclatura di quattro caratteri (ad esempio "en-us", "es-es" o "fr-ca").

Se il file manifest multimediale segue uno standard di codice lingua diverso, l'applicazione Web Receiver deve convertirlo in un codice lingua conforme alla specifica RFC 5646. L'SDK del web ricevitore fornisce un intercettore EDIT_AUDIO_TRACKS per eseguire le modifiche:

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();

Quando riproduci le interruzioni pubblicitarie, qualsiasi traccia audio, ad esempio la lingua, creata prima di un'interruzione, rimarrà dopo l'interruzione per gli stessi contenuti, anche se gli annunci sono in una lingua diversa.

Sottotitoli (sottotitoli)

Per la selezione delle tracce dei sottotitoli codificati, l'SDK Web Receiver fornisce la classe TextTracksManager che semplifica e ottimizza la selezione delle tracce, offrendoti un maggiore controllo e un migliore accesso alle proprietà, come nome, URL e lingua.

Per la classe TextTracksManager è preferibile utilizzare il gestore di eventi per l'evento cast.framework.events.EventType.PLAYER_LOAD_COMPLETE.

La selezione dei sottotitoli codificati nell'SDK Web Receiver è semplificata e semplificata con altre parti dell'SDK.

L'API supporta il controllo di WebVTT, TTML e CEA-608.

Il corso TextTracksManager offre diversi modi per eseguire query e selezionare una traccia di sottotitoli chiusa. Ecco un esempio di come selezionare la prima traccia da attivare specificando il relativo 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();

Il corso TextTracksManager fornisce anche un metodo getActiveTracks().

Di seguito è riportato un esempio di come selezionare la prima traccia di testo per una lingua specifica:

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 fornisce anche un metodo getTracksByLanguage(language) che restituisce tutte le tracce per la lingua specificata.

Il codice della lingua di testo viene recuperato dal manifest multimediale e deve seguire RFC 5646. I codici lingua possono essere composti da una nomenclatura di due caratteri (ad esempio "es", "en" o "de") o di una nomenclatura di quattro caratteri (ad esempio "en-us", "es-es" o "fr-ca").

Se il file manifest multimediale segue uno standard di codice lingua diverso, l'applicazione Web Recipient deve convertire qualsiasi richiesta in entrata in tale standard. Queste richieste, come i comandi vocali, utilizzano codici di lingua RFC 5646. L'SDK del ricevitore web fornisce un intercettatore EDIT_TRACKS_INFO per tradurre le richieste allo standard del tuo manifesto:

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 consente a uno sviluppatore di aggiungere dinamicamente nuove tracce di sottotitoli codificati, in questo caso per lingue diverse e tracce fuori banda, quindi seleziona una traccia da impostare come nuova traccia attiva:

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();

Durante la riproduzione delle interruzioni pubblicitarie, qualsiasi selezione di tracce di testo, come la lingua, effettuata prima di un'interruzione continuerà a essere disponibile per gli stessi contenuti, anche se gli annunci sono in un'altra lingua.

Sottotitoli forzati

I sottotitoli forzati o didascalie forzate sono overlay di testo visualizzati per consentire agli utenti di comprendere quando viene usata una lingua alternativa o di chiarire l'audio. A differenza dei sottotitoli codificati, uno spettatore non deve necessariamente attivare i sottotitoli forzati perché vengono selezionati automaticamente in base alle preferenze audio del visualizzatore.

Per aggiungere i sottotitoli forzati all'applicazione di trasmissione, devi includerli nel file manifest. Nel manifest, imposta il ruolo della traccia su forced-subtitle. Quando l'SDK Cask raccoglie queste tracce, le identifica come forzati. Non è necessario alcun lavoro del mittente perché l'SDK Cast separa i sottotitoli forzati e i sottotitoli codificati. Ciò significa che uno spettatore non potrà selezionare una didascalia forzata.

Quando sono attivi, i sottotitoli forzati vengono disattivati per evitare la sovrapposizione dei sottotitoli. Quando i sottotitoli codificati sono disattivati e se sono forniti nel video, i sottotitoli forzati vengono mostrati in base alla preferenza della lingua dell'audio dello spettatore.