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.