Pistas

Pistas de audio

Para la selección de pistas de audio, el SDK del receptor web proporciona un AudioTracksManager que simplifica y optimiza la selección de pistas, lo que te brinda más control y un mejor acceso a propiedades, como el nombre, la URL y el idioma. Esta clase es se recomienda su uso en el controlador de eventos para la cast.framework.events.EventType.PLAYER_LOAD_COMPLETE para cada evento.

La API ofrece varias maneras de consultar y seleccionar las pistas de audio activas. Aquí es un ejemplo de cómo seleccionar un segmento para que esté activo especificando su 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 clase AudioTracksManager también proporciona un método getActiveTrack()

Este es un ejemplo de cómo seleccionar la primera pista de audio para un idioma, en este caso, inglés:

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 clase AudioTracksManager también proporciona un método getTracksByLanguage(language) que devuelve todas las pistas del idioma especificado.

El código de idioma del audio se recupera del manifiesto multimedia y debe seguir RFC 5646 Los códigos de idioma pueden presentarse con una nomenclatura de 2 caracteres (p. ej., “es”, “en” o "de"), o una nomenclatura de 4 caracteres (como "en-us", "es-es" o “fr-ca”).

Si el manifiesto multimedia sigue un estándar de código de idioma diferente, la Web La app receptora debe convertirlo en un código de lenguaje de acuerdo con RFC 5646. En la Web El SDK receptor proporciona un interceptor EDIT_AUDIO_TRACKS para realizar Modificaciones:

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

Cuando se reproduce una pausa publicitaria, cualquier pista de audio seleccionada, como el idioma, realizados antes de una pausa persistirá después de esta para el mismo contenido, aun si de que los anuncios estén en un idioma diferente.

Subtítulos

Para la selección de pistas de subtítulos, el SDK del receptor web proporciona la TextTracksManager que simplifica y optimiza la selección de pistas, lo que te brinda más control y un mejor acceso a propiedades, como el nombre, la URL y el idioma.

La clase TextTracksManager se usa mejor en el controlador de eventos para la cast.framework.events.EventType.PLAYER_LOAD_COMPLETE para cada evento.

Se simplificó y agilizó la selección de subtítulos en el SDK del receptor web con otras partes del SDK.

La API admite el control de WebVTT, TTML y CEA-608.

La clase TextTracksManager proporciona varias formas de consultar y seleccionar un sitio web cerrado que la pista de subtítulos esté activa. Este es un ejemplo de cómo seleccionar la primera pista estará activo especificando su 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 clase TextTracksManager también proporciona un método getActiveTracks()

Este es un ejemplo de cómo seleccionar la primera pista de texto para un idioma:

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 clase TextTracksManager también proporciona un método getTracksByLanguage(language) que devuelve todas las pistas del idioma especificado.

El código de idioma de texto se recupera del manifiesto multimedia y debe seguir RFC 5646 Los códigos de idioma pueden presentarse con una nomenclatura de 2 caracteres (p. ej., “es”, “en” o "de"), o una nomenclatura de 4 caracteres (como "en-us", "es-es" o “fr-ca”).

Si el manifiesto multimedia sigue un estándar de código de idioma diferente, la Web La app receptora debe convertir cualquier solicitud entrante a ese estándar. Estos solicitudes, como los comandos por voz, usan códigos de idioma RFC 5646. El receptor web El SDK proporciona un interceptor EDIT_TRACKS_INFO para traducir las solicitudes a tu manifiesto de Kubernetes:

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

La API permite que un desarrollador agregue de forma dinámica nuevas pistas de subtítulos, en este para diferentes idiomas y pistas fuera de banda y, luego, selecciona una pista para ser el nuevo segmento activo:

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

Cuando se reproduce el contenido de pausas publicitarias, se realiza cualquier selección de pistas de texto, como el idioma. antes de una pausa persistirá después de esta para el mismo contenido, aun si los anuncios están en un idioma diferente.

Subtítulos forzados

Los subtítulos forzados o la narrativa forzada son texto superpuesto que se muestra para que los usuarios pueden entender cuándo se usa un idioma alternativo o para aclarar el audio. A diferencia de los subtítulos, el espectador no necesita habilitar los subtítulos forzados, ya que se seleccionan automáticamente según las preferencias de audio del usuario.

Para agregar subtítulos forzados a tu aplicación de Cast, deberás incluirlos como parte del manifiesto. En tu manifiesto, establece el rol de la pista en forced-subtitle Cuando el SDK de Cask detecte estos segmentos, los identificará como subtítulos forzados. No se requiere trabajo de los remitentes, como lo hará el SDK de Cast. separar los subtítulos forzados y los subtítulos ocultos. Esto significa que un usuario seleccionar un subtítulo forzado.

Cuando se habilitan los subtítulos, se inhabilitan los subtítulos forzados para evitar lo siguiente: la superposición de los subtítulos. Cuando los subtítulos están desactivados y si son subtítulos forzados en el manifiesto, se muestran subtítulos forzados según la preferencia de idioma del audio del usuario.