הפסקות למודעות

סקירה כללית

ה-SDK של מכשיר ה-Web קבלה כולל תמיכה מותאמת להפסקות למודעות ולמודעות נלוות בזרם מדיה נתון. היא מספקת ממשקי API להגדרת מיקום המודעה, מקור המודעה וההתנהגות של הפסקות למודעות ושל הקליפים מההפסקות למודעות. במדריך הזה Break מתייחס למרווח זמן בהפעלה שמכיל מודעה או מודעת באמפר אחת או יותר, המונח 'כל מודעה או באמפר' BreakClip ההפסקות האלה משויכות למדיה שנטענה או מופעלת.

סוגי מודעות

ה-SDK של מקבל האינטרנט תומך בהוספת מודעות בצד הלקוח (CSAI) ובשרת הצגת מודעות תפורות (SSAI). אפשר להגדיר מודעות תפירה על ידי לקוח באופן ידני או שחולצו מתוך קובצי תבנית VAST ו-VMAP. יש לציין מודעות תפורות על ידי השרת באופן ידני לפני טעינת התוכן בתור מודעות מוטמעות או באופן דינמי במהלך הפעלת התוכן כמורחבות מודעות. ההטמעות של כל אחד מסוגי המודעות האלה מתוארות בפירוט בהמשך.

שנוצר ידנית על ידי הלקוח

הפסקה ידנית למודעה שתפורה על ידי הלקוח הוא סוג של הפסקה למודעה שתפורה יחד על ידי הלקוח, ומצוינים באופן ידני על ידי האפליקציה באמצעות ממשקי API של SDK. סוג המודעה הזה לא מוטמע בזרם של התוכן הראשי. BreakClip חייב לספק את contentId שזו כתובת URL שמפנה לתוכן המודעה, contentType שמתאר את הפורמט של תוכן המודעה, וגם title.

חייב להיות בBreak isEmbedded וגם expanded מוגדר לערך ברירת המחדל false. position מוגדרת כהפסקה למודעה לפני סרטון, באמצע הסרטון או בסוף הסרטון (מידע נוסף זמין הקטע מיקום שבר). כשמכינים את התבנית מודעה להפעלה, ה-SDK של Web Acceptr יוצר מופע נגן נוסף לטעינה ומשמיעים את תוכן המודעה. להפסקות האלה נדרש stitched timeline, והן צריכות להיות נוספו באופן סטטי (למידע נוסף, קטע הוספת מודעה). הדוגמה הבאה מציגה מודל יישום של מודעה ידנית שנתפורה על ידי לקוח:

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

ה-SDK של מקלט האינטרנט תומך בהוספת VAST רגיל של IAB (הצגת מודעות וידאו) תבנית). אחרי שמזינים את התבנית, המערכת מנתחת את תבנית ה-XML כדי ליצור קטע ההפסקה תפור על ידי הלקוח מיד אחרי הכניסה להפסקה.

