Coupures publicitaires

Présentation

Le SDK Web Receiver offre une compatibilité native avec les coupures publicitaires et les annonces associées dans un flux multimédia donné. Elle fournit des API permettant de définir la position, la source et le comportement des coupures publicitaires et des extraits associés. Dans ce guide, Break désigne un intervalle de lecture contenant une ou plusieurs annonces ou bumpers. Chaque annonce ou bumper est appelé BreakClip. Ces pauses sont associées au contenu multimédia en cours de chargement ou de lecture.

Types d'annonces

Le SDK Web Receiver prend en charge l'insertion d'annonces côté client (CSAI) et l'insertion d'annonces assemblées sur le serveur (SSAI). Les annonces assemblées par le client peuvent être définies manuellement par l'application ou extraites des fichiers de modèle VAST et VMAP. Les annonces assemblées sur le serveur doivent être spécifiées manuellement avant le chargement du contenu en tant qu'annonces intégrées ou de manière dynamique pendant la lecture du contenu en tant qu'annonces développées intégrées. Les implémentations de chacun de ces types d'annonces sont décrites en détail ci-dessous.

assemblage manuel par le client

La coupure publicitaire créée manuellement par le client est un type de coupure publicitaire qui est assemblé par le client et qui est spécifié manuellement par l'application à l'aide des API du SDK. Ce type d'annonce n'est pas intégré dans le flux du contenu principal. BreakClip doit fournir contentId (une URL qui pointe vers le contenu de l'annonce), le contentType décrivant le format de l'annonce et le title.

Pour Break, isEmbedded doit être défini et expanded doit être défini sur la valeur par défaut false. L'élément position peut être défini sur une coupure publicitaire pré-roll, mid-roll ou post-roll (pour en savoir plus, consultez la section Positionnement des coupures). Lors de la préparation de l'annonce pour la lecture, le SDK Web Receiver génère une autre instance de lecteur pour charger et lire le contenu de l'annonce. Ces coupures nécessitent un élément stitched timeline et doivent être ajoutées de manière statique (pour en savoir plus, consultez la section Insertion d'annonces). L'exemple ci-dessous présente une implémentation de base d'une annonce assemblée manuellement par le client:

// 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

Le SDK Web Receiver accepte l'ajout d'annonces VAST (Video Ad Serving Template) de la norme IAB. Lorsqu'il est fourni, le modèle XML est analysé pour générer un extrait de coupure publicitaire assemblé par le client par la suite à l'entrée de la coupure.

Pour créer une annonce VAST, l'application réceptrice doit créer un élément VastAdsRequest et le spécifier dans la propriété BreakClip vastAdsRequest. La propriété adsResponse (représentation sous forme de chaîne du modèle XML lui-même) ou la propriété adTagUrl (URL où le modèle XML est hébergé) doit être définie pour l'objet VastAdsRequest. Si l'URL est spécifiée, le SDK gère la récupération du modèle. L'élément Break encapsulé respecte les conventions concernant les annonces assemblées par le client. Ces annonces peuvent être ajoutées avec d'autres annonces assemblées manuellement par le client lors de la même coupure publicitaire ou lors de coupures distinctes pour le même contenu. L'exemple ci-dessous illustre l'implémentation de base d'une annonce 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.

Lorsqu'un Break contenant un BreakClip VAST est saisi, le SDK Web Receiver peut éventuellement récupérer, puis analyser le modèle. Lors de l'analyse, le SDK génère un nouveau BreakClip et lui insère les valeurs extraites du modèle, telles que contentId, contentType, title, duration, whenSkippable et clickThroughUrl. La valeur id de l'extrait de coupure publicitaire généré est définie sur GENERATED:N, où N est un entier qui incrémente la valeur de 1 pour chaque nouvel extrait de coupure publicitaire VAST créé à partir de 0. L'annonce générée est ensuite ajoutée au tableau BreakClip. La valeur id de chaque extrait de coupure publicitaire VAST dans l'élément Break actuel est remplacée par la valeur id du clip de coupure publicitaire correspondant. Les extraits ci-dessous illustrent les modifications apportées aux messages MEDIA_STATUS concernant les annonces avant et après la saisie d'une telle pause.

