Usar o SDK do IMA DAI no tvOS

Reproduza transmissões ao vivo registradas com a API Google Cloud Video Stitcher.

Este guia demonstra como usar o SDK DAI do IMA para tvOS para solicitar e exibir 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 módulo Comece já guia para DAI do IMA.

Para informações sobre a integração com outras plataformas ou o uso do SDK SDKs do lado do cliente, consulte SDKs do Interactive Media Ads.

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

Leia mais sobre criar credenciais de curta duração para serviços 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 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 um configuração para um evento de transmissão ao vivo com a API Video Stitcher: CUSTOM_ASSET_KEY

Fazer o download e preparar o exemplo básico

Faça o download dos exemplos de DAI do IMA para tvOS e extrair o exemplo básico em uma nova pasta. Este exemplo é um código-fonte que depende do Cocoapods para carregar o SDK do IMA.

Para preparar o exemplo para execução, verifique se o CocoaPods está instalado, depois abra o na pasta de exemplo básico no terminal e execute o seguinte comando:

pod install --repo-update

Quando o comando for concluído, você vai encontrar um arquivo chamado BasicExample.xcworkspace 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 como 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 publicidade 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.

Na amostra existente, há exemplos para solicitar um stream de VOD ou um transmissão ao vivo de 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>

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];

  [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 IMAVideoStitcherLiveStreamRequest. Se você fornecer uma opção não reconhecida, o Cloud A API Video Stitcher 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.

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\": {"
   "    \"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.
 // The following session options are examples. Use session options
 // that are compatible with your video stream.
 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 solicite e assista a transmissão ao vivo personalizada.

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 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.

O anúncio é reproduzido imediatamente após o intervalo de anúncio ser inserido.

Limpar

Agora que você organizou uma transmissão ao vivo usando a API Google Cloud Video Stitcher e a solicitou usando o SDK de DAI do IMA. para tvOS, é importante limpar todas as exibições do Google Cloud.

Siga o guia de limpeza de transmissão ao vivo para remover recursos e recursos desnecessários.