Pausas publicitarias

Descripción general

El SDK de Web Receiver ofrece compatibilidad nativa con las pausas publicitarias y los anuncios complementarios dentro de una transmisión multimedia determinada. Proporciona APIs para establecer la posición del anuncio, la fuente del anuncio y el comportamiento de las pausas publicitarias y sus clips de pausa asociados. En esta guía, un Break se refiere a un intervalo para la reproducción que contiene uno o más anuncios o bumpers publicitarios, y cada uno de ellos se conoce como BreakClip. Estas pausas se asocian al contenido multimedia que se está cargando o reproduciendo.

Tipos de anuncios

El SDK de receptor web admite la inserción de anuncios del cliente (CSAI) y la inserción de anuncios unidos por el servidor (SSAI). Los anuncios unidos por el cliente pueden configurarse manualmente mediante la aplicación o extraerse de los archivos de plantillas VAST y VMAP. Los anuncios unidos por el servidor deben especificarse manualmente antes de cargar el contenido como anuncios incorporados o de forma dinámica durante la reproducción de contenido como anuncios expandidos incorporados. A continuación, se describen en detalle las implementaciones de cada uno de estos tipos de anuncios.

unido por el cliente de forma manual

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

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

// 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 Web Receiver admite 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 unido por el cliente posterior cuando se ingresa a la pausa.

