Pausas publicitarias

Descripción general

El SDK de receptor web cuenta con compatibilidad nativa para pausas publicitarias y anuncios complementarios en una transmisión de contenido multimedia determinada. Proporciona API para establecer la posición y la fuente del anuncio, el comportamiento de las pausas publicitarias y sus clips de pausas asociados. En esta guía, un Break hace referencia a un intervalo de reproducción que contiene uno o más anuncios o anuncios bumper. Cada anuncio o anuncio bumper se denomina BreakClip. Estas pausas están asociadas al contenido multimedia que se está cargando o reproduciendo.

Tipos de anuncios

El SDK de receptor web admite la inserción de anuncios del lado del cliente (CSAI) y la inserción de anuncios unidos del servidor (SSAI). La aplicación puede unir de forma manual los anuncios unidos o se pueden extraer de los archivos de plantilla VAST y VMAP. Los anuncios unidos al servidor deben especificarse de forma manual antes de que el contenido se cargue como anuncios incorporados, o bien de forma dinámica durante la reproducción de contenido como anuncios integrados expandidos. Las implementaciones para cada uno de estos tipos de anuncios se describen en detalle a continuación.

unión manual del cliente

La pausa publicitaria manual unida al cliente es un tipo de pausa publicitaria que el cliente une y que la aplicación especifica con las API del SDK de forma manual. Este tipo de anuncio no está incorporado en la transmisión del contenido principal. El BreakClip debe proporcionar el contentId, que es una URL que apunta al contenido del anuncio, el contentType que describe el formato del contenido del anuncio y el title.

Break debe tener isEmbedded y expanded establecidos en el valor predeterminado false. El position se puede configurar en una pausa publicitaria del anuncio previo al video, del anuncio durante el video o del anuncio final del video (obtén más información en la sección de posicionamiento de la pausa). Cuando preparas el anuncio para reproducirlo, el SDK de receptor web genera otra instancia de reproductor a fin de cargar y reproducir el contenido del anuncio. Estas pausas requieren una stitched timeline y deben agregarse de forma estática (obtén más información en la sección Inserción de anuncios). En el siguiente ejemplo, se muestra una implementación básica de un anuncio manual unido por el cliente:

// Create the BreakClip.
let clipClient = new cast.framework.messages.BreakClip('bc_client');
clipClient.title = 'The Ad Title to be displayed during playback';
clipClient.contentId = 'https://example.com/ad.m3u8';
clipClient.contentType = 'application/vnd.apple.mpegurl';

// Optional: Used when HLS ad container formats differ from the main content's.
clipClient.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.FMP4;

// Create the Break using the BreakClip id above.
let breakPostrollClient = new cast.framework.messages.Break(
    'break_postroll_client', ['bc_client'], -1);
breakPostrollClient.isEmbedded = false; // Optional: default is false.
breakPostrollClient.expanded = false; // Optional: default is false.

VAST

El SDK de recepción web admite la adición de anuncios VAST (plantilla de publicación de anuncios de video) estándar de IAB. Cuando se proporciona, la plantilla XML se analiza para generar un clip de pausa posterior unido por el cliente al ingresar la pausa.

Para crear un anuncio de VAST, la app receptora debe crear una VastAdsRequest y especificarla en la propiedad BreakClip vastAdsRequest. El objeto VastAdsRequest debe tener definida la propiedad adsResponse (una representación de string de la propia plantilla XML) o adTagUrl (la URL en la que se aloja la plantilla XML). Si se especifica la URL, el SDK se encargará de recuperar la plantilla. El encapsulamiento de Break sigue las convenciones para anuncios unidos por el cliente. Estos anuncios se pueden agregar junto con otros anuncios unidos manualmente por el cliente en la misma pausa o en pausas separadas para el mismo contenido. En el siguiente ejemplo, se muestra una implementación básica de un anuncio de VAST:

// Create the VastAdsRequest.
let vastTemplate = new cast.framework.messages.VastAdsRequest();
vastTemplate.adTagUrl = 'https://example.com/ads.xml'

// Create the BreakClip.
let clipVast = new cast.framework.messages.BreakClip('bc_vast');
clipVast.vastAdsRequest = vastTemplate;

