Usa el SDK de DAI de IMA en tvOS

Reproducir transmisiones en vivo registradas con la API de Video Stitcher de Google Cloud

En esta guía, se muestra cómo usar el SDK de DAI de IMA para tvOS para solicitar y reproducir una transmisión en vivo de un evento registrado con la API de Google Cloud Video Stitcher, y cómo insertar una pausa publicitaria durante la reproducción.

En esta guía, se amplía el ejemplo básico de la sección Cómo comenzar guía para la DAI de IMA.

Para obtener información sobre la integración con otras plataformas o el uso de IMA Para obtener más información sobre los SDKs del cliente, consulta SDK de anuncios multimedia interactivos.

Configura un proyecto de Google Cloud

Ingresa las siguientes variables para usarlas en el SDK de IMA:

Ubicación
La región de Google Cloud en la que se creó tu configuración activa: LOCATION
Número del proyecto
El número de proyecto de Google Cloud con la API de Video Stitcher: PROJECT_NUMBER
Token de OAuth

El token de OAuth de corta duración de una cuenta de servicio con el rol de usuario de Video Stitcher:

OAUTH_TOKEN

Obtén más información para crear credenciales de corta duración para cuentas de servicio. El token de OAuth se puede volver a usar en varias solicitudes, siempre que no haya caducado.

Código de red

Este es el código de red de Ad Manager para solicitar anuncios: NETWORK_CODE

ID de configuración en vivo
El ID de configuración en vivo que especificaste cuando creaste el evento de transmisión en vivo: LIVE_CONFIG_ID
Clave del activo personalizado
La clave del recurso personalizado de Ad Manager que se generó durante el proceso de creación de una configuración de un evento de transmisión en vivo con la API de Video Stitcher: CUSTOM_ASSET_KEY

Descarga y prepara el ejemplo básico

Descargue los ejemplos de DAI de IMA para tvOS y extraiga el ejemplo básico en una carpeta nueva. Este ejemplo es un proyecto de Xcode que se basa en Cocoapods para cargar el SDK de IMA.

Para preparar la muestra que se ejecutará, asegúrate de que CocoaPods esté instalada y, luego, abre la carpeta del ejemplo básico en la terminal y ejecuta el siguiente comando:

pod install --repo-update

Una vez que se complete el comando, verás un archivo llamado BasicExample.xcworkspace en la carpeta de tu proyecto. Abre este archivo en Xcode y ejecuta la muestra para asegurarte de que el video de prueba y los anuncios se reproducen como se espera.

Solicitar una transmisión en vivo

Para reemplazar la transmisión de muestra con tu transmisión en vivo, debes usar el IMAVideoStitcherLiveStreamRequest clase que crea un anuncio automáticamente con Google Ad Manager. Puedes usar la IU de Google Ad Manager para ubicar las sesiones de DAI generadas para supervisión y depuración.

En la muestra existente, hay ejemplos para solicitar una transmisión de VOD o una transmisión en vivo desde los servidores de DAI de Google. Para que la muestra funcione con la API de Google Cloud Video Stitcher, deberás reemplazar la función requestStream actual por una que use la clase 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];
}

Agrega opciones de sesión de transmisión (opcional)

Para personalizar tu solicitud de transmisión, agrega opciones de sesión para anular la configuración predeterminada de la API de Cloud Video Stitcher. Para ello, propaga el parámetro videoStitcherSessionOptions en tu IMAVideoStitcherLiveStreamRequest. Si proporcionas una opción no reconocida, la API de Cloud Video Stitcher responderá con un error HTTP 400. Consulta la guía de solución de problemas para obtener asistencia.

Por ejemplo, puedes anular el opciones del manifiesto con el siguiente fragmento de código, que solicita dos manifiestos de transmisión con formatos ordenados de menor a mayor tasa de bits.

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)

Ejecuta el proyecto y, luego, solicita y reproduce tu transmisión en vivo personalizada.

Cómo insertar una pausa publicitaria

La API de Google Cloud Video Stitcher inserta anuncios recuperados de la etiqueta de anuncio para cada pausa publicitaria. Las pausas publicitarias se indican en el manifiesto con marcadores de anuncios. El codificador de la transmisión en vivo inserta los marcadores de anuncios.

El anuncio se reproduce inmediatamente después de que se inserta la pausa publicitaria.

Limpia

Ahora que alojaste con éxito una transmisión en vivo con la API de Google Cloud Video Stitcher y la solicitaste con el SDK de IMA DAI para tvOS, es importante limpiar los recursos de publicación.

Sigue el limpieza de transmisión en vivo para quitar los recursos y recursos innecesarios.