Para crear un anuncio de VAST, la app receptora debe crear un VastAdsRequest y especificarlo en la propiedad BreakClip vastAdsRequest. El objeto VastAdsRequest debe tener definida la propiedad adsResponse (una representación de string de la 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 Break de encapsulamiento sigue las convenciones para anuncios unidos por el cliente. Estos anuncios se pueden agregar junto con otros anuncios unidos de forma manual por el cliente en la misma pausa o en pausas independientes 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 una Break que contiene un BreakClip de VAST, el SDK de Web Receiver recuperará y, luego, analizará la plantilla de manera opcional. 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, donde N es un número entero que aumenta en 1 para cada clip de pausa de VAST nuevo creado a partir de 0. Luego, el anuncio generado se agrega al array BreakClip. Luego, el id de cada clip de pausa de VAST en el Break actual se reemplaza por el id del clip de pausa generado correspondiente. En los siguientes fragmentos, se ilustran los cambios en los mensajes MEDIA_STATUS correspondientes a los anuncios antes y después de ingresar esa pausa.

Información de Break y BreakClip antes de ingresar a una pausa con 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 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 es compatible con el estándar VMAP de IAB (listas de reproducción de varios anuncios de video). Cuando se proporciona una VMAP, el SDK de Web Receiver analizará la respuesta de VMAP y generará objetos Break unidos por el cliente para cualquier entrada <AdBreak> en la respuesta. También generará el BreakClips adecuado con un objeto vastAdsRequest por cada entrada <AdSource> proporcionada en VMAP. Para permitir que VMAP inserte anuncios en tu contenido, la aplicación debe crear un objeto VastAdsRequest y asignarlo a la propiedad vmapAdsRequest de MediaInformation en LoadRequestData. Estos anuncios se deben insertar de forma estática (obtén más información en la sección de 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 a la transmisión del contenido principal. La duración del Break se resta de la duración del contenido principal cuando se calcula el tiempo del contenido multimedia.

El BreakClip debe proporcionar el duration del contenido del anuncio y el title. El Break debe tener isEmbedded configurado en true y expanded en false. El position se puede configurar como pausa publicitaria previo al video o anuncio durante el video. Las pausas publicitarias para anuncios al final del video son compatibles con valores position exactos positivos. Obtén más información al respecto en la sección Posicionamiento de pausa. Cuando se activa la reproducción del anuncio, el SDK de Web Receiver continúa la reproducción de la transmisión a medida que se incorporan los segmentos de anuncios. No existe un mecanismo de carga adicional para este tipo de anuncio. Los metadatos del anuncio 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 objeto embedded timeline y se deben agregar de forma estática (obtén más información en la sección de inserción de anuncios). En el siguiente ejemplo, se muestra una implementación básica de un anuncio de 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.

incorporadas expandidas

La pausa publicitaria expandida incorporada es un tipo de pausa publicitaria que se une del lado del servidor a la transmisión del contenido principal. La duración del Break se incluye en 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. El Break debe tener isEmbedded configurado en true y expanded en true. El position se puede configurar como pausa publicitaria previo al video o anuncio durante el video. Las pausas publicitarias para anuncios al final del video son compatibles con valores de position positivos. Obtén más información al respecto en la sección Posicionamiento de pausa. Cuando se activa la reproducción del anuncio, el SDK de Web Receiver continúa la reproducción de la transmisión a medida que se incorporan los segmentos de anuncios. No existe un mecanismo de carga adicional para este tipo de anuncio. Los metadatos del anuncio 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 elemento 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 reproductor

Cuando se crea una instancia de reproductor, el SDK de Web Receiver 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 según los tipos de anuncios presentes durante el tiempo de carga en el MediaInformation de LoadRequestData. Si aparecen pausas publicitarias incorporadas, se selecciona el cronograma embedded. Si hay pausas publicitarias unidas por el cliente, se selecciona el cronograma de stitched. Si no hay anuncios, el SDK usa 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 Es una representación del tiempo de contenido multimedia que admite anuncios incorporados en el contenido principal (pausas publicitarias incorporadas y expandidas incorporadas). Cuando hay una pausa publicitaria no expandida, su duración se resta de la duración total del contenido. Por otro lado, cuando está presente una pausa publicitaria expandida, su hora se considera parte del contenido principal.
línea de tiempo unida Es una representación del tiempo multimedia que admite anuncios provenientes de archivos multimedia externos (pausas publicitarias 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 parte del contenido con varios tipos de anuncios y sus respectivos valores de cronograma. El contenido se configura con una pausa de anuncio previo al video que contiene dos clips de pausa y pausas de anuncio durante el video y finales del video que contienen un solo clip de pausa. El tiempo del reloj de pared desde el inicio de la reproducción de contenido, el tiempo de contenido multimedia del contenido principal y el tiempo del clip de pausa actual de la pausa se alinean debajo de cada cifra.

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


Cronograma de los anuncios incorporados unidos por el servidor
Figura 2: El cronograma que representa parte del contenido y las 3 pausas publicitarias incrustadas en el servidor.


Cronograma de los anuncios expandidos incorporados unidos por el servidor
Figura 3: El cronograma que representa parte del contenido y las 3 pausas publicitarias desplegadas incorporadas y unidas por el servidor.

Posicionamiento de quiebre

El SDK de Web Receiver permite a los desarrolladores especificar dónde deben colocarse las pausas publicitarias configurando la propiedad position de Break. Este valor corresponde al tiempo multimedia del contenido principal y se puede usar para crear pausas publicitarias pre-roll, mid-roll y post-roll. Estas se definen de la siguiente manera:

Posición de pausa Descripción
anuncio previo al video Una pausa publicitaria que se reproduce antes del contenido principal. Esto se indica estableciendo breakPosition en 0.
anuncios durante el video Una pausa publicitaria que se reproduce en medio del contenido. Para indicarlo, se establece breakPosition en un momento en el que el inicio de la pausa sea mayor que el inicio del contenido principal, y la hora de finalización de la pausa sea menor que la hora de finalización del contenido principal.
anuncio al final del video Una pausa publicitaria que se reproduce después del contenido principal. Esto se indica estableciendo breakPosition en -1 para los cronogramas unidos. En el caso de los cronogramas incorporados, breakPosition se debe establecer en la duración del contenido principal restada por la duración de la pausa. No es compatible con el contenido en vivo.

Matriz de interoperabilidad

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

Tabla 1: Matriz de interoperabilidad de Google Ads
Compatibilidad de características anuncio manual unido por el cliente VAST VMAP anuncio incorporado anuncio expandido incorporado
compatibles con VAST unido por el cliente de forma manual No disponible incorporadas expandidas 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 anuncio
interceptor de salto de dirección
interceptor de carga de clip de interrupción

Eventos

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

Estos eventos se pueden usar para las estadísticas y el 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 cualquier evento de seguimiento estándar proporcionado 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 eventos de pausa
Figura 4: Ciclo de vida de los eventos de pausa
Tabla 2: Eventos de interrupción 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 se comienza a cargar un clip de pausa de línea de tiempo unida.
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. endedReason se propagará en las siguientes circunstancias:
  • Se reprodujo por completo un clip de pausa en la línea de tiempo unido.
  • Un clip de pausa de línea de tiempo unido transiciona a otro clip de pausa.
  • Se omitirá cualquier clip de pausa.
  • El último clip de pausa que se reprodujo por completo en una pausa incorporada al final del video.
  • Se produjo un error.
BREAK_ENDED Se activa cuando finaliza el último clip de pausa de un descanso.

Inserción de anuncios

El SDK de transmisión permite que las aplicaciones inserten y quiten 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ática requiere que los anuncios se especifiquen en el LoadRequestData antes de la creación del reproductor. La inserción de anuncios dinámicos usa 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 la 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 jugador. Esta información se proporciona en el MediaInformation de LoadRequestData. Por ejemplo, esto se puede configurar en la solicitud de carga original de un remitente conectado o la aplicación receptora web puede insertarlo mediante la intercepción de la solicitud LOAD. Una vez que se muestra LoadRequestData al SDK de Web Receiver para su procesamiento, se crea el reproductor. Obtén más información sobre la carga de contenido multimedia. En el siguiente ejemplo, se muestra un anuncio unido por el cliente manual que se agrega en el interceptor de solicitudes 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 del contenido. Para ello, obtén una instancia de BreakManager y llama a la API de addBreak. Esto toma dos parámetros como mínimo: un Break expandido incorporado y un arreglo de BreakClip. Se incluye una tercera propiedad opcional para forzar el envío de los cambios a los remitentes conectados a través de una transmisión MediaStatus cuando se establece en true. Cuando agregues pausas y clips de pausa, los IDs correspondientes deben ser únicos. Estos anuncios solo se pueden agregar una vez que se cree el reproductor. El SDK de Web Receiver activa el evento PLAYER_LOADING una vez que se crea el reproductor. Consulta el siguiente ejemplo, en el que se muestra el uso en un controlador de eventos que responde a los cambios en los metadatos 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 las pausas dinámicas, la aplicación debe llamar a removeBreakById durante la reproducción. La función toma un identificador de cadena de la pausa que se quitará del cronograma. El breakId especificado debe apuntar a una pausa publicitaria expandida incorporada. Si se detecta otro tipo de pausa publicitaria, esta permanecerá en el cronograma. Consulta el siguiente ejemplo en el que se quita una pausa.

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

breakManager.removeBreakById('break_midroll_embedded_expanded');

Comportamiento de las pausas

El SDK define un comportamiento predeterminado para cuando el jugador ingresa a las pausas y sale de ellas, y proporciona una forma de personalizarlo aún más con algunas de las APIs que se proporcionan en BreakManager.

Comportamiento de pausa predeterminado

Cuando se ingresa un Break mediante una reproducción normal o buscando un Break, el SDK evaluará si el usuario ya lo vio verificando la propiedad isWatched. Cuando se crea, el valor predeterminado de una pausa para esta propiedad es false. Si la propiedad es true, no se reproducirá la pausa cuando se ingrese y el contenido principal continuará reproduciéndose. Si la propiedad es false, se reproducirá la pausa 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. A partir de esta lista de pausas, el SDK reproducirá el Break cuyo position está más cerca del valor seekTo y cuya propiedad isWatched está establecida en false. La propiedad isWatched de esa pausa se establecerá en true, y el reproductor comenzará a reproducir sus clips de pausa. Una vez que se mire la pausa, se reanudará la reproducción del contenido principal desde la posición seekTo. Si no existe tal pausa, no se reproducirá ninguna pausa, y se reanudará la reproducción del contenido principal en la posición seekTo.

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

Las aplicaciones receptoras también pueden consultar directamente 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 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 que se proporcionan en BreakManager.

Interceptor de búsqueda rápida

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 avanzar o retroceder una o más pausas. Cuando se llama, 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 está establecida como un número entre el tiempo de reproducción actual definido como seekFrom y la hora de destino de búsqueda seekTo.

Este interceptor permite modificar los objetos Break en las pausas respectivas. Cuando se implementa, el interceptor de búsqueda de pausa debe especificar qué pausas publicitarias se deben reproducir. Para ello, muestra un objeto BreakSeekData modificado de forma opcional. El jugador jugará todas las pausas incluidas en el valor que se muestra. Si el interceptor de búsqueda de pausa muestra un valor de null o nada, se omite la pausa.

Consulta el siguiente ejemplo para ver una implementación simple del interceptor que anula el comportamiento predeterminado para mirar todas las pausas publicitarias que se buscan, a excepción de las que ya se miraron.

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;
});

Interceptor de carga de clip de corte

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

El interceptor de carga de clip de pausa se llama solo para pausas de cronograma unidas y se puede configurar con setBreakClipLoadInterceptor. Antes de ingresar un Break, se llama a este interceptor una vez por cada BreakClip individual definido en esa pausa. El SDK pasa el objeto BreakClip original como parámetro de la función de devolución de llamada. Luego, 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 recortes de pausa con una llamada a la función de utilidad getUrlFromClipId, en la que el id de 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 APIs para omitir pausas publicitarias y clips de pausas individuales dentro de una pausa publicitaria. El SDK también les permite a los usuarios interactuar con sus aplicaciones emisoras o dispositivos de pantalla inteligente para omitir clips de interrupciones.

Clips de pausa que se pueden omitir del usuario

Configurar clips de pausa como que se pueden omitir permite a los usuarios interactuar con aplicaciones emisoras conectadas y dispositivos de pantalla inteligente para omitir, de manera opcional, el resto de un clip de pausa que se esté reproduciendo en ese momento. Si configuras la propiedad whenSkippable en un número de segundos no negativo, se habilitará esta función para el objeto BreakClip. El reproductor considerará que el clip de pausa se puede omitir una vez que este se reproduce 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 establecer en la solicitud de carga original del remitente o en la app receptora. Si se omite, un clip de pausa en una pausa publicitaria del cronograma unido dejará de reproducir el clip de pausa actual. El reproductor cargará el siguiente clip de pausa, si está presente, o cargará el contenido principal. Cuando se omite, un clip de pausa en una pausa publicitaria de línea de tiempo incorporada buscará el final del clip de pausa y continuará con la reproducción de la transmisión en ese punto.

Cómo omitir anuncios de forma programática

Los anuncios también se pueden omitir automáticamente sin interacción del usuario.

Para omitir la reproducción de una pausa completa, una aplicación debe establecer la propiedad isWatched de un elemento 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 el tiempo actual del contenido principal. En ese momento, el jugador determinará si debe ingresarse un descanso o no. Consulta el siguiente ejemplo, en el que se repiten todas las pausas y se modifica el valor cuando el reproductor está cargando.

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, se debe 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 en esa pausa.

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

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