Les informations Break et BreakClip avant d'indiquer une pause dans les annonces VAST.

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

Informations Break et BreakClip après une pause dans les annonces 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

Le SDK Web Receiver est compatible avec la norme VMAP (Video Multiple Ad Playlists) de l'IAB. Lorsqu'un VMAP est fourni, le SDK Web Receiver analyse la réponse VMAP et génère des objets Break assemblés par le client pour toutes les entrées <AdBreak> de la réponse. Il génère également le BreakClips approprié avec un objet vastAdsRequest pour chaque entrée <AdSource> fournie dans le VMAP. Pour permettre à VMAP d'insérer des annonces dans votre contenu, l'application doit créer un objet VastAdsRequest et l'attribuer à la propriété vmapAdsRequest de MediaInformation dans le LoadRequestData. Ces annonces doivent être insérées de manière statique (pour en savoir plus, consultez la section Insertion d'annonces). Vous trouverez ci-dessous un extrait décrivant la création d'une requête 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;

intégré

Une coupure publicitaire intégrée est un type de coupure publicitaire intégré côté serveur dans le flux du contenu principal. La durée de Break est soustraite de la durée du contenu principal lors du calcul de la durée du contenu multimédia.

BreakClip doit fournir la duration du contenu de l'annonce et l'title. Pour Break, isEmbedded doit être défini sur true et expanded sur false. La position peut être définie comme coupure publicitaire pré-roll ou mid-roll. Les coupures publicitaires post-roll sont compatibles avec les valeurs position exactes positives. Pour en savoir plus, consultez la section Positionnement des coupures. Lorsque la lecture de l'annonce est déclenchée, le SDK Web Receiver continue la lecture du flux à mesure que les segments d'annonces y sont intégrés. Il n'existe pas de mécanisme de chargement supplémentaire pour ce type d'annonce. Les métadonnées pertinentes de l'annonce sont présentées à l'utilisateur une fois que la tête de lecture se situe dans la période de coupure. Ces coupures nécessitent un élément embedded timeline et doivent être ajoutées de manière statique (pour en savoir plus, consultez la section Insertion d'annonces). L'exemple ci-dessous présente une implémentation de base d'une annonce 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.

intégré développé

La coupure publicitaire agrandie intégrée est un type de coupure publicitaire qui est assemblé côté serveur dans le flux du contenu principal. La durée de Break est incluse dans celle du contenu principal lors du calcul de la durée du contenu multimédia.

BreakClip doit fournir la duration du contenu de l'annonce et l'title. Pour Break, isEmbedded doit être défini sur true et expanded sur true. La position peut être définie comme coupure publicitaire pré-roll ou mid-roll. Les coupures publicitaires post-roll sont compatibles avec les valeurs position positives. Pour en savoir plus, consultez la section Positionnement des coupures. Lorsque la lecture de l'annonce est déclenchée, le SDK Web Receiver continue la lecture du flux à mesure que les segments d'annonces y sont intégrés. Il n'existe pas de mécanisme de chargement supplémentaire pour ce type d'annonce. Les métadonnées pertinentes de l'annonce sont présentées à l'utilisateur une fois que la tête de lecture se situe dans la période de coupure. Ces coupures nécessitent un élément embedded timeline et peuvent être ajoutées de manière statique ou dynamique (pour en savoir plus, consultez la section Insertion d'annonces). L'exemple ci-dessous présente une implémentation de base d'une annonce 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;

Types de chronologie du lecteur

Lors de la création d'une instance de lecteur, le SDK Web Receiver sélectionne un type de chronologie pour permettre la lecture d'annonces lors de la lecture de contenu. Chaque chronologie permet d'ajouter certains types de coupures publicitaires. Le type de chronologie est déterminé par les types d'annonces présents lors du temps de chargement dans la MediaInformation de LoadRequestData. Si des coupures publicitaires intégrées sont présentes, la chronologie embedded est sélectionnée. Si des coupures publicitaires assemblées par le client sont présentes, la chronologie stitched est sélectionnée. Si aucune annonce n'est présente, le SDK utilise par défaut la chronologie embedded. Une fois la chronologie sélectionnée, vous ne pouvez plus la modifier pour l'élément multimédia actuel. Le tableau ci-dessous fournit une description détaillée de chaque chronologie.

Type de chronologie Description
chronologie intégrée Représentation de la durée du média compatible avec les annonces intégrées au contenu principal (coupures publicitaires intégrées et développées intégrées). Lorsqu'une coupure publicitaire non développée est présente, sa durée est soustraite de la durée totale du contenu. En revanche, lorsqu'une coupure publicitaire agrandie est présente, l'heure du passage est considérée comme faisant partie du contenu principal.
chronologie assemblée Représentation de l'heure média compatible avec les annonces provenant de fichiers multimédias externes (coupures publicitaires assemblées manuellement par le client, VAST et VMAP). Lorsqu'elle est ajoutée, la durée de la coupure publicitaire ne fait pas partie de celle du contenu principal.

Les Figures 1 à 3 ci-dessous illustrent certains contenus avec différents types d'annonces et les valeurs de chronologie respectives. Le contenu est configuré avec une coupure pré-roll contenant deux coupures publicitaires, et des coupures mid-roll et post-roll contenant un seul extrait de coupure. La durée d'exécution depuis le début de la lecture du contenu, l'heure du contenu multimédia du contenu principal et l'heure de l'extrait de coupure en cours de lecture sont alignés sous chaque image.

Chronologie des annonces assemblées par le client
Figure 1: Chronologie représentant certains contenus et ses trois coupures publicitaires assemblées par le client


Chronologie des annonces intégrées assemblées par le serveur
Figure 2: Chronologie représentant certains contenus et ses trois coupures publicitaires intégrées assemblées au serveur.


Chronologie des annonces développées intégrées assemblées par le serveur
Figure 3: Chronologie représentant certains contenus et ses trois coupures publicitaires développées intégrées et assemblées au serveur.

Pause

Le SDK Web Receiver permet aux développeurs de spécifier l'emplacement des coupures publicitaires en définissant la propriété position de Break. Cette valeur correspond à la durée média du contenu principal et peut être utilisée pour créer des coupures publicitaires pre-roll, mid-roll et post-roll. Elles sont définies comme suit:

Interrompre la position Description
pré-roll Coupure publicitaire diffusée avant le contenu principal Pour ce faire, définissez breakPosition sur 0.
Annonce vidéo mid-roll Coupure publicitaire diffusée au milieu d'un contenu. Pour cela, définissez breakPosition sur une heure où le début de la pause est supérieur à celui du contenu principal, et l'heure de fin de la coupure est inférieure à l'heure de fin du contenu principal.
Annonce vidéo post-roll Coupure publicitaire diffusée après le contenu principal. Pour cela, définissez breakPosition sur -1 pour les chronologies assemblées. Pour les timelines intégrées, le breakPosition doit être défini sur la durée du contenu principal soustraite de la durée de la coupure publicitaire. Non compatible avec le contenu en direct.

Matrice d'interopérabilité

Le Tableau 1 présente un aperçu des types d'annonces et de leur compatibilité avec les fonctionnalités liées aux annonces.

Tableau 1: Matrice d'interopérabilité avec les annonces
Compatibilité des fonctionnalités assemblage manuel de l'annonce par le client VAST VMAP annonce intégrée annonce agrandie intégrée
compatible avec VAST assemblage manuel par le client N/A intégré développé intégré
timeline cousus cousus cousus intégré intégré
insertion d'annonces static static static static statique, dynamique
suppression d'annonces
annonce pré-roll
annonce mid-roll
annonce post-roll
ignorer une annonce
intercepteur de recherche de rupture
casser l'intercepteur de charge de clip

Événements

Lorsque des événements de coupure de touche se produisent, le SDK Cast envoie des événements de type BreaksEvent. Une application réceptrice peut s'y abonner à l'aide de l'API PlayerManager addEventListener.

Ces événements peuvent être utilisés à des fins d'analyse et de suivi de la lecture des annonces. Lorsque vous utilisez des annonces VMAP (Video Multiple Ad Playlist) et VAST (Video Ad Serving Template), tous les événements de suivi standards fournis dans les réponses sont automatiquement envoyés par le SDK.

Les types d'événements sont répertoriés dans le Tableau 2, avec une description détaillée de leur déclenchement.

Cycle de vie des événements d&#39;arrêt
Figure 4: Cycle de vie des événements de coupure.
Tableau 2: Événements de coupure et leur description.
Événement de coupure Description
BREAK_STARTED Déclenché lorsque la durée multimédia actuelle du contenu principal est égale à la durée (position) d'une coupure non visionnée.
BREAK_CLIP_LOADING Déclenché uniquement lorsque le chargement d'un extrait de coupure de la timeline d'assemblage commence.
BREAK_CLIP_STARTED Déclenché lorsque l'extrait d'une pause lance la lecture
BREAK_CLIP_ENDED Déclenché à la fin d'un extrait vidéo Le champ endedReason sera renseigné dans les cas suivants :
  • Un extrait de la timeline assemblée fait planter l'extrait qui est lu dans son intégralité.
  • Un extrait de coupure de la timeline assemblée permet de passer à un autre extrait.
  • Un extrait de coupure publicitaire est ignoré.
  • L'extrait du dernier clip a été lu entièrement lors d'une pause intégrée post-roll.
  • Une erreur s'est produite.
BREAK_ENDED Déclenché à la fin du dernier extrait vidéo d'une pause

Insertion d'annonces

Le SDK Cast permet aux applications d'insérer et de supprimer des annonces à différents moments d'une session de diffusion. Les deux types d'insertion d'annonces sont les suivants : statique et dynamique. L'insertion d'annonces statiques nécessite que les annonces soient spécifiées dans LoadRequestData avant la création du lecteur. L'insertion dynamique d'annonces utilise l'API BreakManager addBreak pour insérer des coupures dans le contenu déjà chargé. Chaque type de méthode d'insertion est compatible avec certains types d'annonces. Vous trouverez une présentation de la compatibilité dans la matrice d'interopérabilité.

Insertion d'annonces statiques

L'insertion d'annonces statiques consiste à ajouter les métadonnées d'annonce pertinentes avant la création du lecteur. Ces informations sont fournies dans le MediaInformation du LoadRequestData. Par exemple, il peut être défini dans la requête de chargement d'origine d'un expéditeur connecté ou être inséré par l'application Web Receiver en interceptant la requête LOAD. Une fois LoadRequestData renvoyé au SDK Web Receiver pour traitement, le lecteur est créé. Découvrez comment charger des contenus multimédias. L'exemple ci-dessous montre une annonce assemblée manuellement par le client qui est ajoutée à l'intercepteur de requêtes 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;
});

