Cómo comenzar a usar el SDK de IMA de DAI

Seleccione la solución de DAI que le interesa

DAI de publicación de grupos de anuncios

Los SDK de IMA simplifican la integración de anuncios multimedia en tus sitios web y aplicaciones.

Los SDK de IMA pueden solicitar anuncios de cualquier servidor de anuncios compatible con VAST y administrar la reproducción de anuncios en tus apps.

Con los SDK de IMA de DAI, las apps realizan una solicitud de transmisión de anuncios y videos de contenido para VOD o contenido en vivo. Luego, el SDK muestra una transmisión de video por Internet combinada para que no tengas que administrar el cambio entre el anuncio y el video de contenido dentro de tu app.

En esta guía, se muestra cómo reproducir una transmisión de Publicación de Pods de DAI en vivo con el SDK de IMA de DAI para CAF.

Antes de usar esta guía, familiarízate con el protocolo del receptor web del framework de la aplicación de Chromecast. En esta guía, se da por sentado que tienes conocimientos básicos de los conceptos del receptor de CAF, como interceptores de mensajes y objetos de mediaInformation, y que estás familiarizado con el uso de la herramienta Cast Command and Control para emular un remitente de CAF.

Para usar la publicación de grupos de anuncios de DAI de IMA, debes trabajar con un socio de publicación de grupos de anuncios y tener una cuenta de Ad Manager 360 Advanced. Si tienes una cuenta de Ad Manager, comunícate con tu administrador de cuentas para obtener más detalles. Para obtener información sobre cómo registrarte en Ad Manager, visita el Centro de ayuda de Ad Manager.

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

Descripción general de la Publicación de grupos de anuncios de DAI de IMA

La implementación de la publicación de grupos con el SDK de DAI de IMA CAF implica dos componentes principales, que se muestran en esta guía:

  • StreamRequest: Es un objeto que define una solicitud de transmisión para los servidores de publicidad de Google. Las solicitudes especifican un código de red, una clave de recurso personalizada y una clave de API opcional, así como otros parámetros opcionales.
  • StreamManager: Es un objeto que controla la comunicación entre la transmisión de video por Internet y el SDK de DAI de IMA, como activar pings de seguimiento y reenviar eventos de transmisión al publicador.

Requisitos previos

Cómo configurar los objetos MediaInfo del remitente

Primero, configura el objeto MediaInfo de la app emisora para incluir los siguientes campos:

Técnica Contenido
contentId Es un identificador único para este elemento multimedia.

CONTENT_ID

contentUrl Opcional. URL de la transmisión de copia de seguridad para reproducir si no se puede cargar la transmisión de DAI.

BACKUP_STREAM_URL

contentType Opcional. Es el tipo MIME de las transmisiones de copias de seguridad de contenido. Solo es necesario para las transmisiones DASH.

CONTENT_STREAM_MIMETYPE

streamType El literal de string o la constante que se usa para este valor varía según la plataforma del remitente.
customData El campo customData contiene un almacén de pares clave-valor de campos obligatorios adicionales.
Técnica Contenido
manifestUrl Es la URL de transmisión de video por Internet que proporciona tu manipulador de manifiestos o un socio externo. Debería requerir que insertes el ID de transmisión proporcionado por el SDK de IMA de DAI antes de realizar una solicitud. En esta muestra, la URL del manifiesto incluye un marcador de posición, [[STREAMID]], que se reemplaza por el ID de transmisión antes de realizar una solicitud.

MANIFEST_URL

networkCode Es el código de red de tu cuenta de Google Ad Manager 360.

NETWORK_CODE

customAssetKey La clave del recurso personalizada que identifica el evento de publicación de Pods en Google Ad Manager 360. En algunos casos, puedes obtener esto del manipulador de manifiestos o de un socio externo de entrega de Pods.

CUSTOM_ASSET_KEY

apiKey Una clave de API opcional para recuperar un ID de flujo desde el SDK de DAI de IMA.

API_KEY

A continuación, se muestran algunas muestras de código que te ayudarán a comenzar:

Web

Para configurar estos valores en una herramienta de transmisión web de Cast, primero crea un objeto MediaInfo con los datos requeridos y, luego, realiza una solicitud de carga al receptor web.

// Create mediaInfo object
const mediaInfo = new chrome.cast.media.MediaInfo("CONTENT_ID");
mediaInfo.contentUrl = "BACKUP_STREAM_URL";
mediaInfo.contentType = "CONTENT_STREAM_MIMETYPE";
mediaInfo.streamType = chrome.cast.media.StreamType.LIVE;
mediaInfo.customData = {
manifestUrl: "MANIFEST_URL",
networkCode: "NETWORK-CODE",
customAssetKey: "CUSTOM_ASSET_KEY",
apiKey: "API_KEY"
};