// Create the Break using the BreakClip id above.
let breakPostrollVast = new cast.framework.messages.Break(
    'break_postroll_vast', ['bc_vast'], -1);
breakPostrollVast.isEmbedded = false; // Optional: default is false.
breakPostrollVast.expanded = false; // Optional: default is false.

Cuando se ingresa un Break que contiene un BreakClip de VAST, el SDK del receptor web tiene la opción de recuperar y, luego, analizar la plantilla. Durante el análisis, el SDK generará un BreakClip nuevo y lo propagará con los valores extraídos de la plantilla, como contentId, contentType, title, duration, whenSkippable y clickThroughUrl. El id del clip de pausa generado se establece en GENERATED:N, en el que N es un número entero que aumenta en 1 para cada clip de pausa VAST nuevo creado a partir de 0. Luego, se agrega el anuncio generado al array BreakClip. Cada id de clip de pausa de VAST en el Break actual se reemplaza por el id del clip de pausa generado correspondiente. Los siguientes fragmentos ilustran los cambios en los mensajes MEDIA_STATUS que se relacionan con los anuncios antes y después de ingresar una pausa de ese tipo.

Información de Break y de BreakClip antes de ingresar una pausa con los anuncios de VAST

"breaks": [
  {
    "id": "break_postroll_vast",
    "breakClipIds": [
      "bc_vast"
    ],
    "position": 0,
    "isWatched": false
  }
],
"breakClips": [
  {
    "id": "bc_vast"
  }
]

Información de Break y BreakClip después de ingresar una pausa con los anuncios de VAST.

"breaks": [
  {
    "id": "break_postroll_vast",
    "breakClipIds": [
      "GENERATED:0"
    ],
    "position": 0,
    "isWatched": true
  }
],
"breakClips": [
  {
    "id": "bc_vast"
  },
  {
    "id": "GENERATED:0",
    "contentId": "https://example.com/break-clip-1.mpd",
    "contentType": "application/dash+xml",
    "title": "Ad Title Extracted from Template",
    "duration": 10,
    "whenSkippable": 5,
    "clickThroughUrl": "https://example.com/ad-target"
  }
]

VMAP

El SDK de receptor web admite el estándar VMAP (listas de reproducción de varios videos) de IAB. Cuando se proporciona una VMAP, el SDK de Web Receptor analizará la respuesta de VMAP y generará objetos Break unidos para cualquier entrada <AdBreak> en la respuesta. También generará el BreakClips adecuado con un objeto vastAdsRequest para cada entrada <AdSource> proporcionada en la VMAP. A fin de habilitar VMAP para insertar anuncios en tu contenido, la aplicación debe crear un objeto VastAdsRequest y asignarlo a la propiedad vmapAdsRequest de MediaInformation en LoadRequestData. Estos anuncios deben insertarse de forma estática (obtén más información en la sección Inserción de anuncios). A continuación, se muestra un fragmento que describe la creación de una solicitud de VMAP.

// Create the VastAdsRequest.
let vastTemplate = new cast.framework.messages.VastAdsRequest();
vastTemplate.adTagUrl = 'https://example.com/vmap.xml'

// Add it to the MediaInformation of the LoadRequest.
loadRequestData.media.vmapAdsRequest = vastTemplate;

incorporado

La pausa publicitaria incorporada es un tipo de pausa publicitaria que se une del lado del flujo principal del contenido. La duración de Break se resta de la duración del contenido principal cuando se calcula el tiempo multimedia.

El BreakClip debe proporcionar el duration del contenido del anuncio y el title. Break debe tener isEmbedded configurado como true y expanded configurado como false. El position se puede establecer como una pausa publicitaria de anuncio previo al video o anuncio durante el video. Las pausas publicitarias de anuncio al final del video son compatibles con valores position exactos exactos. Obtén más información al respecto en la sección posicionamiento de pausas. Cuando se activa la reproducción del anuncio, el SDK de Web Receiver continúa con la reproducción de la transmisión mientras los segmentos de anuncios están incorporados en ella. No hay ningún mecanismo de carga adicional para este tipo de anuncio. Los metadatos de anuncios relevantes se muestran al usuario una vez que el cabezal de reproducción se encuentra dentro del intervalo de tiempo de pausa. Estas pausas requieren una embedded timeline y deben agregarse de forma estática (obtén más información en la sección Inserción de anuncios). En el siguiente ejemplo, se muestra la implementación básica de un anuncio embedded.