Insertion dynamique d'annonces

L'insertion dynamique d'annonces consiste à définir une coupure publicitaire lors de la lecture du contenu. Pour ce faire, obtenez une instance de BreakManager et appelez l'API addBreak. Cette opération nécessite au minimum deux paramètres : un Break développé intégré et un tableau de BreakClip. Une troisième propriété facultative est incluse pour forcer l'envoi des modifications aux expéditeurs connectés via une diffusion MediaStatus lorsque la valeur est true. Lorsque vous ajoutez des coupures et des coupures, les ID correspondants doivent être uniques. Ces annonces ne peuvent être ajoutées qu'une fois le lecteur créé. Le SDK Web Receiver déclenche l'événement PLAYER_LOADING une fois le lecteur créé. L'exemple ci-dessous présente l'utilisation d'un gestionnaire d'événements qui répond aux modifications apportées aux métadonnées ID3 d'un flux et crée des objets Break et BreakClip pour les insérer dans la chronologie.

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

Suppression d'une annonce dynamique

Pour supprimer les coupures dynamiques, l'application doit appeler removeBreakById pendant la lecture. La fonction utilise un identifiant de chaîne de la coupure à supprimer de la chronologie. L'élément breakId spécifié doit pointer vers une coupure publicitaire développée intégrée. Si un autre type de coupure publicitaire est détecté, elle reste dans la timeline. L'exemple ci-dessous permet de supprimer une coupure publicitaire.

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

