Reproduce 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 IMA DAI para iOS para solicitar y reproducir una transmisión en vivo de un evento registrado con la API de Video Stitcher de Google Cloud, y cómo insertar una pausa publicitaria durante la reproducción.
Esta guía amplía el ejemplo básico de la guía de introducción a IMA DAI.
Si quieres obtener información para realizar la integración con otras plataformas o usar los SDK de IMA del cliente, consulta SDKs de Interactive Media Ads.
Si quieres ver o seguir una integración de muestra completa, descarga el ejemplo de la Herramienta de unión de videos de Cloud 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 en vivo:
LOCATION - Número del proyecto
- El número del 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 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 vencido.
- Código de red
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 tu evento de transmisión en vivo:
LIVE_CONFIG_ID - Clave del activo personalizada
- La clave del activo personalizada de Ad Manager que se generó durante el proceso de creación de una
configuración para un evento de transmisión en vivo
con la API de Video Stitcher:
CUSTOM_ASSET_KEY
- Contexto del usuario
- El contexto del usuario para el seguimiento de solicitudes. Puede ser
nil. El valor predeterminado esnilen esta guía.
Descarga y prepara el ejemplo básico
Descarga los ejemplos de IMA DAI para iOS y extrae el ejemplo básico en una carpeta nueva. Este ejemplo es un proyecto de Xcode que depende de Cocoapods para cargar el SDK de IMA.
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 en vivo
Para reemplazar la transmisión de muestra por tu transmisión en vivo, debes usar la clase IMAVideoStitcherLiveStreamRequest que crea automáticamente una sesión de anuncios con Google Ad Manager. Puedes usar la IU de Google Ad Manager para ubicar
las sesiones de DAI generadas con
fines de 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 Video Stitcher de Google Cloud, deberás reemplazar la función requestStream actual por una que use la clase 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) Agrega opciones de sesión de transmisión
Personaliza tu solicitud de transmisión agregando opciones de sesión para anular la configuración predeterminada
de la API de Video Stitcher de Cloud propagando el
videoStitcherSessionOptions
parámetro en tu
IMAVideoStitcherLiveStreamRequest.
Si proporcionas una opción no reconocida, la API de Video Stitcher de Cloud 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
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)
Ejecuta el proyecto y, luego, podrás solicitar y reproducir tu transmisión en vivo personalizada.
Inserta una pausa publicitaria
La API de Video Stitcher de Google Cloud 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 transmisión en vivo inserta los marcadores de anuncios.
Si usas tu propia transmisión en vivo, debes insertar el marcador de anuncios. Para obtener más información sobre los marcadores de anuncios de HLS y DASH admitidos, consulta la documentación de marcadores de anuncios.
Si creaste una transmisión en vivo con la API de Livestream de Google Cloud, inserta un evento de canal de pausa publicitaria.
El anuncio se reproduce inmediatamente después de que se inserta la pausa publicitaria.
Limpia
Ahora que alojaste correctamente una transmisión en vivo con la API de Video Stitcher de Google Cloud y la solicitaste con el SDK de IMA DAI para iOS, es importante limpiar todos los recursos de publicación.
Sigue la guía de limpieza de transmisiones en vivo para quitar los recursos y activos innecesarios.