Reproduza transmissões ao vivo registradas com a API Google Cloud Video Stitcher.
Este guia demonstra como usar o SDK de DAI do IMA para iOS 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 iniciação para a DAI do IMA.
Para informações sobre como integrar com outras plataformas ou usar os SDKs do lado do cliente do IMA, consulte SDKs do Interactive Media Ads (link em inglês).
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
O token OAuth de curta duração de uma conta de serviço com o papel de usuário de editor de vídeo:
OAUTH_TOKEN
Leia 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 de configuração em tempo real
- O ID de configuração ao vivo que você especificou ao criar seu 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
- Contexto do usuário
- O contexto do usuário para rastrear solicitações. Pode ser
nil
. O padrão énil
neste guia.
Fazer o download e preparar o exemplo básico
Faça o download dos exemplos de DAI do IMA para iOS e extraia o exemplo básico em uma nova pasta. Este exemplo é um projeto Xcode que depende do Cocoapods para carregar o SDK do IMA.
Para preparar o exemplo a ser executado, verifique se o CocoaPods está instalado, abra a pasta do exemplo básico no terminal e execute o seguinte comando:
pod install --repo-update
Depois que o comando for concluído, você verá um arquivo chamado BasicExample.xcworkspace
na pasta do projeto. Abra esse arquivo no Xcode e execute a amostra para garantir que o vídeo e os anúncios de teste sejam reproduzidos conforme o esperado.
Solicitar uma transmissão ao vivo
Para substituir o stream de amostra pela sua transmissão ao vivo, use a classe IMAVideoStitcherLiveStreamRequest
, que cria automaticamente uma sessão de anúncios com o Google Ad Manager. É possível usar a IU do Google Ad Manager para localizar
as sessões de DAI geradas para
fins de monitoramento e depuração.
Na amostra atual, há exemplos de solicitação de um stream de VOD ou de uma transmissão ao vivo dos servidores de DAI do Google. Para que o exemplo funcione com a API Google Cloud Video Stitcher, substitua a função requestStream
atual por uma que use a classe IMAVideoStitcherLiveStreamRequest
:
ViewController.m
#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
/// Fallback URL in case something goes wrong in loading the stream. If all goes well,
/// this will not be used.
static NSString *const kTestAppContentUrl_M3U8 =
@"//devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";
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";
@interface ViewController () <IMAAdsLoaderDelegate, IMAStreamManagerDelegate>
...
- (void)requestStream {
// Create an ad display container for ad rendering.
IMAAdDisplayContainer *adDisplayContainer =
[[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView
viewController:self
companionSlots:nil];
// Create an IMAAVPlayerVideoDisplay to give the SDK access to your video player.
IMAAVPlayerVideoDisplay *imaVideoDisplay =
[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.contentPlayer];
IMAVideoStitcherLiveStreamRequest *request =
[[IMAVideoStitcherLiveStreamRequest alloc] initWithLiveStreamEventID:kLiveConfigId
region:kLocation
projectNumber:kProjectNumber
OAuthToken:kOAuthToken
networkCode:kNetworkCode
customAssetKey:kCustomAssetKey
adDisplayContainer:adDisplayContainer
videoDisplay:imaVideoDisplay
userContext:nil
videoStitcherSessionOptions:nil];
[self.adsLoader requestStreamWithRequest:request];
}
(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 preenchendo o parâmetro videoStitcherSessionOptions
na sua IMAVideoStitcherLiveStreamRequest.
Se você fornecer uma opção não reconhecida, a API Cloud Video Stitcher responderá com um erro HTTP 400. Consulte o guia de solução de problemas para receber ajuda.
Por exemplo, você pode substituir as opções de manifesto com o snippet de código a seguir, que solicita dois manifestos de stream com renderizações ordenadas da menor taxa de bits para a maior.
Objective-C
// define session options JSON string
NSString *sessionOptionsStr =
@"{"
" \"manifestOptions\": {"
" \"includeRenditions\":["
" {\"bitrateBps\": 3000, \"codecs\": \"hvc1.1.4.L126.B0, mp4a.40.2\"},"
" {\"bitrateBps\": 2000, \"codecs\": \"avc1.64001f, mp4a.40.2\"},"
" ]"
" }"
"}";
// 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 *request =
[[IMAVideoStitcherLiveStreamRequest alloc] initWithLiveStreamEventID:kLiveConfigId
region:kRegion
projectNumber:kProjectNumber
OAuthToken:kOAuthToken
networkCode:kNetworkCode
customAssetKey:kCustomAssetKey
adDisplayContainer:adDisplayContainer
videoDisplay:imaVideoDisplay
userContext:nil
videoStitcherSessionOptions:sessionOptions];
[self.adsLoader requestStreamWithRequest:request];
Swift
// define session options JSON string
let sessionOptionsStr = """
{
"manifestOptions": {
"includeRenditions": [
{"bitrateBps": 3000, "codecs": "hvc1.1.4.L126.B0, mp4a.40.2"},
{"bitrateBps": 2000, "codecs": "avc1.64001f, mp4a.40.2"},
],
"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 request = IMAVideoStitcherLiveStreamRequest(
liveStreamEventID:ViewController.liveConfigId
region:ViewController.region
projectNumber:ViewController.projectNumber
OAuthToken:ViewController.oAuthToken
networkCode:ViewController.networkCode
customAssetKey:ViewController.customAssetKey
adDisplayContainer:adDisplayContainer
videoDisplay:imaVideoDisplay
userContext:nil
videoStitcherSessionOptions:sessionOptions)
adsLoader?.requestStream(with: request)
Execute o projeto e, em seguida, solicite e reproduza sua transmissão ao vivo personalizada.
Inserir um intervalo de anúncio
A API Google Cloud Video Stitcher insere anúncios recuperados da tag de anúncio para cada intervalo de anúncio. Os intervalos de anúncio 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, vai precisar inserir o marcador de anúncio. Para mais informações sobre os marcadores de anúncio HLS e DASH compatíveis, consulte a documentação relacionada.
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 de DAI do IMA para iOS, é importante limpar todos os recursos de veiculação.
Siga o guia de limpeza da transmissão ao vivo para remover todos os recursos desnecessários.