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

Selecciona la solución de DAI que te interesa

DAI de publicación de grupos de anuncios

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

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

Con los SDK de DAI de IMA, las aplicaciones realizan una solicitud de transmisión de anuncios y videos de contenido para ya sea VOD o contenido en vivo. Luego, el SDK devuelve una transmisión de video por Internet combinada, que no tiene que administrar el cambio entre los anuncios y los videos de contenido en sus .

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

Antes de usar esta guía, familiarízate con el Receptor web del framework de la aplicación de Chromecast protocolo. En esta guía, se supone que tienes conocimientos básicos de los conceptos de los receptores de CAF, como, por ejemplo, interceptores de mensajes y mediaInformation los objetos y familiaridad con el uso de la herramienta Comando y control de Cast, para emular un emisor de CAF.

Para usar la publicación de grupos de anuncios de la DAI de IMA, debes trabajar con un socio de entrega de grupos de anuncios debe tener un Ad Manager 360 Advanced de servicio predeterminada. 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 la Centro de ayuda de Ad Manager.

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.

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

La implementación de la entrega de grupos de anuncios con el SDK de DAI para CAF de IMA implica dos componentes principales: que se demuestran en esta guía:

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

Requisitos previos

  • Una cuenta de Play Console con para dispositivos de prueba registrados.
  • Un receptor web alojado App que se registrados en tu Consola para desarrolladores de Cast y que se pueden modificar para alojar el código proporcionado en esta guía.
  • Una app de envío que esté configurada para usar tu app de receptor web Para el para este ejemplo, usa el comando de Comando y control de Cast tool como tu remitente.

Configurar los objetos MediaInfo del remitente

Primero, configura la configuración de la app Objeto MediaInfo incluir los siguientes campos:

Campo Contenido
contentId Es un identificador único para este elemento multimedia.

CONTENT_ID

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

BACKUP_STREAM_URL

contentType Opcional. Tipo MIME de las transmisiones de copias de seguridad de contenido. Solo es necesario para la forma de pago DASH transmisiones continuas.

CONTENT_STREAM_MIMETYPE

streamType El literal de string o la constante que se usa para este valor varía según el remitente plataforma.
customData El campo customData contiene un almacén de pares clave-valor de claves campos obligatorios.
Campo Contenido
manifestUrl La URL de transmisión de video por Internet que proporcionó el manipulador de manifiestos o el tercero socio. Deberían insertarse el ID de transmisión proporcionado por el SDK de IMA de DAI antes de realizar una solicitud. En este ejemplo, la URL del manifiesto incluye un marcador de posición, [[STREAMID]], que se reemplaza por 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 tu evento de publicación de grupos de anuncios en Google Ads Manager 360. En algunos casos, puedes obtener esto del manifiesto manipulador o socio externo de publicación de grupos de anuncios.

CUSTOM_ASSET_KEY

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

API_KEY

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

Web

Para configurar estos valores en un remitente web de transmisión, primero crea un MediaInfo objeto con los datos requeridos, realiza una carga de entrada 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 transmisión, primero crea un Objeto MediaInfo con los datos requeridos y, luego, solicitud de carga a la Web receptor.

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 un remitente web de transmisión, primero crea un GCKMediaInformation objeto con los datos requeridos, realiza una carga de entrada 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 un remitente web de transmisión, primero crea un GCKMediaInformation objeto con los datos requeridos, realiza una carga de entrada 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 el Comando y control de Cast , haz clic en la pestaña Cargar contenido multimedia y configura personalizado tipo de solicitud de carga en LOAD. 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 del pasos.

Cómo crear un receptor CAF básico

Crear un receptor web personalizado, como se ve en el Receptor web personalizado del SDK de CAF guía.

El código de tu 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>

Importa el SDK de IMA de DAI y obtén el Administrador del reproductor

Agregue una etiqueta de secuencia de comandos para importar el SDK de IMA de DAI para CAF a su receptor web. después de que la secuencia de comandos carga el CAF. En la etiqueta de la secuencia de comandos, almacena el contexto del receptor y 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>

Inicializa IMA Stream Manager

Inicializa IMA Stream Manager.

<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 de Stream Manager

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

    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 una transmisión de entrega de grupos de anuncios basada 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 se realiza correctamente la solicitud de transmisión, usa streamManager.getStreamId() para recuperar el ID de la transmisión e insertarlo en la manifestUrl, reemplazando [[STREAMID]] Luego, reemplaza el contentUrl existente por el nuevo. manifestUrl para que el CAF reproduzca la transmisión en vivo con los grupos 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 la aplicación de transmisión y el SDK de DAI de IMA para CAF.