טיפול במטא-נתונים מתוזמנים בשידורים לינאריים של הטמעת מודעות דינמיות (DAI)

Select platform:‎ HTML5 Roku

ה-SDK של Interactive Media Ads (IMA) Dynamic Ad Insertion (DAI) מסתמך על מידע מטא-נתונים שמוטמע בפלחי המדיה של הסטרימינג (מטא-נתונים בתוך הלהקה), או בקובץ המניפסט של הסטרימינג (מטא-נתונים במניפסט), כדי לעקוב אחרי המיקומים של הצופים ואירועי המודעות בצד הלקוח. מטא-נתונים זמינים מסטרימינג של DAI בפורמטים שונים, בהתאם לסוג הסטרימינג שמופעל. ‫IMA DAI SDK מטפל בכל פורמטי המטא-נתונים באמצעות API יחיד.

האפליקציה אחראית לאיסוף המטא-נתונים ולהעברתם אל IMA DAI SDK. ערכת ה-SDK מציעה את השיטה StreamManager.onMessage() להעברת המידע הזה. השיטה הזו מעבירה מטא-נתונים בצורה של אובייקט msg שסופק על ידי יציאת roVideo. אחר כך, אובייקטים אלה עוברים עיבוד על ידי IMA DAI SDK כדי לקבוע את התזמון של אירועי המודעות. היא מקבלת ארגומנט יחיד:

  • msg: אובייקט מסוג msg שסופק על ידי יציאת roVideo.

קוד לדוגמה של מטא-נתונים

הנה דוגמה לאופן הטיפול במטא-נתונים מהיציאה roVideo והעברתם אל IMA DAI SDK דרך StreamManager.onMessage().

Sub runLoop()
  ' Forward all timed metadata events to IMA.
  m.top.video.timedMetaDataSelectionKeys = ["*"]

  ' Cycle through all the fields and set listeners.
  ' IMPORTANT: Failure to listen to the position and timedmetadata fields could
  ' result in ad impressions not being reported.
  m.port = CreateObject("roMessagePort")
  fields = m.top.video.getFields()
  for each field in fields
    m.top.video.observeField(field, m.port)
  end for

  while True
    msg = wait(1000, m.port)
    if m.top.video = invalid
      print "exiting"
      exit while
    end if

    m.streamManager.onMessage(msg)
    currentTime = m.top.video.position
    If currentTime > 3 And not m.top.adPlaying
       m.top.video.enableTrickPlay = true
    End If
  end while
End Sub

מידע נוסף על שילוב מטא-נתונים של סטרימינג לטיפול בלולאות באפליקציה זמין במדריך לתחילת העבודה עם IMA Roku. הקטע רכיב event listener and stream start במדריך מכיל את לולאת הטיפול במטא-נתונים.

הדרישות לגבי פורמט וקונטיינר של שידורים

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

‫Roku Media Player תומך בחילוץ מטא-נתונים של ID3 בתוך פס התדרים בפורמטים הבאים של קונטיינרים:

  • MPEG-2 Transport Stream ‏ (TS)
  • Fragmented MP4
  • פורמט נפוץ של אפליקציות מדיה (CMAF)

אין תמיכה בשידורי אודיו גולמיים בסיסיים, כמו פלחים גולמיים של קידוד אודיו מתקדם (AAC), עבור מטא-נתונים מתוזמנים ב-Roku OS. ל-Roku Media Player אין אפשרות לחלץ מטא-נתונים מתוזמנים של ID3 מזרמי אודיו גולמיים בפורמט AAC, ולכן IMA SDK לא יכול לקבל אירועי מטא-נתונים ולשלוח נתוני צפייה במודעה או אותות מעקב. בכל הסטרימינג של אודיו בלבד ושל עיבוד אודיו, צריך להשתמש בסטרימינג עם אריזה בפורמט קונטיינר נתמך, כמו TS,‏ MP4 או CMAF.

שידורים בפורמט HLS CMAF

בסטרימינג לינארי של DAI ב-HLS, מטא-נתונים מתוזמנים מועברים דרך תיבות eMSGv1 בתוך פס התדרים באמצעות Common Media Application Framework (CMAF), בהתאם לתקן ID3 דרך CMAF. תיבות ה-eMSG האלה מוטמעות בתחילת כל מקטע מדיה, וכל eMSG של ID3 מכיל PTS ביחס לאי הרציפות האחרונה בזרם.

ב-IMA Roku, כל מקורות הנתונים של HLS CMAF שולחים נתוני ID3 בתוך פס התדרים בפורמט eMSGv0. ‫IMA משלב מידע שסופק על ידי פורמט eMSGv0 עם מידע מאובייקט הווידאו.

כדי לאפשר ניתוח תקין של אירועי ID3 של HLS CMAF stream, צריך לשלוח את אובייקט הווידאו בבקשת הסטרימינג באמצעות StreamRequest.videoObject.