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.