כדי ליצור מודעת VAST, האפליקציה המקבלת צריכה ליצור VastAdsRequest ולציין אותו בBreakClip vastAdsRequest לנכס. האובייקט VastAdsRequest חייב להכיל את המאפיין adsResponse (a ייצוג מחרוזת של תבנית ה-XML עצמה) או של adTagUrl (כתובת ה-URL שבו מוגדר המאפיין של תבנית ה-XML. אם תצוין כתובת אתר, הפרמטר ה-SDK יטפל באחזור התבנית. המאפיין Break שמקיף את ההיררכיה המוסכמות לגבי מודעות תפירה על ידי לקוח. ניתן להוסיף מודעות אלה יחד עם מודעות תפירה ידנית של לקוחות באותה הפסקה או בהפסקות נפרדות עבור אותו קטע תוכן. הדוגמה הבאה מציגה הטמעה בסיסית של VAST ad:

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

כאשר מוזן Break שמכיל VAST BreakClip, מקלט האינטרנט ערכת ה-SDK תאחזר את התבנית, ואז תנתח אותה. במהלך הניתוח, ה-SDK המערכת תיצור BreakClip חדש ותאכלס אותו בערכים שחולצו התבנית, למשל contentId, contentType, title, duration, whenSkippable ו-clickThroughUrl. id של קליפ ההפסקה שנוצר הוא מוגדרת לערך GENERATED:N, כאשר N הוא מספר שלם שגדל ב-1 בכל פעם קליפ ההפסקה של VAST נוצר החל מ-0. המודעה שנוצרה תתווסף אל המערך BreakClip. כל ערך id של קליפ ב-VAST ב-Break הנוכחי הוא ואז הוא הוחלף בקליפ המתאים של ההפסקה שנוצר בקליפ id. קטעי הקוד למטה נמחיש את השינויים MEDIA_STATUS הודעות מתייחסות למודעות לפני ואחרי הכניסה להפסקה כזו.

המידע על Break ועל BreakClip לפני הכניסה להפסקה עם מודעות VAST.

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

מידע על Break ועל BreakClip לאחר כניסה להפסקה עם מודעות 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

ה-WebBard SDK תומך ב-VMAP של IAB (פלייליסטים של מודעות וידאו מרובות) רגילה. כשמציינים VMAP, ה-SDK של מקלט האינטרנט ינתח את ה-VMAP וליצור אובייקטים תפורים על ידי הלקוח Break לכל <AdBreak> את הערכים בתשובה. הפעולה הזו גם תיצור את ה-BreakClips המתאים עם אובייקט vastAdsRequest לכל ערך של <AdSource> שסופק ב-VMAP. שפת תרגום להפעיל VMAP להוספת מודעות לתוכן שלך, האפליקציה חייבת ליצור VastAdsRequest ולהקצות אותו vmapAdsRequest של התכונה MediaInformation ב LoadRequestData. צריך להוסיף את המודעות האלה באופן סטטי (מידע נוסף זמין הקטע הוספת מודעה). קטע טקסט שמתאר את יצירה של בקשת 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;

מוטמע

הפסקה למודעה המוטמעת היא סוג של הפסקה למודעה שנוצרת בצד השרת לשידור של התוכן הראשי. משך הזמן של המאפיין Break מוקטן ממשך הזמן של התוכן הראשי בעת חישוב זמן המדיה.

BreakClip חייב לספק את duration של תוכן המודעה, title. חייב להיות בBreak isEmbedded מוגדר ל-true ו expanded מוגדר ל-false. position אפשר להגדיר אותו כהפסקה למודעה לפני סרטון או באמצע הסרטון. ההפסקות למודעות בסוף הסרטון הן נתמך עם ערכי position מדויקים חיוביים. למידע נוסף בנושא מיקום הפסקה. כאשר המודעה מופעלת עבור מופעל, ה-SDK של מקבל האינטרנט ימשיך את הפעלת השידור בתור פלחי המודעות שמוטמעים בו. אין מנגנון טעינה נוסף לסוג המודעה הזה. המטא-נתונים הרלוונטיים של המודעה מוצגים למשתמש ברגע שמיקום המיקום נמצא בטווח טווח הזמן של ההפסקה. להפסקות האלה נדרש embedded timeline וצריך להוסיף אותן באופן סטטי (מידע נוסף זמין בקטע הוספת מודעה). הדוגמה הבאה מראה הטמעה בסיסית של מודעת 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.

מוטמע במצב מורחב

ההפסקה המוטמעת למודעה היא סוג של הפסקה למודעה שנוצרת בחיבור לשרת משתלבים בזרם של התוכן הראשי. משך הזמן של הBreak כלול במשך הזמן של התוכן הראשי, בעת חישוב זמן המדיה.

BreakClip חייב לספק את duration של תוכן המודעה, title. חייב להיות בBreak isEmbedded מוגדר ל-true ו expanded מוגדר ל-true. position אפשר להגדיר אותו כהפסקה למודעה לפני סרטון או באמצע הסרטון. ההפסקות למודעות בסוף הסרטון הן נתמך עם ערכי position חיוביים. למידע נוסף בנושא מיקום הפסקה. כאשר המודעה מופעלת עבור מופעל, ה-SDK של מקבל האינטרנט ימשיך את הפעלת השידור בתור פלחי המודעות שמוטמעים בו. אין מנגנון טעינה נוסף לסוג המודעה הזה. המטא-נתונים הרלוונטיים של המודעה מוצגים למשתמש ברגע שמיקום המיקום נמצא בטווח טווח הזמן של ההפסקה. להפסקות האלה נדרש embedded timeline וניתן להוסיף אותן באופן סטטי או באופן דינמי (למידע נוסף קטע הוספת מודעה). הדוגמה הבאה מציגה מודל הטמעה של מודעת 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;

סוגי ציר הזמן של הנגן

כשיוצרים מופע של נגן, ב-WebChromeOS SDK בוחרים סוג ציר זמן תמיכה בהפעלת מודעות במהלך הפעלת תוכן. כל ציר זמן מפעיל מודעות מסוימות שיש להוסיף את סוגי ההפסקות. סוג ציר הזמן נקבע לפי סוגי מודעות שקיימים בזמן הטעינה MediaInformation של LoadRequestData. אם קיימות הפסקות מוטמעות למודעות, ציר הזמן embedded נבחר. אם המיקום תפירה על ידי הלקוח הפסקות למודעות, נבחר ציר הזמן stitched. אם אין מודעות, ברירת המחדל של ה-SDK היא embedded בציר הזמן. אחרי שבוחרים את ציר הזמן, אי אפשר לשנות אותו כרגע קובץ מדיה. הטבלה הבאה מספקת תיאור מפורט של כל ציר זמן.

סוג ציר הזמן תיאור
ציר זמן מוטמע ייצוג של זמן המדיה שתומך בהצגת מודעות שמוטמעים בתוכן הראשי (הפסקות מוטמעות והפסקות מוטמעות למודעות). כשיש הפסקה למודעה לא מורחבת, משך הזמן הוא מופחת ממשך הזמן הכולל של תוכן. לעומת זאת, כאשר מודעה מורחבת קיימת הפסקה, הזמן שלה נחשב חלק מהתוכן הראשי.
ציר זמן שנוצר ייצוג של זמן מדיה שתומך בהצגת מודעות שמקורם בקובצי מדיה חיצוניים (תפירה ידנית על ידי הלקוח, VAST ו-VMAP הפסקות למודעות). כשמוסיפים את ההפסקה, משך ההפסקה למודעה הוא לא חלק ממשך הזמן של התוכן הראשי.

איורים 1 עד 3 שבהמשך ממחישים תוכן מסוים עם סוגי מודעות שונים בערכי ציר הזמן המתאימים. התוכן מוגדר עם הפסקה לפני הסרטון (pre-roll) שכולל שני קליפים של הפסקות למודעות, והפסקות באמצע הסרטון (mid-roll) ובסוף הסרטון (post-roll) קליפ בהפסקה אחת. הזמן שחלף מהקליק להמרה מאז תחילת הפעלת התוכן, שעת המדיה של התוכן העיקרי והזמן הנוכחי של ההפסקה קליפ ההפסקה להפעלה מיושר מתחת לכל דמות.

ציר זמן של מודעות שנוצרו על ידי הלקוח
איור 1: ציר הזמן שמייצג חלק מהתוכן ו-3 הפסקות למודעות תפירה ללקוחות.


ציר זמן של מודעות מוטמעות בחיבור שרת
איור 2: ציר הזמן שמייצג חלק מהתוכן ו-3 ההפסקות למודעות המוטמעות לפי שרת.


ציר זמן של מודעות מורחבות מוטמעות שנוצרו על ידי שרת תפור
איור 3: ציר הזמן שמייצג חלק מהתוכן ו-3 הפסקות למודעות מורחבות שהוטמעו בתפירה של השרת.

מיקום ההפסקות

ה-SDK של ה-Web Acceptr מאפשר למפתחים לציין איפה למקם את ההפסקות למודעות על ידי הגדרה של position של Break. הערך הזה תואם לזמן המדיה של התוכן הראשי ואפשר להשתמש בו כדי ליצור הפסקות למודעות pre-roll, mid-roll ו-post-roll. הערכים האלה מוגדרים כך:

מיקום שבירה תיאור
מודעה לפני סרטון (pre-roll) הפסקה למודעה שמופעלת לפני התוכן הראשי. הדבר מצוין באמצעות הגדרה של breakPosition ל-0
מודעה באמצע סרטון (mid-roll) הפסקה למודעה שמופעלת באמצע התוכן. הנושא הזה מסומן על ידי הגדרת breakPosition לזמן שבו ההפסקה גדול יותר מתחילת התוכן הראשי, שעת הסיום של ההפסקה קטנה יותר מהסוף של התוכן הראשי בזמן האימון.
מודעה בסוף סרטון (post-roll) הפסקה למודעה שמופעלת אחרי התוכן הראשי. הדבר מצוין על ידי הגדרה של breakPosition ל--1 עבור לוחות זמנים שנוצרו על ידי תמונות. למוטמעים בציר הזמן breakPosition צריך להגדיר את משך הזמן של התוכן הראשי בחיסור של משך הזמן משך ההפסקה. אין תמיכה בתוכן בשידור חי.

מטריצה של יכולת פעולה הדדית

לעיון מהיר, טבלה 1 מציגה סקירה כללית של סוגי המודעות, את התאימות שלהם לתכונות שקשורות למודעות.

טבלה 1: מטריצת יכולת הפעולה ההדדית של מודעות
תמיכה בתכונות מודעה שנוצרה ידנית על ידי הלקוח VAST VMAP מודעה מוטמעת מודעה מורחבת מוטמעת
תואם ל- VAST שנוצר ידנית על ידי הלקוח לא רלוונטי מוטמע במצב מורחב מוטמע
ציר הזמן תפורה תפורה תפורה מוטמע מוטמע
הוספת מודעה סטטי סטטי סטטי סטטי סטטי, דינמי
הסרת מודעות
מודעה לפני סרטון (pre-roll)
מודעה באמצע סרטון (mid-roll)
מודעה בסוף הסרטון (post-roll)
דילוג על מודעה
מיירט דילוג דילוג
לשבור את יירוט העומס של קליפ

אירועים

כשמתרחשים אירועי תקלה מרכזיים, ה-SDK להפעלת Cast ישלח אירועים מסוג BreaksEvent אפליקציה המקבלת יכולה להירשם אליהם באמצעות PlayerManager addEventListener API.

ניתן להשתמש באירועים האלה לניתוח נתונים ולמעקב אחר הפעלת מודעות. מתי VMAP (פלייליסט של מספר מודעות בווידאו) ומודעות VAST (תבנית לפרסום מודעות וידאו) הן כל אירועי מעקב רגילים שמסופקים בתשובות באופן אוטומטי נשלח על ידי ה-SDK.

סוגי האירועים מפורטים בטבלה 2 יחד עם תיאור מפורט לגבי כשהם מופעלים.

מחזור החיים של אירועי הפסקות
איור 4: מחזור החיים של אירועי הפסקה.
טבלה 2: אירועים של הפסקות זמניות והתיאורים שלהם.
אירוע הפסקה תיאור
BREAK_STARTED מופעל כשזמן המדיה הנוכחי של התוכן הראשי שווה לזמן position מההפסקה שלא נצפה.
BREAK_CLIP_LOADING מופעל רק כשמתחיל טעינה של קליפ בציר זמן תפור.
BREAK_CLIP_STARTED מופעל כשמופעל קליפ בהפסקה.
BREAK_CLIP_ENDED מופעל כשמסתיים קליפ בהפסקה. endedReason יאוכלסו בנסיבות הבאות:
  • קליפ תפור מציר זמן שהופעל במלואו.
  • קליפ שנוצר על ידי מעבר בציר הזמן שנוצר עובר לקליפ אחר של הפסקה מציר הזמן.
  • המערכת תדלג על כל קליפ של הפסקה.
  • קליפ ההפסקה האחרון הופעל במלואו בהפסקה המוטמעת בסוף הסרטון.
  • אירעה שגיאה.
BREAK_ENDED מופעל כשהקליפ האחרון בהפסקה מסתיים.

הוספת מודעה

ה-SDK של Cast מאפשר לאפליקציות להוסיף ולהסיר מודעות ברגעים שונים של סשן של הפעלת Cast. יש שני סוגים של הוספת מודעות הם סטטיים ודינמיים. כדי להוסיף מודעה סטטית יש לציין מודעות בקטע LoadRequestData לפני יצירת הנגן. הוספה של מודעה דינמית מתבססת על BreakManager addBreak ממשק API להוספת הפסקות לתוכן שכבר נטען. כל סוג של הזנה תואמת לסוגי מודעות מסוימים. תאימות נמצאת במטריצה של יכולת הפעולה ההדדית.

הוספת מודעה סטטית

התכונה 'הכנסת מודעה סטטית' מתאפיינת בהוספת המטא-נתונים הרלוונטיים של המודעה לפני ועד ליצירת שחקן. המידע הזה מפורט MediaInformation של LoadRequestData. לדוגמה, אפשר להגדיר את זה בשדה של שולח מחובר ניתן להוסיף את בקשת הטעינה המקורית באמצעות אפליקציית Web הפריקה, מיירט את הבקשה LOAD. לאחר שה-LoadRequestData מוחזר אל ה-SDK של ה-WebReceiver SDK לצורך עיבוד, הנגן נוצר. מידע נוסף זמין באתר של טעינת המדיה. הדוגמה למטה מוצגת מודעה ידנית שנתפרה על ידי לקוח, שנוספה בבקשה 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;
});

