Reproduce transmisiones de VOD registradas con la API de Google Cloud Video Stitcher
En esta guía, se muestra cómo usar el SDK de IMA DAI para iOS para solicitar y reproducir una sesión de transmisión de VOD de Google Cloud.
Esta guía amplía el ejemplo básico de la guía de introducción a IMA DAI.
Para obtener información sobre la integración con otras plataformas o el uso de los SDKs de IMA del cliente, consulta SDKs de anuncios multimedia interactivos.
Si deseas ver o seguir una integración de muestra completa, descarga el ejemplo de Cloud Video Stitcher para Objective-C o Swift.
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 de VOD:
LOCATION - Número del proyecto
- El número de proyecto de Google Cloud que usa 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 tokens de OAuth de corta duración. El token de OAuth se puede volver a usar en varias solicitudes siempre que no haya vencido.
- Código de red
El código de red de Ad Manager para solicitar anuncios:
NETWORK_CODE
- ID de configuración de VOD
El ID de configuración de VOD para la transmisión de VOD:
VOD_CONFIG_IDObtén más información para crear el ID de configuración de VOD en la guía de Cloud Stitching para crear una configuración de VOD.
- Contexto del usuario
- El contexto del usuario para el seguimiento de solicitudes. Puede ser
nil. El valor predeterminado esnilen esta guía.
Configura el ejemplo básico
Ve a la página de lanzamiento de IMA iOS DAI en GitHub
y descarga el
ejemplo básico de Objective-C. Este ejemplo es un proyecto de Xcode para iOS que se basa en Cocoapods para cargar el SDK de IMA DAI. Si usas Swift, IMA no tiene una app de ejemplo para iOS, pero consulta el fragmento de código de Swift más adelante en esta guía para saber cómo implementar un IMAVideoStitcherVODStreamRequest en tu propia app.
Para preparar la muestra para que se ejecute, asegúrate de que CocoaPods esté instalado, luego abre la carpeta del ejemplo básico en la terminal y ejecuta el siguiente comando:
pod install --repo-updateUna vez que se complete ese 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 y los anuncios de prueba se reproduzcan según lo previsto.
Solicita una transmisión de VOD
Para reemplazar la transmisión de muestra por tu transmisión de VOD con anuncios intercalados, usa
IMAVideoStitcherVODStreamRequest
para crear una sesión de anuncios con Google Ad Manager. Puedes usar la IU de Google Ad
Manager para ubicar las sesiones de DAI generadas para la supervisión y la 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 funcione con la API de Google Cloud Video Stitcher, debes reemplazar la función requestStream actual por una que use la clase IMAVideoStitcherVODStreamRequest.
Por ejemplo:
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)
}
...
Ejecuta el proyecto y, luego, podrás solicitar y reproducir tu transmisión de VOD personalizada.
Agrega opciones de sesión de transmisión (opcional)
Personaliza tu solicitud de transmisión. Para ello, agrega opciones de sesión para anular la configuración predeterminada
de la API de Cloud Video Stitcher propagando el
videoStitcherSessionOptions
parámetro en tu
IMAVideoStitcherVODStreamRequest.
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 las opciones de manifiesto con el siguiente fragmento de código, que solicita dos manifiestos de transmisión con representaciones ordenadas de la tasa de bits más baja a la más 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)
Limpia
Ahora que alojaste correctamente una transmisión de VOD con la API de Google Cloud Video Stitcher y la solicitaste con el SDK de IMA DAI para iOS, es importante limpiar todos los recursos de publicación.
Sigue la guía para liberar espacio de VOD para quitar los recursos y los elementos que no sean necesarios.