Zeitgesteuerte Metadaten in linearen Streams für die dynamische Anzeigenbereitstellung verarbeiten

Das Interactive Media Ads (IMA) Dynamic Ad Einfügen SDK (DAI) stützt sich auf Metadateninformationen, die in die Mediasegmente des Streams (In-Band-Metadaten) oder in die Streaming-Manifestdatei (in Manifest-Metadaten) eingebettet sind, um die Positionen und clientseitigen Anzeigenereignisse der Betrachter zu verfolgen. Metadaten sind aus dem Stream für die dynamische Anzeigenbereitstellung je nach wiedergegebenem Streamtyp in verschiedenen Formaten verfügbar. Das Roku IMA SDK verarbeitet alle Metadatenformate über eine einzige API.

Ihre App ist dafür verantwortlich, Metadaten zu erfassen und an das IMA DAI SDK weiterzuleiten. Das SDK bietet die Methode StreamManager.onMessage(), um diese Informationen zu übergeben. Diese Methode leitet Metadaten in Form eines msg-Objekts weiter, das vom roVideo-Port bereitgestellt wird. Diese Objekte werden dann vom IMA DAI SDK verarbeitet, um den Zeitpunkt der Anzeigenereignisse festzulegen. Dafür ist ein einziges Argument erforderlich:

  • msg: ein Objekt des Typs „Mitteilung“, das vom Port „roVideo“ bereitgestellt wird.

Beispielcode für Metadaten

Im folgenden Beispiel sehen Sie, wie die Metadaten vom roVideo-Port verarbeitet und über StreamManager.onMessage() an das IMA SDK übergeben werden.

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

Weitere Informationen zum Einbinden der Schleifenverarbeitung, die Streammetadaten in Ihre App verarbeitet, finden Sie im Startleitfaden für IMA Roku. Der Abschnitt zu Ereignis-Listenern und Stream-Start in der Anleitung enthält die Schleife zur Metadatenverarbeitung.

HLS-CMAF-Streams

HLS-Streams der linearen dynamischen Anzeigenbereitstellung, die das Common Media Application Framework (CMAF) verwenden, übergeben zeitgesteuerte Metadaten gemäß dem Standard ID3 bis CMAF über In-Band-eMSGv1-Felder. Diese eMSG-Felder sind am Anfang jedes Mediensegments eingebettet, wobei jede ID3-eMSG einen PTS relativ zur letzten Unterbrechung im Stream enthält.

Bei IMA Roku senden alle HLS-CMAF-Streams In-Band-ID3-Daten im eMSGv0-Format. IMA kombiniert die aus dem eMSGv0-Format bereitgestellten Informationen mit den Informationen aus dem Videoobjekt.

Damit HLS-CMAF-Stream-ID3-Ereignisse richtig geparst werden, müssen Sie Ihr Videoobjekt in der Streamanfrage mit StreamRequest.videoObject senden.