הוספת מודעה דינמית

הוספת מודעה דינמית מאופיינת בהגדרה של הפסקה למודעה בזמן התוכן להפעלה. כדי לעשות זאת, צריך לקבל מופע של BreakManager ולהפעיל ה addBreak API. נדרשים שני פרמטרים לפחות, מוטמע מורחב Break וגם מערך של BreakClip. מאפיין שלישי אופציונלי כלול כדי לאלץ את שליחת השינויים אל שולחים מחוברים דרך שידור MediaStatus כשהערך הוא true. מתי כשמוסיפים הפסקות וקטעים, המזהים חייבים להיות ייחודיים. המודעות האלה ניתן להוסיף את הנגן רק לאחר יצירת הנגן. ה-SDK של מקלט האינטרנט מופעל ה PLAYER_LOADING האירוע לאחר שהנגן נוצר. הדוגמה הבאה מציגה את השימוש ב- גורם handler של אירועים שמגיב לשינויים במטא-נתונים של ID3 של השידור. יוצרת אובייקטים מסוג Break ו-BreakClip כדי להוסיף אותם לציר הזמן.

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

הסרת מודעות דינמיות

כדי להסיר הפסקות דינמיות, האפליקציה צריכה להפעיל removeBreakById בזמן ההפעלה. הפונקציה לוקחת מזהה מחרוזת של ההפסקה הוסר מציר הזמן. ה-breakId שצוין חייב להפנות אל תבנית מוטמעת ההפסקה למודעה הורחבה. אם המערכת תזהה סוג אחר של הפסקה למודעה, ההפסקה יישאר בציר הזמן. למטה תוכלו לראות דוגמה להסרת ההפסקה.

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

