Reproduzir transmissões ao vivo registradas na API Video Stitcher do Google Cloud
Este guia demonstra como usar o SDK do IMA DAI para tvOS para solicitar e reproduzir uma transmissão ao vivo de um evento registrado na API Video Stitcher do Google Cloud e como inserir um intervalo de anúncio durante a reprodução.
Este guia expande o exemplo básico do guia Introdução ao IMA DAI.
Para informações sobre a integração com outras plataformas ou sobre o uso dos SDKs do IMA no lado do cliente, consulte SDKs do Interactive Media Ads.
Se você quiser conferir ou acompanhar uma integração de exemplo concluída, baixe o exemplo do Video Stitcher do Cloud para Objective-C ou Swift.
Configurar 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 ao vivo foi criada:
LOCATION - Número do projeto
- O número do projeto na nuvem do Google Cloud que usa a API Video Stitcher:
PROJECT_NUMBER - Token OAuth
O token OAuth de curta duração de uma conta de serviço com o papel 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 de rede
O código de rede do Ad Manager para solicitar anúncios:
NETWORK_CODE
- ID de configuração ao vivo
- O ID de configuração ao vivo especificado 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
Baixar e preparar o exemplo básico
Baixe os exemplos do IMA DAI para tvOS e extraia o exemplo básico para uma nova pasta. Esse exemplo é um projeto do Xcode que depende do Cocoapods para carregar o SDK do IMA.
Para preparar o exemplo para execução, verifique se o CocoaPods está instalado. Em seguida, abra a pasta do exemplo básico no terminal e execute o seguinte comando:
pod install --repo-updateDepois que esse comando for concluído, um arquivo chamado BasicExample.xcworkspace será exibido na pasta do projeto. Abra esse arquivo no Xcode e execute o exemplo para garantir que o vídeo de teste e os anúncios sejam reproduzidos conforme o esperado.
Solicitar uma transmissão ao vivo
Para substituir o fluxo de amostra pela transmissão ao vivo, use a classe IMAVideoStitcherLiveStreamRequest, 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
fins de monitoramento e depuração.
No exemplo atual, há exemplos de como solicitar um fluxo de VOD ou uma transmissão ao vivo dos servidores de DAI do Google. Para que o exemplo funcione com a API Video Stitcher do Google Cloud, é necessário substituir a função requestStream atual por uma que use a classe IMAVideoStitcherLiveStreamRequest:
ViewController.m
#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
static NSString *const kLiveConfigId = @"LIVE_CONFIG_ID";
static NSString *const kLocation = @"LOCATION";
static NSString *const kProjectNumber = @"PROJECT_NUMBER";
static NSString *const kOAuthToken = @"OAUTH_TOKEN";
static NSString *const kNetworkCode = @"NETWORK_CODE";
static NSString *const kCustomAssetKey = @"CUSTOM_ASSET_KEY";
static NSString *const kBackupStreamURLString =
@"http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/bbb-,480p,720p,1080p,.mov.csmil/"
@"master.m3u8";
@interface ViewController () <IMAAdsLoaderDelegate, IMAStreamManagerDelegate>
...
- (void)requestStream {
IMAAVPlayerVideoDisplay *videoDisplay =
[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.playerViewController.player];
IMAAdDisplayContainer *adDisplayContainer =
[[IMAAdDisplayContainer alloc] initWithAdContainer:self.adContainerView];
IMAVideoStitcherLiveStreamRequest *request =
[[IMAVideoStitcherLiveStreamRequest alloc] initWithLiveStreamEventID:kLiveConfigId
region:kLocation
projectNumber:kProjectNumber
OAuthToken:kOAuthToken
networkCode:kNetworkCode
customAssetKey:kCustomAssetKey
adDisplayContainer:self.adDisplayContainer
videoDisplay:self.videoDisplay
userContext:nil,
videoStitcherSessionOptions:nil];
[self.adsLoader requestStreamWithRequest:request];
}
(Opcional) Adicionar opções de sessão de streaming
Personalize a solicitação de fluxo adicionando opções de sessão para substituir a configuração padrão da API Video Stitcher do Cloud. Para isso, preencha o
videoStitcherSessionOptions
parâmetro no
IMAVideoStitcherLiveStreamRequest.
Se você fornecer uma opção não reconhecida, a API Video Stitcher do Cloud 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 a seguir, que solicita dois manifestos de fluxo com renderizações ordenadas do menor para o maior bitrate.
Objective-C
// Define session options JSON string.
// The following session options are examples. Use session options
// that are compatible with your video stream.
NSString *sessionOptionsStr =
@"{"
" \"manifestOptions\": {"
" \"bitrateOrder\": \"ascending\""
" }"
"}";
// convert JSON NSString to NSDictionary
NSData *sessionOptionsData = [sessionOptionsStr dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil;
NSDictionary *sessionOptions = [NSJSONSerialization
JSONObjectWithData:sessionOptionsData
options:0
error:&error];
// make stream request
IMAVideoStitcherLiveStreamRequest *streamRequest =
[[IMAVideoStitcherLiveStreamRequest alloc] initWithLiveStreamEventID:kLiveConfigID
region:kLocation
projectNumber:kProjectNumber
OAuthToken:kOAuthToken
networkCode:kNetworkCode
customAssetKey:kCustomAssetKey
adDisplayContainer:adDisplayContainer
videoDisplay:imaVideoDisplay
userContext:nil
videoStitcherSessionOptions:sessionOptions];
[self.adsLoader requestStreamWithRequest:streamRequest];
Swift
// Define session options JSON string.
// The following session options are examples. Use session options
// that are compatible with your video stream.
let sessionOptionsStr = """
{
"manifestOptions": {
"bitrateOrder": "ascending"
}
}
"""
// convert JSON string to dictionary
guard let sessionOptionsData = sessionOptionsStr.data(using: .utf8, allowLossyConversion: false) else { return nil }
let sessionOptions = try? JSONSerialization.jsonObject(with: sessionOptionsData, options: .mutableContainers)
// make stream request
let streamRequest = IMAVideoStitcherLiveStreamRequest(
liveStreamEventID:ViewController.liveConfigID
region:ViewController.location
projectNumber:ViewController.projectNumber
OAuthToken:ViewController.oAuthToken
networkCode:ViewController.networkCode
customAssetKey:ViewController.customAssetKey
adDisplayContainer:adDisplayContainer
videoDisplay:imaVideoDisplay
userContext:nil
videoStitcherSessionOptions:sessionOptions)
adsLoader?.requestStream(with: streamRequest)
Execute o projeto. Em seguida, você poderá solicitar e reproduzir sua transmissão ao vivo personalizada.
Inserir um intervalo de anúncio
A API Video Stitcher do Google Cloud insere anúncios recuperados da tag de anúncio para cada intervalo de anúncio. Os intervalos comerciais são indicados no manifesto usando marcadores de anúncio. 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, será necessário inserir o marcador de anúncio. Para mais informações sobre os marcadores de anúncio HLS e DASH com suporte, consulte a documentação de marcadores de anúncio.
Se você criou uma transmissão ao vivo usando a API Livestream do Google Cloud, insira um evento de canal de intervalo de anúncio.
O anúncio é reproduzido imediatamente após a inserção do intervalo de anúncio.
Limpar
Agora que você hospedou uma transmissão ao vivo usando a API Video Stitcher do Google Cloud e a solicitou usando o SDK do IMA DAI para tvOS, é 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.