Use o SDK para IMA DAI no iOS

Veja streams em direto registadas com a API Google Cloud Video Stitcher

Este guia demonstra como usar o SDK para DAI do IMA para iOS para pedir e ver uma stream em direto de um evento registado na API Google Cloud Video Stitcher e como inserir uma pausa para anúncios durante a reprodução.

Este guia expande o exemplo básico do guia de introdução para o IMA DAI.

Para obter informações sobre a integração com outras plataformas ou sobre a utilização dos SDKs do lado do cliente para IMA, consulte os SDKs para Anúncios Multimédia Interativos.

Se quiser ver ou acompanhar um exemplo de integração concluído, transfira o exemplo do Cloud Video Stitcher para Objective-C ou Swift.

Configure um projeto do Google Cloud

Introduza as seguintes variáveis para utilização no SDK para IMA:

Location
A região do Google Cloud onde a configuração publicada 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 utilizador do Video Stitcher:

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ários pedidos, desde que não tenha expirado.

Código de rede

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

ID da configuração de streams em direto
O ID de configuração em direto que especificou quando criou o evento de stream em direto: LIVE_CONFIG_ID
Chave do recurso personalizado
A chave do recurso personalizado do Ad Manager gerada durante o processo de criação de uma configuração para um evento de stream em direto com a API Video Stitcher: CUSTOM_ASSET_KEY

Contexto do utilizador
O contexto do utilizador para pedidos de acompanhamento. Pode ser nil. A predefinição é nil neste guia.

Transfira e prepare o exemplo básico

Transfira os exemplos da DAI da IMA para iOS e extraia o exemplo básico para uma nova pasta. Este exemplo é um projeto do Xcode que depende do Cocoapods para carregar o SDK para IMA.

Para preparar a amostra para execução, certifique-se de que o CocoaPods está instalado. Em seguida, abra a pasta do exemplo básico no terminal e execute o seguinte comando:

pod install --repo-update

Quando esse comando estiver concluído, é apresentado um ficheiro denominado BasicExample.xcworkspace na pasta do projeto. Abra este ficheiro no Xcode e execute o exemplo para garantir que o vídeo de teste e os anúncios são apresentados conforme esperado.

Peça uma stream em direto

Para substituir a stream de exemplo pela sua stream em direto, tem de usar a classe IMAVideoStitcherLiveStreamRequest que cria automaticamente uma sessão de anúncios com o Google Ad Manager. Pode usar a IU do Google Ad Manager para localizar as sessões de DAI geradas para fins de monitorização e depuração.

No exemplo existente, existem exemplos de pedidos de uma stream VOD ou uma stream em direto dos servidores DAI da Google. Para fazer com que o exemplo funcione com a API Google Cloud Video Stitcher, tem de 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) Adicione opções de sessão de streaming

Personalize o seu pedido de stream adicionando opções de sessão para substituir a configuração predefinida da API Cloud Video Stitcher preenchendo o parâmetro videoStitcherSessionOptions no seu IMAVideoStitcherLiveStreamRequest. Se fornecer uma opção não reconhecida, a API Cloud Video Stitcher responde com um erro HTTP 400. Consulte o guia de resolução de problemas para obter assistência.

Por exemplo, pode substituir as opções do manifesto com o seguinte fragmento do código, que pede dois manifestos de streams com representações ordenadas da taxa de bits mais baixa para a mais alta.

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 e, em seguida, pode pedir e ver a sua stream em direto personalizada.

Insira uma pausa para anúncios

A API Google Cloud Video Stitcher insere anúncios obtidos a partir da etiqueta de anúncio para cada pausa para anúncios. As pausas para anúncios são indicadas no manifesto através de marcadores de anúncios. Os marcadores de anúncios são inseridos pelo codificador de stream em direto.

O anúncio é apresentado imediatamente após a inserção da pausa para anúncios.

Limpar

Agora que alojou com êxito uma stream em direto através da API Google Cloud Video Stitcher e a pediu através do SDK DAI para IMA para iOS, é importante limpar todos os recursos de publicação.

Siga o guia de limpeza de streams em direto para remover recursos e recursos multimédia desnecessários.