// Create the BreakClip.
let clipEmbedded = new cast.framework.messages.BreakClip('bc_embedded');
clipEmbedded.title = 'The Ad Title to be displayed during playback';
clipEmbedded.duration = 15;

// Create the Break using the BreakClip id above.
let breakPrerollEmbedded = new cast.framework.messages.Break(
    'break_preroll_embedded', ['bc_embedded'], 0);
breakPrerollEmbedded.isEmbedded = true;
breakPrerollEmbedded.expanded = false; // Optional: default is false.

expandido incorporado

La pausa publicitaria integrada incorporada es un tipo de pausa publicitaria que se une del servidor a la transmisión del contenido principal. La duración del objeto Break se incluye en la del contenido principal cuando se calcula el tiempo multimedia.

El BreakClip debe proporcionar el duration del contenido del anuncio y el title. El Break debe tener el isEmbedded configurado en true y el expanded establecido en true. El position se puede establecer como una pausa publicitaria de anuncio previo al video o anuncio durante el video. Las pausas publicitarias de anuncio final del video son compatibles con los valores positivos de position. Obtén más información al respecto en la sección posicionamiento de pausas. Cuando se activa la reproducción del anuncio, el SDK de Web Receiver continúa con la reproducción de la transmisión mientras los segmentos de anuncios están incorporados en ella. No hay ningún mecanismo de carga adicional para este tipo de anuncio. Los metadatos de anuncios relevantes se muestran al usuario una vez que el cabezal de reproducción se encuentra dentro del intervalo de tiempo de pausa. Estas pausas requieren un embedded timeline y se pueden agregar de forma estática o dinámica (obtén más información en la sección inserción de anuncios). En el siguiente ejemplo, se muestra una implementación básica de un anuncio embedded expanded:

// Create the BreakClip.
let clipEmbeddedExpanded =
    new cast.framework.messages.BreakClip('bc_embedded_expanded');
clipEmbeddedExpanded.title = 'The Ad Title to be displayed during playback';
clipEmbeddedExpanded.duration = 15;

// Create the Break using the BreakClip id above.
let breakPrerollEmbeddedExpanded = new cast.framework.messages.Break(
    'break_preroll_embedded_expanded', ['bc_embedded_expanded'], 0);
breakPrerollEmbeddedExpanded.isEmbedded = true;
breakPrerollEmbeddedExpanded.expanded = true;

Tipos de cronograma del jugador

Cuando se crea una instancia de reproductor, el SDK de receptor web selecciona un tipo de cronograma para admitir la reproducción de anuncios durante la reproducción de contenido. Cada cronograma permite agregar ciertos tipos de pausas publicitarias. El tipo de cronograma se determina mediante los tipos de anuncio presentes durante el tiempo de carga en la etiqueta MediaInformation de LoadRequestData. Si hay pausas publicitarias incorporadas, se selecciona el cronograma embedded. Si hay pausas publicitarias unidas, se selecciona el cronograma stitched. En caso de que no haya anuncios, el SDK usará el cronograma embedded de forma predeterminada. Una vez que se selecciona el cronograma, no se puede cambiar para el elemento multimedia actual. En la siguiente tabla, se proporciona una descripción detallada de cada cronograma.

Tipo de cronograma Descripción
cronograma incorporado Una representación del tiempo multimedia que admite anuncios incorporados en el contenido principal (pausas de anuncios incorporadas y incorporadas). Cuando hay una pausa publicitaria sin expandir, la duración se quita de la duración total del contenido. Por otro lado, cuando hay una pausa publicitaria expandida, el tiempo se considera parte del contenido principal.
línea de tiempo unida Es una representación del tiempo de medios que admite anuncios procedentes de archivos multimedia externos (pausas manuales unidas por el cliente, VAST y VMAP). Cuando se agrega, la duración de la pausa publicitaria no forma parte de la duración del contenido principal.