breakManager.removeBreakById('break_midroll_embedded_expanded');

התנהגות ההפסקות

ה-SDK מגדיר התנהגות ברירת מחדל למקרים שבהם הנגן נכנס ויוצא הפסקות ומספק דרך להתאים אותו אישית באמצעות חלק מממשקי ה-API באזור BreakManager

התנהגות ברירת המחדל של ההפסקות

כשמזינים Break במהלך הפעלה רגילה או על ידי דילוג מעל Break, ערכת ה-SDK תעריך אם המשתמש כבר ראה אותה, על ידי בדיקה ה isWatched לנכס. כשיוצרים את ההפסקה, ערך ברירת המחדל של ההפסקה בנכס הזה הוא false. אם המיקום הנכס הוא true, ההפסקה לא תופעל לאחר כניסה אליה התוכן ימשיך לפעול. אם הנכס הוא false, ההפסקה תהיה מופעל כשמזינים אותו.

כשמתבצע חיפוש של הפסקות קודמות, הטמעת ברירת המחדל משיגה את כל הערכים של Break פריטים שה-position שלהם נמצא בין פעולת הדילוג seekFrom וגם seekTo ערכים. מרשימת ההפסקות הזו, ערכת ה-SDK תפעיל את Break שה-position שלה הוא הקרוב ביותר לערך seekTo שהמאפיין isWatched שלו מוגדר להיות false המאפיין isWatched של ההפסקה הזו יוגדר בתור true הנגן יתחיל בהשמעת קטעי ההפסקות למודעות. אחרי שצופים בהפסקה, ההפעלה של התוכן הראשי תתחיל מהמיקום seekTo. אם לא, הערך הזה ההפסקה קיימת, ולא תופעל הפסקה והתוכן הראשי ימשיך לפעול מושמעת בעמדה seekTo.

