Reproduzir transmissões ao vivo registradas com a API Google Cloud Video Stitcher
Este guia demonstra como usar o SDK DAI do IMA para HTML5 para solicitar e reproduzir uma transmissão ao vivo de um evento registrado com a API Google Cloud Video Stitcher e como inserir um intervalo de anúncio durante a reprodução.
Este guia expande o exemplo básico do Guia de início de uso do IMA DAI.
Para informações sobre a integração com outras plataformas ou o uso dos SDKs do lado do cliente do IMA, consulte SDKs do Interactive Media Ads.
Para conferir ou seguir um exemplo de integração completa, faça o download do exemplo de emenda de vídeo do Cloud para HLS ou DASH.
Configure um projeto do Google Cloud
Insira as seguintes variáveis para uso no SDK do IMA:
- Local
- A região do Google Cloud
em que a configuração ativa foi criada:
LOCATION
- Número do projeto
- O número do projeto do Google Cloud que usa a API Video Stitcher:
PROJECT_NUMBER
- Token OAuth
Um token OAuth de curta duração de uma conta de serviço com a função de usuário do Video Stitcher:
OAUTH_TOKEN
Saiba mais sobre como criar credenciais de curta duração para contas de serviço. O token OAuth pode ser reutilizado em várias solicitações, desde que não tenha expirado.
- Código da rede
O código de rede do Ad Manager para solicitar anúncios:
NETWORK_CODE
- ID da configuração ao vivo
- O ID da configuração ao vivo que você especificou ao criar o evento de transmissão ao vivo:
LIVE_CONFIG_ID
- Chave de recurso personalizada
- A chave de recurso personalizada do Ad Manager gerada durante o processo de criação de uma
configuração para um evento de transmissão ao vivo
com a API Video Stitcher:
CUSTOM_ASSET_KEY
Configurar um ambiente de desenvolvimento
Os apps de exemplo do IMA demonstram apenas solicitações de transmissão HLS. Ainda é possível usar fluxos DASH
ao criar a classe VideoStitcherLiveStreamRequest
. Ao
configurar o player compatível com DASH, é necessário configurar um listener para os
eventos de progresso do player de vídeo que podem fornecer os metadados do vídeo para
StreamManager.processMetadata()
.
Essa função usa três parâmetros:
type
: uma string que precisa ser definida como'ID3'
para streams HLS e'urn:google:dai:2018'
para streams DASH.data
: para mensagens de evento DASH, é a string de dados da mensagem.timestamp
: um número que é o horário de início da mensagem de evento para transmissões DASH.
Envie os metadados assim que possível e com a frequência que os eventos do jogador permitirem. Se os metadados estiverem ausentes ou incorretos, o SDK do IMA DAI poderá não acionar eventos de anúncios, resultando em eventos de anúncios informados incorretamente.
Faça o download dos exemplos de IMA DAI para HTML5 e extraia o exemplo simples de HLS.js em uma nova pasta. Este exemplo é um app da Web que pode ser hospedado localmente para fins de teste.
Para hospedar o exemplo localmente, navegue até a nova pasta e execute o seguinte comando Python para iniciar um servidor da Web:
python3 -m http.server 8000
http.server
está disponível apenas no Python 3.x. Você pode usar qualquer outro servidor da Web,
como o Apache HTTP Server ou o Node JS.
Abra um navegador da Web e acesse localhost:8000
para ver um player de vídeo.
Seu navegador precisa oferecer suporte à biblioteca
HLS.js.
Se tudo estiver funcionando corretamente, clique no botão play no player de vídeo para assistir o curta-metragem "Tears of Steel" depois de um anúncio curto. Esse conteúdo é enviado usando um fluxo de vídeo on demand (VOD).
Solicitar uma transmissão ao vivo
Para substituir o fluxo de VOD de exemplo pela sua transmissão ao vivo, use a classe
VideoStitcherLiveStreamRequest
,
que cria automaticamente uma sessão de anúncios com o Google Ad Manager. Você pode
usar a interface do Google Ad Manager para localizar as sessões de DAI geradas para monitoramento e depuração.
No exemplo atual, há funções para solicitar um stream de VOD ou uma
transmissão ao vivo. Para que ele funcione com a API Google Cloud Video Stitcher, é necessário
adicionar uma nova função para retornar um
objeto VideoStitcherLiveStreamRequest
.
Veja um exemplo:
// StreamManager which will be used to request ad-enabled streams.
let streamManager;
...
function initPlayer() {
videoElement = document.getElementById('video');
adUiElement = document.getElementById('adUi');
streamManager = new google.ima.dai.api.StreamManager(
videoElement,
adUiElement
);
streamManager.addEventListener(
[
google.ima.dai.api.StreamEvent.Type.LOADED,
google.ima.dai.api.StreamEvent.Type.ERROR,
google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED,
google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED
],
onStreamEvent, false);
hls.on(Hls.Events.FRAG_PARSING_METADATA, function(event, data) {
if (streamManager && data) {
// For each ID3 tag in our metadata, we pass in the type - ID3, the
// tag data (a byte array), and the presentation timestamp (PTS).
data.samples.forEach(function(sample) {
streamManager.processMetadata('ID3', sample.data, sample.pts);
});
}
});
videoElement.addEventListener('pause', () => {
playButton.style.display = 'block';
});
playButton.addEventListener('click', initiatePlayback);
}
function initiatePlayback() {
requestVideoStitcherStream();
playButton.style.display = "none";
playButton.removeEventListener('click', initiatePlayback);
playButton.addEventListener('click', resumePlayback);
}
...
function requestVideoStitcherStream() {
const streamRequest = new google.ima.dai.api.VideoStitcherLiveStreamRequest();
streamRequest.liveStreamEventId = 'LIVE_CONFIG_ID';
streamRequest.region = 'LOCATION';
streamRequest.projectNumber = 'PROJECT_NUMBER';
streamRequest.oAuthToken = 'OAUTH_TOKEN';
streamRequest.networkCode = 'NETWORK_CODE';
streamRequest.customAssetKey = 'CUSTOM_ASSET_KEY';
streamManager.requestStream(streamRequest);
}
Para testes locais, se os arquivos de transmissão ao vivo estiverem localizados em um bucket do Cloud Storage, será necessário ativar
CORS para a origem
http://localhost:8000
.
Atualize a página. Depois, você pode solicitar e assistir transmissões ao vivo personalizadas.
(Opcional) Adicionar opções de sessão de streaming
Personalize sua solicitação de transmissão adicionando opções de sessão para substituir a configuração padrão
da API Cloud Video Stitcher usando
VideoStitcherLiveStreamRequest.videoStitcherSessionOptions
.
Se você fornecer uma opção não reconhecida, a API Cloud
Video Stitcher vai responder com um erro HTTP 400. Consulte o
guia de solução de problemas
para receber ajuda.
Por exemplo, é possível substituir as opções de manifesto com o snippet de código abaixo, que solicita dois manifestos de transmissão com renditions ordenadas do bitrate mais baixo para o mais alto.
...
// The following session options are examples. Use session options
// that are compatible with your video stream.
streamRequest.videoStitcherSessionOptions = {
"manifestOptions": {
"bitrateOrder": "ascending"
}
};
streamManager.requestStream(streamRequest);
Inserir um intervalo de anúncio
A API Google Cloud Video Stitcher insere anúncios extraídos da tag de anúncio para cada intervalo de anúncios. Os intervalos comerciais são indicados no manifesto usando marcadores de anúncios. Os marcadores de anúncio são inseridos pelo codificador de transmissão ao vivo.
Se você estiver usando sua própria transmissão ao vivo, insira o marcador de anúncio. Para mais informações sobre os marcadores de anúncio HLS e DASH compatíveis, consulte a documentação de marcadores de anúncio.
Se você criou uma transmissão ao vivo usando a API Google Cloud Livestream, insira um evento de canal de intervalo de anúncio.
O anúncio é reproduzido imediatamente após o intervalo de anúncio ser inserido.
Limpar
Agora que você hospedou uma transmissão ao vivo usando a API Google Cloud Video Stitcher e a solicitou usando o SDK DAI do IMA para HTML5, é importante limpar todos os recursos de veiculação.
Siga o guia de limpeza de transmissão ao vivo para remover recursos e recursos desnecessários.
Por fim, na janela do terminal em que você iniciou o servidor da Web Python 3, use
o comando ctrl+C
para encerrar o servidor local.