En las Figuras 1 a 3 que aparecen a continuación, se muestra cierto contenido con varios tipos de anuncios y sus respectivos valores para el cronograma. El contenido se configura con una pausa de anuncio previo al video que contiene dos clips de pausa, así como pausas para anuncios durante el video, que contienen un solo clip de pausa. El tiempo real desde el inicio de la reproducción de contenido, el tiempo multimedia del contenido principal y la hora del clip de pausa de la pausa que se está reproduciendo se alinean debajo de cada figura.

Cronograma de los anuncios unidos por el cliente
Figura 1: Cronograma que representa parte del contenido y sus 3 pausas publicitarias unidas por el cliente.


Cronograma de los anuncios incorporados unidos al servidor
Figura 2: Línea de tiempo que representa parte del contenido y sus 3 pausas publicitarias incorporadas unidas con el servidor.


Cronograma de anuncios expandidos incorporados y unidos
Figura 3: Cronograma que representa parte de su contenido y sus 3 pausas publicitarias incorporadas y unidas con el servidor.

Posicionamiento de pausa

El SDK de receptor web permite a los desarrolladores especificar dónde se deben colocar las pausas publicitarias mediante la configuración de la propiedad position de la Break. Este valor corresponde a la hora del contenido multimedia del contenido principal y se puede usar para crear pausas publicitarias de pre-roll, mid-roll y post-roll. Se definen de la siguiente manera:

Posición de pausa Descripción
Anuncio previo al video Es una pausa publicitaria que se reproduce antes del contenido principal. Para indicar esto, se establece breakPosition en 0.
Anuncio durante el video Es una pausa publicitaria que se reproduce en medio del contenido. Esto se indica mediante la configuración de breakPosition en una hora en la que el inicio de la pausa es mayor que el inicio del contenido principal y la hora de finalización de la pausa es menor que la hora de finalización del contenido principal.
al final del video Es una pausa publicitaria que se reproduce después del contenido principal. Esto se indica mediante la configuración de breakPosition en -1 para los cronogramas unidos. En los cronogramas incorporados, breakPosition se debe establecer en la duración del contenido principal restado por la duración de la pausa. No es compatible con el contenido en vivo.

Matriz de interoperabilidad

Como punto de referencia rápido, la Tabla 1 muestra una descripción general de los tipos de anuncios y su compatibilidad con funciones relacionadas con los anuncios.

Tabla 1: Matriz de interoperabilidad de anuncios
Compatibilidad de características anuncio manual unido por el cliente VAST VMAP anuncio incorporado anuncio expandido incorporado
compatible con VAST unión manual del cliente N/A expandido incorporado incorporado
línea de tiempo cosido cosido cosido incorporado incorporado
inserción de anuncios static static static static estático, dinámico
eliminación de anuncios
anuncio previo al video
anuncio durante el video
anuncio al final del video
omisión de anuncios
interceptor de búsqueda de pausa
interceptor de carga de clip de pausa

Events

Cuando se produzcan eventos de pausa clave, el SDK de transmisión enviará eventos de tipo BreaksEvent. Una app receptora puede suscribirse a ellos mediante la API de PlayerManager addEventListener.

Estos eventos se pueden utilizar para generar estadísticas y realizar un seguimiento de la reproducción de anuncios. Cuando se usan anuncios de VMAP (lista de reproducción de varios anuncios de video) y VAST (plantilla de publicación de anuncios de video), el SDK envía automáticamente todos los eventos de seguimiento estándar que se proporcionan en las respuestas.

Los tipos de eventos se enumeran en la Tabla 2 junto con una descripción detallada de cuándo se activan.