breakManager.removeBreakById('break_midroll_embedded_expanded');

Comportement des coupures

Le SDK définit un comportement par défaut lorsque le joueur entre ou quitte des pauses, et permet de le personnaliser davantage à l'aide de certaines des API fournies dans BreakManager.

Comportement de coupure par défaut

Lorsqu'un Break est saisi via une lecture standard ou en effectuant une recherche sur un Break, le SDK évalue si l'utilisateur l'a déjà vue ou non en vérifiant la propriété isWatched. Une fois créée, la valeur par défaut d'un saut pour cette propriété est false. Si la propriété est true, la coupure publicitaire n'est pas lue lorsqu'elle est saisie, et la lecture du contenu principal continue. Si la propriété est false, la coupure publicitaire est lue lorsqu'elle est saisie.

Lorsque vous recherchez des coupures passées, l'implémentation par défaut obtient tous les éléments Break dont la valeur position est comprise entre les valeurs seekFrom et seekTo de l'opération de recherche. À partir de cette liste de coupures, le SDK lit l'élément Break dont l'élément position est le plus proche de la valeur seekTo et dont la propriété isWatched est définie sur false. La propriété isWatched de cette pause est alors définie sur true, et le lecteur commence à lire ses extraits. Une fois la pause visionnée, le contenu principal reprend la lecture à partir de la position seekTo. Si aucune coupure de ce type n'existe, aucune coupure n'est lue, et la lecture du contenu principal reprend à la position seekTo.

