En esta guía, se muestra cómo reproducir una transmisión en vivo o de VOD de publicación de grupos de anuncios de DAI con el SDK de IMA para DAI para tvOS con un reproductor de video. Para ver o seguir una integración de ejemplo completa, descarga la app de ejemplo de Publicación de grupos de anuncios (Obj C o Swift).
Descripción general de la Publicación de grupos de anuncios de IMA para DAI
La implementación de la Publicación de grupos de anuncios con el SDK de IMA para DAI para tvOS implica dos componentes principales:
StreamRequest: Es un objeto que define una solicitud de transmisión a los servidores de publicidad de Google. Se debe crear conIMAPodStreamRequestoIMAPodVODStreamRequestpara habilitar la publicación de grupos de anuncios. Ambos métodos requieren un código de red, yIMAPodStreamRequesttambién necesita una clave de recurso personalizada. La clave de API es opcional.IMAStreamManager: Es un objeto que controla la comunicación entre la transmisión de video y el SDK de IMA para DAI, como activar pings de seguimiento y reenviar eventos de transmisión al publicador.
Requisitos previos
Antes de comenzar, necesitas lo siguiente:
- Xcode 13 o una versión posterior
- Método para instalar el SDK de IMA:
- Swift Package Manager (preferido)
- Una copia descargada del SDK de IMA para tvOS
- Una app para tvOS ya configurada con el SDK de IMA para DAI para reproducir transmisiones de video con anuncios de DAI Si aún no tienes una app de este tipo, te recomendamos que uses el BasicExample de DAI para tvOS como punto de partida. BasicExample tiene la base de código a la que se hace referencia en esta guía. Para obtener más información sobre cómo implementar el SDK de IMA para DAI, consulta la guía de inicio rápido.
Configura tus variables de Publicación de grupos de anuncios
Realiza todos los cambios para la publicación de anuncios de Pod en ViewController.swift en
Swift o ViewController.m en Objective-C. Los fragmentos de esta guía usan el lenguaje Swift de forma predeterminada. El primer paso es actualizar las
variables constantes.
Agrega las siguientes constantes de solicitud de transmisión de grupos de anuncios:
STREAM_URL(Solo se usa para transmisiones en vivo): Es la URL de transmisión de video que proporciona tu manipulador de manifiestos o socio externo que usa la publicación de grupos de anuncios. Debería requerir que insertes el ID de transmisión que proporciona el SDK de IMA para DAI antes de realizar una solicitud. En este caso, la URL de transmisión incluye un marcador de posición,"[[STREAMID]]", que reemplazas por el ID de transmisión antes de realizar una solicitud.NETWORK_CODE: Es el código de red de tu cuenta de Ad Manager 360.CUSTOM_ASSET_KEY(Solo se usa para transmisiones en vivo): Es la clave de recurso personalizada que identifica tu evento de publicación de grupos de anuncios en Ad Manager 360. Tu manipulador de manifiestos o socio externo de Publicación de grupos de anuncios puede crearlo.API_KEY(Solo se usa para transmisiones en vivo): Es una clave de API opcional que puede ser necesaria para recuperar un ID de transmisión del SDK de IMA para DAI.
Cambia la sección de variables del ejemplo para que coincida con lo siguiente:
...
class ViewController:
UIViewController,
IMAAdsLoaderDelegate,
IMAStreamManagerDelegate,
AVPlayerViewControllerDelegate
{
static let streamUrl = ""
static let networkCode = ""
static let customAssetKey = ""
static let APIKey = ""
static let backupStreamURLString = ""
var adsLoader: IMAAdsLoader?
...
Crea una solicitud de transmisión de grupo de anuncios en vivo o de VOD
Publicación de anuncios en grupos de anuncios de transmisiones en vivo
Modifica el método requestStream para crear una solicitud de transmisión de Pod en vivo creando una instancia de IMAPodStreamRequest.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodStreamRequest(
networkCode: self.networkCode,
customAssetKey: self.customAssetKey,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
Publicación de grupos de anuncios de transmisiones de VOD
Modifica el método requestStream para crear una solicitud de transmisión de Pod de VOD creando una instancia de IMAPodVODStreamRequest.
...
func requestStream() {
guard let playerViewController = self.playerViewController else return
guard let adContainerView = self.adContainerView else return
guard let adsLoader = self.adsLoader else return
self.videoDisplay = IMAAVPlayerVideoDisplay(avPlayer: playerViewController.player)
adDisplayContainer = IMAAdDisplayContainer(
adContainer: adContainerView, viewController: self)
// Create a podserving stream request.
request = IMAPodVODStreamRequest(
networkCode: self.networkCode,
adDisplayContainer: adDisplayContainer,
videoDisplay: self.videoDisplay,
userContext: nil)
adsLoader.requestStream(with: request)
}
...
Edita y configura la URL de transmisión
Publicación de anuncios en grupos de anuncios de transmisiones en vivo
Modifica los métodos IMAAdsLoaderDelegate con streamManager.streamId para obtener el ID de transmisión. Luego, inserta el ID del flujo en STREAM_URL y reemplaza
"[[STREAMID]]". Después de realizar este cambio, configura la nueva URL de transmisión con videoDisplay.loadStream().
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
let urlString = streamUrl.replacingOccurrences(of: "[[STREAMID]]", with: streamId)
let loadedStreamUrl = URL(string:urlString)
self.videoDisplay.loadStream(loadedStreamUrl, subtitles:@[])
self.videoDisplay.play()
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
...
Publicación de grupos de anuncios de transmisiones de VOD
Modifica los métodos IMAAdsLoaderDelegate con streamManager.streamId para obtener el ID de transmisión. Luego, solicita una URL de transmisión a tu socio de tecnología de video (VTP) y llama a IMAStreamManager.loadThirdPartyStream() para que IMA cargue la URL de transmisión y los subtítulos que devuelva tu TVP.
...
// MARK: - IMAAdsLoaderDelegate
func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) {
let streamManager = adsLoadedData.streamManager
let streamId = streamManager.streamId
// 'vtpInterface' is a place holder for your own video technology partner
// (VTP) API calls.
let streamUrl = vtpInterface.requestStreamURL(streamID)
self.streamManager.loadThirdPartyStream(streamUrl, streamSubtitles:@[])
streamManager.delegate = self
streamManager.initialize(with: nil)
self.streamManager = streamManager
}
Cómo limpiar los recursos de IMA para DAI
Cuando hayas terminado de solicitar y mostrar anuncios en un flujo de publicación de grupos de anuncios con el SDK de IMA para DAI, te sugerimos que limpies los recursos después de que se complete la sesión de publicación de grupos de anuncios. Llama a IMAStreamManager.destroy() para detener la reproducción de la transmisión, detener todo el seguimiento de anuncios y liberar todos los recursos de transmisión cargados.
Para ver otros ejemplos del uso del SDK de tvOS, consulta los ejemplos en GitHub.