Ciclo de vida de los eventos de pausa
Figura 4: Ciclo de vida de los eventos de pausa.
Tabla 2: Eventos de pausa y sus descripciones.
Evento de pausa Descripción
BREAK_STARTED Se activa cuando el tiempo multimedia actual del contenido principal es igual al position de una pausa no vista.
BREAK_CLIP_LOADING Se activa solo cuando comienza a cargarse un clip de pausa de un cronograma de unión.
BREAK_CLIP_STARTED Se activa cuando se inicia la reproducción de un clip de pausa.
BREAK_CLIP_ENDED Se activa cuando finaliza un clip de pausa. El endedReason se propagará en las siguientes circunstancias:
  • Un clip de pausa de cronograma unido por completo.
  • Un clip de pausa de cronograma unido cambia a otro clip de pausa.
  • Se omite cualquier clip de pausa.
  • El último clip de pausa que se reprodujo por completo en una pausa incrustada al final del video.
  • Se produjo un error.
BREAK_ENDED Se activa cuando finaliza el último clip de una pausa.

Inserción de anuncios

El SDK de transmisión permite a las aplicaciones insertar y quitar anuncios en diferentes momentos de una sesión de transmisión. Los dos tipos de inserción de anuncios son estática y dinámica. La inserción de anuncios estáticos requiere que los anuncios se especifiquen en LoadRequestData antes de la creación del reproductor. La inserción de anuncios dinámicos utiliza la API de BreakManager addBreak para insertar pausas en el contenido ya cargado. Cada tipo de método de inserción es compatible con ciertos tipos de anuncios. Se proporciona una descripción general de compatibilidad en la matriz de interoperabilidad.

Inserción de anuncios estáticos

La inserción de anuncios estáticos se caracteriza por agregar los metadatos de anuncios relevantes antes de la creación del reproductor. Esta información se proporciona en el MediaInformation de la LoadRequestData. Por ejemplo, esto se puede configurar en la solicitud de carga original de un remitente conectado o se puede insertar mediante la aplicación Receptor web interceptando la solicitud LOAD. Una vez que se muestra el LoadRequestData al SDK de la app receptora para procesarlo, se crea el reproductor. Obtén más información para cargar contenido multimedia. En el siguiente ejemplo, se muestra cómo se agrega un anuncio unido de forma manual por el cliente en el interceptor de solicitud LOAD.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD, loadRequestData => {

  // Create the BreakClip.
  let clipClient = new cast.framework.messages.BreakClip('bc_client');
  clipClient.title = 'The Ad Title to be displayed during playback';
  clipClient.contentId = 'https://example.com/ad.mp4';
  clipClient.contentType = 'video/mp4';

  // Create the Break using the BreakClip id above.
  let breakPostrollClient = new cast.framework.messages.Break(
      'break_postroll_client', ['bc_client'], -1);

  // Set the ad information in the load request data.
  let media = loadRequestData.media;
  media.breakClips = [clipClient];
  media.breaks = [breakPostrollClient];

  return loadRequestData;
});

Inserción de anuncios dinámicos

La inserción de anuncios dinámicos se caracteriza por establecer una pausa publicitaria durante la reproducción de contenido. Para ello, debes obtener una instancia de BreakManager y llamar a la API de addBreak. Esto requiere dos parámetros como mínimo, un objeto Break incorporado y un array de BreakClip. Se incluye una tercera propiedad opcional para forzar el envío de los cambios a remitentes conectados a través de una transmisión MediaStatus cuando se establece en true. Cuando agregues pausas y clips de pausa, los ID correspondientes deben ser únicos. Estos anuncios solo se pueden agregar una vez que se crea el reproductor. El SDK de Web Receiver activa el evento PLAYER_LOADING una vez que se crea el reproductor. Consulta el siguiente ejemplo que muestra el uso en un controlador de eventos que responde a cambios en los metadatos de ID3 de una transmisión y crea objetos Break y BreakClip para insertarlos en el cronograma.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

playerManager.addEventListener(cast.framework.events.EventType.ID3, (event) => {

  // Create the BreakClip.
  let clipEmbeddedExpanded = parseBreakClipFromData(event.segmentData);
  let breakEmbeddedExpanded = parseExpandedBreakFromData(event.segmentData);

  // Add the break and break clip.
  breakManager.addBreak(breakEmbeddedExpanded, [clipEmbeddedExpanded]);
});

Eliminación de anuncios dinámicos

