O SDK do Cast inclui APIs integradas para oferecer suporte a conteúdo ao vivo. Isso inclui interface flexível e pronta para uso, acoplada a APIs que permitem aos desenvolvedores criar experiências ao vivo com apenas algumas linhas de código. A API Live oferece suporte à exibição horários de início e término, metadados do programa, controles de DVR e janelas pesquisáveis.
Este guia demonstra como configurar uma transmissão para as APIs de transmissões ao vivo, incluindo amostras de código e metadados para configurar os principais cenários ao vivo, além de capturas de tela que mostram cada cenário.
Pré-requisitos
Conhecer os fundamentos da implementação É necessário usar o Receptor da Web antes de analisar esta guia. Além disso, para executar os exemplos de código, você precisará de acesso a um que esteja em conformidade com um dos tipos de mídia compatíveis com a transmissão. Em geral, o recurso "Ao vivo" oferece suporte a configurações típicas de transmissão ao vivo mídia compatível.
Os seguintes termos são usados ao longo deste guia:
- Janela pesquisável: é o intervalo de uma transmissão ao vivo que os usuários podem procurar.
- Borda ao vivo: é a parte mais recente de uma transmissão ao vivo disponível para o jogador.
- Play Head: é um carimbo de data/hora da interface para a posição de reprodução atual.
Como transmitir uma transmissão ao vivo
Há duas maneiras de configurar o SDK do receptor da Web para usar a API Live para conteúdo:
- usando o interceptador de mensagens
LOAD
no aplicativo receptor da Web. (recomendado) - usando uma solicitação de carga gerada pelo lado do remetente ou do receptor.
O interceptador fornece uma
LoadRequestData
Objeto que contém todos os metadados importantes sobre uma solicitação de carregamento. Para
que uma solicitação de carregamento é para uma transmissão ao vivo, basta definir o
streamType
no(a)
mediaInformation
para
StreamType.LIVE
.
MediaInformation.duration
precisa ser -1
, já que as instâncias do player são
responsável por calculá-lo quando o conteúdo for LIVE
.
/*
* This interceptor is called before your content is loaded by a Cast device
*/
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
request => { /* cast.framework.messages.LoadRequestData */
request.media.streamType = cast.framework.messages.StreamType.LIVE;
return request;
});
Adicionando dados do guia da programação
Transmissões ao vivo, especialmente transmissões de longa duração, como um canal de TV, podem mostrar metadados do guia/programação na tela com base na reprodução atual em uma transmissão ao vivo. Recomendamos que os provedores de conteúdo incluam programação de metadados em seus aplicativos receptores da Web para uma melhor experiência do usuário.
É possível configurar os dados do guia inicial para um stream na mensagem LOAD
da mesma forma que indicamos que a transmissão era ao vivo
exemplo anterior. Seções ou programas individuais na transmissão ao vivo são
representados como
MediaMetadata
que são armazenados em um
queue.
Existe uma classe MediaMetadata
diferente para diferentes tipos de programa (por exemplo,
TvShowMediaMetadata
,
MovieMediaMetadata
,
MusicTrackMediaMetadata
,
etc.
No snippet de código a seguir, usamos o objeto MediaMetadata
para especificar
horário de início de cada programa com um
Carimbo de data/hora do UNIX com o
sectionStartAbsoluteTime
. A duração de um programa é representada em segundos.
// The metadata for a single TV show
const currentShow = new cast.framework.messages.TvShowMediaMetadata();
currentShow.episode = 15;
currentShow.seriesTitle = 'The Odyssey';
currentShow.title = 'Scylla and Charybdis';
currentShow.sectionStartAbsoluteTime = toUnixTimestamp('9:00 PM');
currentShow.sectionDuration = HOUR_IN_SECONDS;
const previousShow = new ...;
const nextShow = new ...;
const containerMetadata = new cast.framework.messages.ContainerMetadata();
containerMetadata.title = 'My TV Channel';
containerMetadata.sections = [previousShow, currentShow, nextShow];
playerManager.getQueueManager().setContainerMetadata(containerMetadata);
Intervalo pesquisável em tempo real
O SDK do Cast inclui elementos e controles de interface que permitem que o usuário mova os marcador de reprodução no stream usando o Controlador expandido ou controles por toque em dispositivos habilitados para toque.
A
LiveSeekableRange
representa o intervalo de tempo em um fluxo em que um usuário pode buscar. No(s) dia(s)
Receptor web você pode acessar informações sobre o intervalo pesquisável via
PlayerManager.getLiveSeekableRange()
,
que retorna um
LiveSeekableRange
objeto. As principais propriedades do objeto que você precisa conhecer são:
- start: hora de início (em segundos) do intervalo em relação ao início da transmissão em segundos.
- end: o tempo máximo (em segundos) que o player pode alcançar. com base nos segmentos disponíveis, em relação ao início da transmissão.
- isMovingWindow: um valor booleano que indica se o intervalo pesquisável move (ou seja, segmentos mais antigos são removidos do manifesto) com o stream, esse valor deve ser verdadeiro para todas as transmissões ao vivo.
- isLiveDone: um valor booleano que indica se a transmissão ao vivo concluído, ou seja, nenhum segmento novo está sendo gerado.
O tamanho do intervalo pesquisável, representado como o tempo entre start
e
end
, é determinada pelo número de segmentos disponíveis no stream e será
se mover com o stream. Por exemplo, se, no início do stream, a fase
o intervalo é {start:0, end: 600, isMovingWindow: false, isLiveDone: false}
, dez
segundos após o início do stream, ele pode se tornar {start: 10, end: 610,
isMovingWindow: true, isLiveDone: false}
. É importante observar o início e
os horários de término no intervalo pesquisável são atualizados com base no tempo que leva para
gerar um novo segmento. Assim, se a duração típica de um trecho da sua transmissão
for de 10 segundos, os horários de início e término serão atualizados a cada 10 segundos, conforme
muito bem.
Desativar a busca
Para desativar a busca em um stream, remova a funcionalidade de busca dos comandos de mídia compatíveis com o receptor da Web:
// disable seeking in the LOAD messageInterceptor
playerManager.removeSupportedMediaCommands(cast.framework.messages.Command.SEEK, true);
Remoção do comando de mídia com suporte a indicadores do SEEK
para aplicativos remetentes
e touch displays para desativar a busca, mas não desativa comandos de voz, como
como "Ok Google, voltar 30 segundos".
comandos de mídia compatíveis com voz
para detalhes sobre como desativar comandos de mídia para voz.
Eventos de framework ao vivo
Dois eventos, LIVE_ENDED
e LIVE_IS_MOVING_WINDOW_CHANGED
, estão incluídos em
a API em tempo real. Ambos os eventos recebem um
LiveStatusEvent
, que contém o intervalo atual pesquisável em tempo real.
Evento | Descrição |
---|---|
LIVE_ENDED |
Acionado quando uma transmissão ao vivo termina. Nesse ponto, o valor end em LiveSeekableRange não será mais atualizado. os usuários ainda poderão visualizar o conteúdo dentro do intervalo pesquisável em tempo real. |
LIVE_IS_MOVING_WINDOW_CHANGED |
Acionado quando o intervalo pesquisável de uma transmissão ao vivo muda de uma janela fixa para uma janela móvel ou vice-versa. Em uma transmissão ao vivo, isso acontecerá quando o jogador detectar que o manifesto está removendo segmentos anteriores. |
Cenários de transmissão ao vivo
Há oito tipos de cenários possíveis para a transmissão ao vivo, e cada um deles são definidas por meio da definição de três configurações principais:
- A transmissão tem um horário de início
- A transmissão tem um horário de término
- Os usuários podem procurar dentro da janela pesquisável da transmissão ao vivo.
Consulte Como adicionar dados do guia do programa para saber como configurar esses valores.
Confira abaixo descrições e capturas de tela dos cenários disponíveis na transmissão ao vivo API. As variáveis T1 e T2 representam o carimbo de data/hora no respectivamente à esquerda e à direita da interface.
Horário de início | Horário de término | Pesquisável | T1 | T2 | |
---|---|---|---|---|---|
Cenário 1 | Não | Não | Não | Cabeça de brincadeira | Não mostrado |
Cenário 7 | Sim | Sim | Não | Mostrar hora de início | Mostrar hora de término |
Cenário 8 | Sim | Sim | Sim | Mostrar hora de início | Mostrar hora de término |
Cenário um
Horário de início | Horário de término | Pesquisável | T1 | T2 |
---|---|---|---|---|
Não | Não | Não | Tocar na cabeça | Não mostrado |
O cenário 1 não tem horário de início nem de término e os usuários não podem buscar dentro do riacho. Quando um usuário interromper a transmissão, a reprodução será retomada a partir da borda ao vivo de onde a transmissão foi pausada.
Cenário sete
Horário de início | Horário de término | Pesquisável | T1 | T2 |
---|---|---|---|---|
Sim | Sim | Não | Cabeça de brincadeira | Duração do programa |
O cenário sete tem um horário de início e um de término, mas não é pesquisável. Os dois os carimbos de data/hora na interface, T1 e T2, representam o marcador atual e o total duração do programa, respectivamente. Se um usuário pausar/retomar a reprodução, o stream será retomar na borda da transmissão ao vivo. No exemplo acima, a seção vermelha do a barra de busca representa a parte do stream desde que o usuário começou observação de
Cenário 8
Horário de início | Horário de término | Pesquisável | T1 | T2 |
---|---|---|---|---|
Sim | Sim | Sim | Cabeça de brincadeira | Duração do programa |
O cenário sete tem um horário de início, um horário de término e é pesquisável. Os dois carimbos de data/hora na interface do usuário, T1 e T2, representam o marcador atual e o total do respectivamente. Se um usuário pausar/retomar a reprodução, a transmissão será retomada. no momento em que a pausa foi feita, se ela estiver dentro da janela pesquisável (a área em vermelho na a barra de busca representa para onde um usuário pode voltar e a área em branco representa para onde eles podem avançar.
Como configurar um cenário
A configuração de uma transmissão como um cenário ao vivo específico é feita em três partes:
- Definir o tipo de transmissão: marque a transmissão como transmissão ao vivo.
- Adicionar dados do guia do programa: defina um horário de início.
e duração no objeto
MediaMetadata
. - Configurar funcionalidade de busca: ativar ou desativar a busca.
Comportamento de reprodução
Enquanto estiver pausado, a interface do usuário continuará a ter seus metadados de reprodução atualizados. inclui tempos de reprodução no início e de borda ao vivo. Após a retomada do fluxo, há há alguns comportamentos que você precisa conhecer, que variam de acordo com a configuração do stream.
Streams pesquisáveis
Após a retomada de um stream pesquisável:
- A borda ativa precisa ser atualizada para o local ativo e o intervalo pesquisável serão ajustados.
- Se o marcador passar do programa atual, a barra de reprodução será atualizada. com os metadados do novo programa (incluindo horários de início e término, se disponíveis).
- Se uma janela pesquisável tiver o comprimento de "X", o intervalo pesquisável se estenderá de volta a no máximo "X" ou ao início do programa, o que for menor.
- Se o usuário tiver ficado pausado por tempo suficiente para que a hora atual não seja mais em na janela pesquisável, o stream será retomado no primeiro ponto (à esquerda) da janela pesquisável.
Ir para
LiveSeekableRange.end
para retomar a reprodução na borda ao vivo após retomá-la.
let playerManager = cast.framework.CastReceiverContext.getInstance().getPlayerManager();
// Intercept the message to PLAY
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.PLAY, (requestData) => {
...
if (playerManager.getLiveSeekableRange()) {
// Resume playback at the live edge
playerManager.seek(playerManager.getLiveSeekableRange().end);
} else {
return requestData;
}
...
});
Streams não pesquisáveis
Após a retomada de uma transmissão não pesquisável:
- Nesse caso, a reprodução será retomada na borda ao vivo.
- Se a borda ativa ultrapassar o programa atual, a barra de reprodução deverá ser atualizados com os metadados do novo programa (incluindo horário de início e término) se disponível).
Mudanças na superfície da API e como personalizar a interface em tempo real
O SDK do Cast oferece suporte integrado para a criação de interfaces do usuário personalizadas em vez de usando a interface pronta para uso. No entanto, é importante seguir Lista de verificação do design de UX do Google Cast ao personalizar a interface gráfica do usuário.
Receptor da Web
No receptor da Web, o
PlayerData
inclui os campos a seguir para permitir que os desenvolvedores estendam suas configurações personalizadas
para transmissões ao vivo:
- isLive: uma sinalização que indica se a transmissão atual é ao vivo; e não VOD.
- liveSeekableRange: o intervalo pesquisável a ser mostrado na demarcação da tela. na janela de DVR.
- mediaStartAbsoluteTime: quando a seção começou em tempo absoluto (UNIX Epoch).
- sectionStartTimeInMedia: horário de início da seção em segundos em relação ao o horário de início da mídia.
- sectionDuration: duração da seção em segundos.
Não se esqueça de levar em conta também dois eventos ao vivo ao personalizar a interface.
SDK do Android
Como parte da funcionalidade "Ao vivo", o uso do widget Seekbar do Android no
O uso de UIMediaController
foi descontinuado. Use CastSeekBar
.