Pendant la lecture de pauses, le SDK diffuse toutes les mises à jour pertinentes aux applications émettrices connectées dans MediaStatus. Ces applications utiliseront les annonces pour mettre à jour leur UI pour les annonces en lisant la propriété breakStatus. Cette propriété n'est définie que lors de la lecture de coupures publicitaires.

Les applications réceptrices peuvent également interroger directement les informations liées à la position de la tête de lecture par rapport à l'heure actuelle de la BreakClip affichée en appelant PlayerManager getBreakClipCurrentTimeSec. De même, les applications peuvent interroger la durée de l'BreakClip actuelle en appelant getBreakClipDurationSec.

Comportement de coupure personnalisé

Le comportement par défaut des coupures et coupures publicitaires peut être modifié à l'aide des méthodes setBreakClipLoadInterceptor et setBreakSeekInterceptor fournies dans BreakManager.

Interceveur de recherche de rupture

L'intercepteur de recherche de coupure publicitaire permet à l'application de contrôler le comportement de la recherche dans les coupures publicitaires. La fonction est déclenchée lorsqu'une opération de recherche visant à avancer ou à reculer sur une ou plusieurs pauses est demandée. Lorsqu'elle est appelée, la méthode BreakSeekData est transmise en tant que paramètre à la fonction de rappel. L'objet BreakSeekData contient un tableau d'objets Break dont la propriété position est définie sur un nombre compris entre l'heure de la tête de lecture actuelle définie comme seekFrom et l'heure de destination de la recherche seekTo.