Para quitar pausas dinámicas, la aplicación debe llamar a removeBreakById durante la reproducción. La función toma un identificador de string de la pausa que se quitará del cronograma. El breakId especificado debe apuntar a una pausa publicitaria incorporada. Si se detecta otro tipo de pausa publicitaria, esta permanece en el cronograma. Consulta la siguiente muestra para quitar un descanso.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.removeBreakById('break_midroll_embedded_expanded');

Comportamiento de los descansos

El SDK define un comportamiento predeterminado cuando el jugador entra y sale de las pausas, y proporciona una manera de personalizarlo aún más con algunas de las APIs proporcionadas en BreakManager.

Comportamiento predeterminado de las pausas

Cuando se ingresa un Break a través de una reproducción normal o buscando un Break, el SDK evaluará la propiedad isWatched para evaluar si el usuario ya lo vio. Cuando se crea, el valor predeterminado de una pausa para esta propiedad es false. Si la propiedad es true, la pausa no se reproducirá cuando se ingrese y el contenido principal seguirá reproduciéndose. Si la propiedad es false, la pausa se reproducirá cuando se ingrese.

Cuando se buscan pausas pasadas, la implementación predeterminada obtiene todos los elementos Break cuyo position está entre los valores seekFrom y seekTo de la operación de búsqueda. En esta lista de pausas, el SDK reproducirá el elemento Break cuyo position esté más cerca del valor seekTo y cuya propiedad isWatched esté configurada como false. Luego, se establecerá la propiedad isWatched de la pausa en true y el jugador comenzará a reproducir sus clips de pausa. Una vez que se observe la pausa, el contenido principal reanudará la reproducción desde la posición seekTo. Si no existe tal pausa, no se reproducirá ninguna pausa y el contenido principal se reanudará en la posición seekTo.

Durante la reproducción de pausa, el SDK transmitirá cualquier actualización relevante a las aplicaciones de remitente conectadas en el MediaStatus. Estas aplicaciones leerán la propiedad breakStatus para usar las transmisiones a fin de actualizar su IU para anuncios. Esta propiedad se define solo durante la reproducción de pausas.

MEDIA_STATUS

Las aplicaciones receptoras también pueden consultar directamente la información relacionada con la posición del cabezal de reproducción con respecto a la hora actual del BreakClip que se muestra llamando a PlayerManager getBreakClipCurrentTimeSec. Del mismo modo, las aplicaciones pueden llamar a getBreakClipDurationSec para consultar la duración del elemento BreakClip actual.

Comportamiento de las pausas personalizadas

El comportamiento predeterminado de las pausas y los clips de pausa se puede modificar con los métodos setBreakClipLoadInterceptor y setBreakSeekInterceptor proporcionados en BreakManager.

Interruptor de búsqueda de pausa

El interceptor de búsqueda de pausa permite que la app controle el comportamiento de búsqueda en las pausas publicitarias. La función se activa cuando se solicita una operación de búsqueda que busca hacia adelante o hacia atrás durante una o más pausas. Cuando se llama a la función, se pasa BreakSeekData como parámetro a la función de devolución de llamada. El objeto BreakSeekData contiene un array de objetos Break cuya propiedad position se establece en un número entre la hora del cabezal de reproducción actual definida como seekFrom y la hora de destino de búsqueda seekTo.

Este interceptor permite que se modifiquen los objetos Break en las respectivas pausas. Cuando se implementa, el interceptor de búsqueda de pausa debe especificar qué pausas publicitarias mostrar y mostrar un objeto BreakSeekData modificado de forma opcional. El jugador continuará reproduciendo todas las pausas incluidas en el valor que se muestra. Si un valor de null o no se muestra nada del interceptor de búsqueda de pausa, se omite la pausa.

Consulta la siguiente muestra para ver una implementación simple del interceptor que anula el comportamiento predeterminado a fin de mirar todas las pausas publicitarias que se buscaron, con la excepción de las pausas ya vistas.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakSeekInterceptor((breakSeekData) => {

  // Filter the breaks array by removing watched breaks.
  const unwatchedBreaks =
      breakSeekData.breaks.filter(adBreak => !adBreak.isWatched);
  breakSeekData.breaks = unwatchedBreaks;

  return breakSeekData;
});

