Faixas

Faixas de áudio

Para a seleção de faixa de áudio, o SDK do receptor da Web fornece uma classe AudioTracksManager que simplifica e simplifica a seleção de faixa, oferecendo mais controle e melhor acesso a propriedades, como nome, URL e idioma. Essa classe é melhor usada no manipulador de eventos do evento cast.framework.events.EventType.PLAYER_LOAD_COMPLETE.

A API fornece várias maneiras de consultar e selecionar as faixas de áudio ativas. Veja um exemplo de como selecionar uma faixa para ser 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().

Veja um exemplo de como selecionar a primeira faixa de áudio para um idioma específico, 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 para o idioma especificado.

O código do idioma de áudio é recuperado do manifesto de mídia e deve seguir a RFC 5646. Os códigos de idioma podem ser apresentados em uma nomenclatura de dois caracteres (como "es", "en" ou "de") ou com 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 app Web Receiver precisará convertê-lo em um código de idioma RFC 5646 em conformidade. O SDK do receptor da Web 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, feita antes do intervalo para o mesmo conteúdo, mesmo que os anúncios estejam em um idioma diferente.

Legendas ocultas

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

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

A seleção de closed captions no SDK do Web Receiver é simplificada e simplificada com outras partes do SDK.

A API suporta o controle WebVTT, TTML e CEA-608.

A classe TextTracksManager oferece várias maneiras de consultar e selecionar uma faixa de legenda para ser ativada. Veja um exemplo de como selecionar a primeira faixa a ser ativada especificando seu código:

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 idioma específico:

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 para o idioma especificado.

O código do idioma de texto é recuperado do manifesto de mídia e deve seguir o RFC 5646. Os códigos de idioma podem ser apresentados em uma nomenclatura de dois caracteres (como "es", "en" ou "de") ou uma 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 app Web Receiver precisará converter todas as solicitações recebidas para esse padrão. Essas solicitações, como comandos de voz, usam códigos de idioma RFC 5646. O SDK do receptor da Web fornece um EDIT_TRACKS_INFO interceptador 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 novas faixas de legendas ocultas dinamicamente, nesse caso, para diferentes idiomas e faixas fora de banda. 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 intervalos de anúncio, qualquer seleção de faixa de texto, como idioma, feita antes do intervalo para o mesmo conteúdo, mesmo que os anúncios estejam em um idioma diferente.

Legendas forçadas

Legendas forçadas ou narrativa forçada são sobreposições de texto exibidas para que o visualizador possa entender quando uma linguagem alternativa é usada ou para esclarecer o áudio. Ao contrário das closed captions, um espectador não precisa ativar as legendas forçadas, porque elas são selecionadas automaticamente com base nas preferências de áudio do espectador.

Para adicionar legendas forçadas ao seu app Google Cast, é necessário incluí-las como parte do manifesto. No manifesto, defina o papel da faixa como forced-subtitle. Quando o SDK do Cask seleciona essas faixas, ele as identifica como legendas forçadas. Não é necessário nenhum trabalho do remetente, já que o SDK do Cast separará as legendas forçadas e as closed captions. Isso significa que o espectador não poderá selecionar uma legenda forçada.

Quando as closed captions estão ativadas, as forçadas são desativadas para evitar a sobreposição de legendas. Quando as legendas ocultas estão desativadas e são fornecidas no manifesto, as legendas forçadas são exibidas com base na preferência de idioma do áudio do espectador.