Faixas

Faixas de áudio

Para a seleção de faixa de áudio, o SDK do receptor da Web fornece um AudioTracksManager que simplifica e otimiza a seleção de faixas, oferecendo mais controle e melhor acesso a propriedades, como nome, URL e idioma. Esta aula é melhor usado no manipulador de eventos para o cast.framework.events.EventType.PLAYER_LOAD_COMPLETE evento.

A API oferece várias maneiras de consultar e selecionar as faixas de áudio ativas. Aqui é um exemplo de como selecionar uma faixa como ativa especificando seu 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();

A classe AudioTracksManager também fornece um método getActiveTrack().

Este é um exemplo de como selecionar a primeira faixa de áudio para um determinado idioma, neste 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();

A classe AudioTracksManager também fornece um método getTracksByLanguage(language) que retorna todas as faixas do idioma especificado.

O código de idioma do áudio é extraído do manifesto de mídia e precisa seguir RFC 5646. Os códigos de idioma podem ser apresentados com nomenclatura de dois caracteres (como "es", "pt-BR" ou "de"), ou a nomenclatura de quatro caracteres (como "en-us", "es-es" ou "fr-ca").

Se o manifesto de mídia seguir um padrão de código de idioma diferente, o arquivo O app receptor precisa convertê-lo em um código de idioma em conformidade com o RFC 5646. Web O SDK do receptor fornece um interceptador EDIT_AUDIO_TRACKS para realizar modificações:

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

Ao reproduzir intervalos de anúncio, qualquer seleção de faixa de áudio, como idioma, feitas antes de uma pausa persistem após o intervalo para o mesmo conteúdo, mesmo se que os anúncios estão em outro idioma.

Legendas ocultas (legendas)

Para seleção de faixa de legenda, o SDK do receptor da Web fornece a TextTracksManager que simplifica e otimiza a seleção de faixas, oferecendo mais controle e melhor acesso a propriedades, como nome, URL e idioma.

A classe TextTracksManager é melhor usada no manipulador de eventos para o cast.framework.events.EventType.PLAYER_LOAD_COMPLETE evento.

Seleção de legendas no SDK do receptor da Web simplificada com outras partes do SDK.

A API oferece suporte ao controle de WebVTT, TTML e CEA-608.

A classe TextTracksManager oferece várias maneiras de consultar e selecionar uma a faixa de legenda seja ativada. Veja um exemplo de como selecionar a primeira faixa para estar ativo especificando seu 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();

A classe TextTracksManager também fornece um método getActiveTracks().

Veja um exemplo de como selecionar a primeira faixa de texto para um determinado 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();

A classe TextTracksManager também fornece um método getTracksByLanguage(language) que retorna todas as faixas do idioma especificado.

O código do idioma do texto é recuperado do manifesto de mídia e deve seguir RFC 5646. Os códigos de idioma podem ser apresentados com nomenclatura de dois caracteres (como "es", "pt-BR" ou "de"), ou nomenclatura de 4 caracteres (como "en-us", "es-es" ou "fr-ca").

Se o manifesto de mídia seguir um padrão de código de idioma diferente, o arquivo O app receptor precisa converter todas as solicitações recebidas para esse padrão. Esses como comandos de voz, usam o código de idioma RFC 5646. O receptor da Web O SDK fornece um interceptador EDIT_TRACKS_INFO para traduzir as solicitações para o padrão do 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();

A API permite que um desenvolvedor adicione dinamicamente novas faixas de legenda caso para idiomas diferentes e faixas fora de banda e, em seguida, selecione uma faixa para ser a nova faixa ativa:

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

Ao reproduzir os intervalos de anúncio, qualquer seleção de faixa de texto, como idioma, feita antes de um intervalo persistirá depois do intervalo para o mesmo conteúdo, mesmo se o estão em outro idioma.

Legendas forçadas

Legendas forçadas ou narrativas forçadas são uma sobreposição de texto exibida para que o espectador possa entender quando um idioma alternativo é usado ou para esclarecer o áudio. Ao contrário das legendas, o espectador não precisa ativar as legendas forçadas, pois elas são selecionados automaticamente com base nas preferências de áudio do espectador.

Para adicionar legendas forçadas ao seu app Google Cast, inclua-as como do manifesto. No manifesto, defina a função da faixa como forced-subtitle: Quando o SDK do Cask escolher essas faixas, ele identificará como legendas forçadas. Nenhum trabalho de remetente é necessário, porque o SDK do Cast separem legendas forçadas e closed captions. Isso significa que um espectador não selecionar uma legenda forçada.

Quando as legendas descritivas estão ativadas, as legendas forçadas são desativadas para evitar sobreposição de legendas. Quando as legendas estão desativadas ou forçadas forem fornecidos no manifesto, as legendas forçadas serão exibidas com base no a preferência de idioma do áudio do espectador.