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

בחירת פלטפורמה: HTML5 Roku

ה-SDK של Interactive Media Ads (IMA) Dynamic Ad Insertion (DAI)‎ (ה-SDK של IMA להצגת מודעות דינמיות) מסתמך על מידע מטא-נתונים שמוטמע בפלחי המדיה של הסטרימינג (מטא-נתונים בתוך הסטרימינג) או בקובץ המניפסט של הסטרימינג (מטא-נתונים במניפסט) כדי לעקוב אחרי המיקום של הצופים ואירועי מודעות בצד הלקוח. מטא-נתונים זמינים מסטרימינג של 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 והתחלת הסטרימינג במדריך מכיל את לולאת הטיפול במטא-נתונים.

שידורי HLS CMAF

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

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

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