בזמן ההפעלה של ההפסקות, ה-SDK ישדר את כל העדכונים הרלוונטיים של שולחי האפליקציות MediaStatus האפליקציות האלה ישתמשו בשידורים כדי לעדכן את ממשק המשתמש שלהן למודעות על ידי קריאה ה breakStatus לנכס. המאפיין הזה מוגדר רק בזמן הפעלת ההפסקות.

האפליקציות המקבלות יכולות גם להריץ שאילתות ישירות על מידע שקשור מיקום המיקום הנוכחי ביחס לזמן הנוכחי של BreakClip מוצגת בהתקשרות אל PlayerManager getBreakClipCurrentTimeSec. באופן דומה, אפליקציות יכולות לשלוח שאילתה לגבי משך הזמן של BreakClip הנוכחי, שיחות getBreakClipDurationSec.

התנהגות ההפסקות בהתאמה אישית

פעולת ברירת המחדל בקטעים של הפסקות והפסקות למודעות, אפשר להשתמש setBreakClipLoadInterceptor וגם setBreakSeekInterceptor השיטות שמפורטות ב-BreakManager.

מיירט הדילוג

מיירט הדילוג להפעלת הדילוג מאפשר לאפליקציה לשלוט בהתנהגות של דילוג מעל הפסקות למודעות. הפונקציה מופעלת כשנשלחת בקשה לפעולת דילוג שמחפש קדימה או אחורה בהפסקה אחת או יותר. כשקוראים לפונקציה, BreakSeekData מועבר כפרמטר לפונקציית הקריאה החוזרת. האובייקט BreakSeekData מכיל מערך של Break אובייקטים שהמאפיין position שלהם מוגדר למספר בין זמן המיקום מוגדר כ- seekFrom וזמן היעד של הדילוג seekTo.