// Make load request to cast web receiver
const castSession = cast.framework.CastContext.getInstance().getCurrentSession();
const request = new chrome.cast.media.LoadRequest(mediaInfo);
castSession.loadMedia(request).then(
  () => { console.log('Load succeed'); },
  (errorCode) => { console.log('Error code: ' + errorCode); });

Android

Para configurar estos valores en un remitente web de Cast, primero crea un objeto MediaInfo con los datos requeridos y, luego, realiza una solicitud de carga al receptor web.

JSONObject customData = new JSONObject()?
  .put("manifestUrl", "MANIFEST_URL")
  .put("networkCode", "NETWORK-CODE")
  .put("customAssetKey", "CUSTOM_ASSET_KEY")
  .put("apiKey", "API_KEY");
MediaInfo mediaInfo = MediaInfo.Builder("CONTENT_ID")
  .setContentUrl("BACKUP_STREAM_URL")
  .setContentType("CONTENT_STREAM_MIMETYPE")
  .setStreamType(MediaInfo.STREAM_TYPE_LIVE)
  .setCustomData(customData)
  .build();

RemoteMediaClient remoteMediaClient = mCastSession.getRemoteMediaClient();
remoteMediaClient.load(new MediaLoadRequestData.Builder().setMediaInfo(mediaInfo).build());

iOS (Obj-C)

Para configurar estos valores en una herramienta de transmisión web de Cast, primero crea un objeto GCKMediaInformation con los datos requeridos y, luego, realiza una solicitud de carga al receptor web.

NSURL url = [NSURL URLWithString:@"BACKUP_STREAM_URL"];
NSDictionary *customData = @{
  @"manifestUrl": @"MANIFEST_URL",
  @"networkCode": @"NETWORK-CODE",
  @"customAssetKey": @"CUSTOM_ASSET_KEY",
  @"apiKey": @"API_KEY"};
mediaInfoBuilder.customData = customData;

GCKMediaInformationBuilder *mediaInfoBuilder =
  [[GCKMediaInformationBuilder alloc] initWithContentID: @"CONTENT_ID"];
mediaInfoBuilder.contentURL = url;
mediaInfoBuilder.contentType = @"CONTENT_STREAM_MIMETYPE";
mediaInfoBuilder.streamType = GCKMediaStreamTypeLive;
mediaInfoBuilder.customData = customData;
self.mediaInformation = [mediaInfoBuilder build];

GCKRequest *request = [self.sessionManager.currentSession.remoteMediaClient loadMedia:self.mediaInformation];
if (request != nil) {
  request.delegate = self;
}

iOS (Swift)

Para configurar estos valores en una herramienta de transmisión web de Cast, primero crea un objeto GCKMediaInformation con los datos requeridos y, luego, realiza una solicitud de carga al receptor web.

let url = URL.init(string: "BACKUP_STREAM_URL")
guard let mediaURL = url else {
  print("invalid mediaURL")
  return
}

let customData = [
  "liveConfigID": "MANIFEST_URL",
  "networkCode": "NETWORK-CODE",
  "customAssetKey": "CUSTOM_ASSET_KEY",
  "region": "API_KEY"
]

let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentId: "CONTENT_ID")
mediaInfoBuilder.contentURL = mediaUrl
mediaInfoBuilder.contentType = @"CONTENT_STREAM_MIMETYPE"
mediaInfoBuilder.streamType = GCKMediaStreamType.Live
mediaInfoBuilder.customData = customData
mediaInformation = mediaInfoBuilder.build()

guard let mediaInfo = mediaInformation else {
  print("invalid mediaInformation")
  return
}

if let request = sessionManager.currentSession?.remoteMediaClient?.loadMedia
(mediaInfo) {
  request.delegate = self
}

Herramienta CAC

Para configurar estos valores en la herramienta Cast Command and Control, haz clic en la pestaña Cargar medios y configura el tipo de solicitud de carga personalizada como CARGAR. Luego, reemplaza los datos JSON en el área de texto por este JSON:

{
  "media": {
    "contentId": "CONTENT_ID",
    "contentUrl": "BACKUP_STREAM_URL",
    "contentType": ""CONTENT_STREAM_MIMETYPE"",
    "streamType": "LIVE",
    "customData": {
      "liveConfigID": "MANIFEST_URL",
      "networkCode": "NETWORK-CODE",
      "customAssetKey": "CUSTOM_ASSET_KEY",
      "oAuthToken": "API_KEY"
    }
  }
}

Esta solicitud de carga personalizada se puede enviar al receptor para probar el resto de los pasos.

Crea un receptor de CAF básico

Crea un receptor web personalizado, como se muestra en la Guía de receptores web personalizados del SDK de CAF.

