Streams de VOD do Play registadas na API Google Cloud Video Stitcher
Este guia demonstra como usar o SDK para DAI do IMA para iOS para pedir e reproduzir uma sessão de stream VOD do Google Cloud.
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 de VOD 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 acerca da criação de tokens OAuth de curta duraçã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 VOD
 O ID da configuração de VOD para a stream VOD:
VOD_CONFIG_IDLeia mais acerca da criação do ID de configuração de VOD no guia de criação de configuração de VOD da união na nuvem.
- Contexto do utilizador
 - O contexto do utilizador para pedidos de acompanhamento. Pode ser 
nil. A predefinição énilneste guia. 
Configure o exemplo básico
Aceda à página de lançamento do GitHub do DAI do IMA para iOS e transfira o
exemplo básico do Objective-C. Este exemplo é um projeto Xcode iOS que depende do
Cocoapods para carregar o SDK IMA DAI. Se estiver a usar o Swift, o IMA não tem uma app de exemplo do iOS, mas consulte o fragmento de código Swift mais adiante neste guia para saber como implementar um IMAVideoStitcherVODStreamRequest na sua própria app.
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-updateQuando 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 de VOD
Para substituir a stream de exemplo pela sua stream VOD com anúncios incorporados, use
IMAVideoStitcherVODStreamRequest
para criar 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 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 que funcione com a API Google Cloud Video Stitcher, tem de substituir a função requestStream atual por uma que use a classe IMAVideoStitcherVODStreamRequest.
Segue-se um exemplo:
Objective-C
ViewController.m
...
#import <GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.h>
/// The Stream's VOD config ID.
static NSString *const kVODConfigID = @"VOD_CONFIG_ID";
/// The Network Code used by the Video Stitcher API.
static NSString *const kNetworkCode = @"NETWORK_CODE";
/// The Google Cloud project using the Video Stitcher API.
static NSString *const kProjectNumber = @"PROJECT_NUMBER";
/// The Google Cloud region containing your project.
static NSString *const kLocation = @"LOCATION";
/// An OAuth Token created by a Google Cloud account with Video Stitcher API
/// permissions.
static NSString *const kOAuthToken = @"OAUTH_TOKEN";
/// Fallback URL in case something goes wrong in loading the stream. If all goes well, this will not
/// be used.
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 {
    // 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];
    IMAVideoStitcherVODStreamRequest *streamRequest =
        [[IMAVideoStitcherVODStreamRequest alloc] initWithVODConfigID:kVODConfigID
                                                             region:kLocation
                                                      projectNumber:kProjectNumber
                                                         OAuthToken:kOAuthToken
                                                        networkCode:kNetworkCode
                                                 adDisplayContainer:adDisplayContainer
                                                       videoDisplay:imaVideoDisplay
                                                        userContext:nil
                                        videoStitcherSessionOptions:nil];
    [self.adsLoader requestStreamWithRequest:streamRequest];
}
...
Swift
ViewController.swift
...
class ViewController: UIViewController, IMAAdsLoaderDelegate, IMAStreamManagerDelegate {
  /// The Stream's VOD config ID.
  static let vodConfigID = "VOD_CONFIG_ID"
  /// The Network Code used by the Video Stitcher API.
  static let networkCode = "NETWORK_CODE"
  /// The Google Cloud project using the Video Stitcher API.
  static let projectNumber = "PROJECT_NUMBER"
  /// The Google Cloud region containing your project.
  static let location = "LOCATION"
  /// An OAuth Token created by a Google Cloud account with Video Stitcher API
  /// permissions.
  static let oAuthToken = "OAUTH_TOKEN"
  /// Fallback URL in case something goes wrong in loading the stream. If all goes well, this will
  /// not be used.
  static let backupStreamURLString = """
    http://googleimadev-vh.akamaihd.net/i/big_buck_bunny/\
    bbb-,480p,720p,1080p,.mov.csmil/master.m3u8
    """
  ...
  func requestStream() {
    // Create an ad display container for ad rendering.
    adDisplayContainer = IMAAdDisplayContainer(
      adContainer: videoView,
      viewController: self,
      companionSlots: nil)
    // Create an IMAAVPlayerVideoDisplay to give the SDK access to your video player.
    let imaVideoDisplay = IMAAVPlayerVideoDisplay(avPlayer: contentPlayer!)
    // Create a VOD stream request.
    let streamRequest = IMAVideoStitcherVODStreamRequest(
      VODConfigID: ViewController.vodConfigID,
      region: ViewController.location,
      projectNumber: ViewController.projectNumber,
      oAuthToken: ViewController.oAuthToken,
      networkCode: ViewController.networkCode,
      adDisplayContainer: adDisplayContainer!,
      videoDisplay: imaVideoDisplay,
      userContext: nil,
      videoStitcherSessionOptions: nil)
    adsLoader?.requestStream(with: streamRequest)
  }
  ...
Execute o projeto e, em seguida, pode pedir e ver a sua stream de VOD personalizada.
(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 IMAVideoStitcherVODStreamRequest.
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
 IMAVideoStitcherVODStreamRequest *streamRequest =
     [[IMAVideoStitcherVODStreamRequest alloc] initWithVODConfigID:kVODConfigID
                                                           region:kLocation
                                                     projectNumber:kProjectNumber
                                                       OAuthToken:kOAuthToken
                                                       networkCode:kNetworkCode
                                               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 = IMAVideoStitcherVODStreamRequest(
   vodConfigID:ViewController.vodConfigID
   region:ViewController.location
   projectNumber:ViewController.projectNumber
   OAuthToken:ViewController.oAuthToken
   networkCode:ViewController.networkCode
   adDisplayContainer:adDisplayContainer
   videoDisplay:imaVideoDisplay
   userContext:nil
   videoStitcherSessionOptions:sessionOptions)
 adsLoader?.requestStream(with: streamRequest)
Limpar
Agora que alojou com êxito uma stream VOD 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 VOD para remover recursos e recursos multimédia desnecessários.