המיירוט הזה מאפשר לאובייקטים של Break בהפסקות המתאימות להיות שונה. לאחר ההטמעה, מיירט הדילוג שרוצים לציין חייב לציין איזו מודעה הפסקות להפעלה על ידי החזרת אובייקט BreakSeekData ששונה באופן אופציונלי. הנגן ימשיך להשמיע את כל ההפסקות שכלולות בערך המוחזר. אם הערך של null או ששום דבר לא מוחזר ממיירט הדילוג להפסקה, ההפסקה בוצע דילוג.

דוגמה להטמעה פשוטה של המיירט מבטל את התנהגות ברירת המחדל כדי לצפות בכל ההפסקות למודעות למעט הפסקות שכבר נצפו.

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

הפסקה של מיירט העומס בקליפ

באמצעות שימוש במיירט העומס של ההפסקה של קליפ, אפשר לשנות אובייקט BreakClip לפני תחילת ההפעלה של הסרטון.

מיירט העומס של ההפסקה בקליפ מופעל רק עבור מעברי ציר זמן תפורים ואפשר להגדיר אותו באמצעות setBreakClipLoadInterceptor. לפני הכניסה אל Break, המיירט הזה מופעל פעם אחת לכל אדם BreakClip הוגדר בהפסקה הזו. ה-SDK מעביר את הקובץ המקורי BreakClip כפרמטר של פונקציית הקריאה החוזרת. לאחר מכן האפליקציה יכולה לשנות BreakClip ולהחזיר אותו כדי שה-SDK יוכל לאחזר ולהציג את ההפסקה הקליפ עם ההגדרות האישיות המעודכנות. אם מוחזר null או כלום, ההפסקה המערכת מדלגת על הקליפ.