El código del receptor debería verse de la siguiente manera:

<html>
<head>
  <script
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js">
  </script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    // ...
  </script>
</body>
</html>

Importe el SDK de IMA de DAI y obtenga el Administrador del reproductor

Agrega una etiqueta de secuencia de comandos para importar el SDK de IMA de DAI para CAF a tu receptor web, justo después de cargar el CAF de la secuencia de comandos. En la etiqueta de la secuencia de comandos, almacena el contexto del receptor y el administrador del jugador como constantes antes de iniciar el receptor.

<html>
<head>
  <script
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();

    castContext.start();
  </script>
</body>
</html>

Cómo inicializar el Administrador de transmisiones de IMA

Inicialice el Administrador de transmisiones de IMA.

<html>
<head>
  <script type="text/javascript"
      src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
  <script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
  <cast-media-player></cast-media-player>
  <script>
    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();
    const streamManager = new google.ima.cast.dai.api.StreamManager();

    castContext.start();
  </script>
</body>
</html>

Crea el interceptor de carga del administrador de transmisiones

Antes de que tus elementos multimedia se pasen a CAF, crea la solicitud de transmisión en un interceptor de mensajes CARGAR.

    const castContext = cast.framework.CastReceiverContext.getInstance();
    const playerManager = castContext.getPlayerManager();
    const streamManager = new google.ima.cast.dai.api.StreamManager();

    /**
     * Creates a livestream request object for a pod serving stream.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {StreamRequest} an IMA stream request
     */
    const createStreamRequest = (castRequest) => { /* ... */};

    /**
     * Initates a DAI stream request for the final stream manifest.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {Promise<LoadRequestData>} a promise that resolves to an updated castRequest, containing the DAI stream manifest
     */
    const createDAICastRequest = (castRequest) => {
        return streamManager.requestStream(castRequest, createStreamRequest(castRequest))
          .then((castRequestWithPodStreamData) => {
            console.log('Successfully made DAI stream request.');
            // ...
            return castRequestWithPodStreamData;
          })
          .catch((error) => {
            console.log('Failed to make DAI stream request.');
            // CAF will automatically fallback to the content URL
            // that it can read from the castRequest object.
            return castRequest;
          });
    };

    playerManager.setMessageInterceptor(
        cast.framework.messages.MessageType.LOAD, createDAICastRequest);

    castContext.start();

Crea la solicitud de transmisión

Completa la función createStreamRequest para crear un flujo de entrega de Pods basado en la solicitud de carga de CAF.

    /**
     * Creates a livestream request object for a pod serving stream.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {StreamRequest} an IMA stream request
     */
    const createStreamRequest = (castRequest) => {

      const streamRequest = new google.ima.cast.dai.api.PodStreamRequest();
      const customData = castRequest.media.customData;

      streamRequest.customAssetKey = customData.customAssetKey;
      streamRequest.networkCode = customData.networkCode;
      streamRequest.apiKey = customData.apiKey;

      return streamRequest;
    };

Reemplaza la URL de contenido por la URL del manifiesto y el ID de transmisión

Si tu solicitud de transmisión se realiza correctamente, usa streamManager.getStreamId() para recuperar el ID de la transmisión y, luego, insertarlo en tu manifestUrl y reemplazar a [[STREAMID]]. Luego, reemplaza el contentUrl existente por el nuevo manifestUrl para que CAF reproduzca la transmisión en vivo con los pods de anuncios unidos.

    /**
     * Initates a DAI stream request for the final stream manifest.
     * @param {!LoadRequestData} castRequest The request object from the cast sender
     * @return {Promise<LoadRequestData>} a promise that resolves to an updated castRequest, containing the DAI stream manifest
     */
    const createDAICastRequest = (castRequest) => {
        return streamManager.requestStream(castRequest, createStreamRequest(castRequest))
          .then((castRequestWithPodStreamData) => {
            console.log('Successfully made DAI stream request.');
            const media = castRequestWithPodStreamData.media;
                const manifestUrl = media.customData.manifestUrl || "";
                if (manifestUrl) {
                    console.log('Replacing the contentURL with the manifest URL and stream ID');
                    const streamId = streamManager.getStreamId();
                    castRequestWithPodStreamData.media.contentUrl = manifestUrl.replace('[[STREAMID]]', streamId);

            return castRequestWithPodStreamData;
          })
          .catch((error) => {
            console.log('Failed to make DAI stream request.');
            // CAF will automatically fallback to the content URL
            // that it can read from the castRequest object.
            return castRequest;
          });
    };

Ahora puedes solicitar y reproducir transmisiones de entrega de Pods con el framework de aplicación de transmisión y el SDK de DAI de IMA para CAF.