Rompe el interceptor de carga del clip

Con el interceptor de carga de clips de pausa, se puede modificar un objeto BreakClip antes de que comience la reproducción.

El interceptor de carga del clip de pausa solo se llama para pausas del cronograma unidas y se puede configurar con setBreakClipLoadInterceptor. Antes de ingresar un Break, se llama a este interceptor una vez para cada BreakClip individual definido en ese descanso. El SDK pasa el objeto BreakClip original como parámetro de la función de devolución de llamada. La aplicación puede modificar este BreakClip y mostrarlo para que el SDK pueda recuperar y mostrar el clip de pausa con la configuración actualizada. Si se muestra null o no se muestra nada, se omite el clip de pausa.

A continuación, se muestra un ejemplo que modifica el contentUrl de los clips de pausa con una llamada a función getUrlFromClipId de utilidad, en la que el id del BreakClip se asigna a una URL.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakClipLoadInterceptor(
    (breakClip, breakClipLoadInterceptorContext) => {

  // Obtains the URL of a break clip id from a function call.
  breakClip.contentUrl = getUrlFromClipId(breakClip.id);

  return breakClip;
});

Omisión de anuncios

El SDK de Web Receiver proporciona API para omitir pausas de anuncios y clips de pausas individuales dentro de una pausa de anuncios. El SDK también permite a los usuarios omitir clips de pausa de forma opcional mediante la interacción con sus aplicaciones de remitente o pantallas inteligentes.

Clips de pausa que se pueden omitir del usuario

Si configuras los clips de pausa como que se pueden omitir, los usuarios podrán interactuar con las aplicaciones del remitente y los dispositivos de pantalla inteligentes conectados para omitir el resto de un clip de pausa que se esté reproduciendo. Si estableces la propiedad whenSkippable en una cantidad de segundos no negativa, se habilitará esta función para el objeto BreakClip. El jugador considerará que el clip de pausa se puede omitir una vez que se haya reproducido durante esa cantidad de segundos. Establecer este valor en 0 permite a los usuarios omitir el clip de pausa de inmediato.

// Create the BreakClip.
let clip = new cast.framework.messages.BreakClip('bc');
clip.title = 'The Ad Title to be displayed during playback';
clip.whenSkippable = 10; // Users can skip the clip after 10 seconds of playback.

Esta información se puede configurar en la solicitud de carga original del remitente o en la app receptora. Cuando se omite, un clip de pausa en un cronograma de unión de anuncios dejará de reproducir el clip de pausa actual. El reproductor cargará el siguiente clip de pausa si está presente o cargará el contenido principal. Si se omite, un clip de pausa en un cronograma de cronograma incorporado buscará al final del clip de pausa y continuará la reproducción de la transmisión en ese punto.

Omite anuncios de manera programática

Los anuncios también pueden omitirse automáticamente sin ninguna interacción del usuario.

Para omitir una pausa completa de la reproducción, una aplicación debe establecer la propiedad isWatched de una Break en true. Esto se puede hacer en cualquier momento durante la secuencia de carga o la reproducción de contenido. El jugador evalúa la propiedad isWatched cuando se cumple el position de una pausa en la hora actual del contenido principal. En ese momento, el jugador determinará si debe ingresarse o no una pausa. Consulta el siguiente ejemplo, en el que se repiten todas las pausas y se modifica el valor cuando se carga el reproductor.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

playerManager.addEventListener(cast.framework.events.EventType.PLAYER_LOADING,
    (event) => {

  // Obtain the breaks and iterate through each item to skip all ad breaks.
  let breaks = breakManager.getBreaks();
  breaks.forEach((brk) => {
    brk.isWatched = true;
  });
});

Para omitir un clip de pausa específico de manera programática, debes usar el interceptor de carga de clip de pausa. Si se muestra null o no se muestra un valor en la función de devolución de llamada, se omitirá el clip de esa pausa.

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
const breakManager = playerManager.getBreakManager();

breakManager.setBreakClipLoadInterceptor(
      (breakClip, breakClipLoadInterceptorContext) => {
  return null;
});