Cet intercepteur permet de modifier les objets Break dans les coupures respectives. Lorsqu'il est implémenté, l'intercepteur de recherche de coupure publicitaire doit spécifier les coupures publicitaires à lire en renvoyant un objet BreakSeekData éventuellement modifié. Le joueur lance toutes les coupures incluses dans la valeur renvoyée. Si l'intercepteur de recherche de coupure génère la valeur null ou rien, la coupure est ignorée.

L'exemple ci-dessous présente une implémentation simple de l'intercepteur qui ignore le comportement par défaut pour surveiller toutes les coupures publicitaires recherchées, à l'exception des coupures déjà visionnées.

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

Interception de coupure de l'extrait de charge

L'intercepteur de chargement d'extraits de coupure permet de modifier un objet BreakClip avant le début de la lecture.

L'intercepteur de chargement de clips de coupure n'est appelé que pour les coupures de timeline assemblées et peut être défini à l'aide de setBreakClipLoadInterceptor. Avant de saisir un Break, cet intercepteur est appelé une fois pour chaque BreakClip individuel défini dans cette coupure. Le SDK transmet l'objet BreakClip d'origine en tant que paramètre de la fonction de rappel. L'application peut ensuite modifier ce BreakClip et le renvoyer afin que le SDK puisse récupérer et afficher l'extrait de rupture avec la configuration mise à jour. Si null ou rien n'est renvoyé, l'extrait de rupture est ignoré.

Vous trouverez ci-dessous un exemple qui modifie le contentUrl des extraits de coupure avec un appel de fonction utilitaire getUrlFromClipId, où le id de BreakClip est mappé sur une 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;
});

Annonces ignorées

Le SDK Web Receiver fournit des API permettant d'ignorer les coupures publicitaires et des coupures individuelles dans une coupure publicitaire. Le SDK permet également aux utilisateurs d'ignorer des extraits d'interruption en interagissant avec les applications émettrices ou les écrans connectés.

Extraits de coupures désactivables désactivables de l'utilisateur

Définir des extraits de coupure comme désactivables permet aux utilisateurs d'interagir avec les applications émettrices connectées et les écrans connectés pour éventuellement ignorer le reste de l'extrait en cours de lecture. Définir la propriété whenSkippable sur un nombre non négatif de secondes activera cette fonctionnalité pour l'objet BreakClip. Le lecteur considère l'extrait de coupure comme désactivable une fois que l'extrait a été lu pendant le nombre de secondes défini. Définir cette valeur sur 0 permet aux utilisateurs d'ignorer immédiatement l'extrait de coupure publicitaire.

// 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.

Ces informations peuvent être définies dans la requête de chargement d'origine de l'expéditeur ou dans l'application destinataire. Lorsqu'elle est ignorée, un extrait de coupure publicitaire dans une chronologie assemblée arrête de lire l'extrait de coupure actuel. Le lecteur charge l'extrait de coupure suivant s'il est présent ou charge le contenu principal. Lorsqu'elle est ignorée, une coupure publicitaire dans une chronologie intégrée recherche la fin de l'extrait et poursuit la lecture du flux à ce stade.

Ignorer les annonces par programmation

Les annonces peuvent également être ignorées automatiquement sans intervention de l'utilisateur.

Pour ignorer une pause complète de la lecture, une application doit définir la propriété isWatched d'un Break sur true. Vous pouvez effectuer cette opération à tout moment pendant la séquence de chargement ou la lecture du contenu. La propriété isWatched est évaluée par le joueur lorsque la position d'une pause est atteinte dans l'heure actuelle du contenu principal. À ce stade, le lecteur détermine si un saut doit être ajouté ou non. L'exemple ci-dessous montre toutes les coupures et en modifie la valeur lors du chargement du lecteur.

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

Pour ignorer un extrait de rupture spécifique de manière programmatique, vous devez utiliser l'intercepteur de charge de clip de coupure. Si vous renvoyez null ou ne renvoyez pas de valeur dans la fonction de rappel, l'extrait de cette coupure est ignoré.

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

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