למטה מופיעה דוגמה שמשנה את contentUrl של הקליפים מההפסקות עם קוראים לפונקציה getUrlFromClipId שבה id של BreakClip ממופה לכתובת 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;
});

דילוג על מודעה

ה-SDK של מקלט האינטרנט מספק ממשקי API לדילוג על הפסקות למודעות ועל קליפים של הפסקות נפרדות בהפסקה למודעה. ה-SDK גם מאפשר למשתמשים באופן אופציונלי לדלג על קליפים של הפסקות לפי אינטראקציה עם אפליקציות השולח או מכשירי המסך החכמים שלהם.

קטעי הפסקות שניתן לדלג עליהם

הגדרת קליפים כהפסקות שניתן לדלג עליהן מאפשרת למשתמשים ליצור אינטראקציה עם שולח מחובר ואפליקציות והתקני תצוגה חכמים כדי לדלג על שאר מופעל עכשיו קליפ בהפסקה. הגדרה של whenSkippable למספר שניות לא שלילי תפעיל את התכונה הזאת אובייקט BreakClip. הנגן יתייחס לקליפ ההפסקה שניתן לדלג עליו לאחר הקליפ של ההפסקה הופעל במשך מספר השניות הזה. הגדרת הערך הזה כ-0 מאפשרת למשתמשים לדלג על קטע ההפסקה באופן מיידי.

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

ניתן להגדיר מידע זה בבקשת הטעינה המקורית של השולח או האפליקציה המקבל. אם המערכת מדלגת על דילוג, נוצר קליפ בהפסקה בציר זמן תפור אחד יפסיק להפעיל את קליפ ההפסקה הנוכחי. הנגן יטען את הסרטון הבא להפסיק את הקליפ, אם הוא קיים או לטעון את התוכן הראשי. כשמשתמש מדלג, קליפ של הפסקה ההפסקה למודעה בציר הזמן המוטמע תסתיים בסיום הקליפ של ההפסקה, להמשיך את הפעלת השידור בנקודה הזו.

דילוג פרוגרמטי על מודעות

ניתן גם לדלג על המודעות באופן אוטומטי ללא אינטראקציה עם המשתמש.

כדי לדלג על הפסקה מלאה מההפעלה, האפליקציה צריכה להגדיר את isWatched של Break ל-true. אפשר לעשות זאת בכל שלב במהלך הטעינה של רצף או של תוכן. המאפיין isWatched מוערך על ידי נגן כשמתקיים position של ההפסקה בזמן הנוכחי של התוכן הראשי. בשעה בנקודה הזו, השחקן יקבע אם צריך להיכנס להפסקה או לא. הדוגמה הבאה מציגה בלולאה דרך כל ההפסקות ומשנה אותן כשהנגן נטען.

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

כדי לדלג באופן פרוגרמטי על קליפ על הפסקה ספציפית, צריך להשתמש בכלי יירוט העומס מהקליפ. על ידי מחזיר null או לא מחזיר ערך בפונקציית קריאה חוזרת, את הקליפ המערכת תדלג על ההפסקה הזאת.

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

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