Usar o SDK do IMA DAI no iOS

Reproduzir transmissões ao vivo registradas na API Video Stitcher do Google Cloud

Este guia demonstra como usar o SDK do IMA DAI para iOS 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 de introdução do 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 ativa 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 da rede

O código de rede do Ad Manager para solicitar anúncios: NETWORK_CODE

ID de configuração ativa
O ID de configuração ativa 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

Contexto do usuário
O contexto do usuário para rastrear solicitações. Pode ser nil. O padrão é nil neste guia.

Baixar e preparar o exemplo básico

Baixe os exemplos do IMA DAI para iOS 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-update

Depois que esse comando for concluído, um arquivo chamado BasicExample.xcworkspace vai aparecer na pasta do projeto. Abra esse arquivo no Xcode e execute o exemplo 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 a transmissão de exemplo pela sua 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 solicitação de uma transmissão 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, você precisará substituir 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 *streamRequest =
      [[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:streamRequest];
}

Opcional: adicionar opções de sessão de transmissão

Personalize a solicitação de transmissão 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, você pode substituir as opções de manifesto com o snippet de código a seguir, que solicita dois manifestos de transmissão 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.

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 iOS, é 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.