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

Plattform auswählen: HTML5 Roku

Das Interactive Media Ads (IMA) Dynamic Ad Insertion SDK (DAI) verwendet Metadaten, die in die Media-Segmente des Streams (In-Band-Metadaten) oder in die Streaming-Manifestdatei (In-Manifest-Metadaten) eingebettet sind, um die Positionen der Zuschauer und clientseitige Anzeigenereignisse zu erfassen. Metadaten sind im DAI-Stream in verschiedenen Formaten verfügbar, je nachdem, welche Art von Stream wiedergegeben wird. Das IMA DAI 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 StreamManager.onMessage() Methode, 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 für Anzeigenereignisse festzulegen. Die Methode verwendet ein einzelnes Argument:

  • msg: ein Objekt vom Typ „msg“, das vom roVideo-Port bereitgestellt wird.

Beispielcode für Metadaten

Hier sehen Sie ein Beispiel dafür, wie Sie die Metadaten vom roVideo-Port verarbeiten und über StreamManager.onMessage() an das IMA DAI SDK übergeben.

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 Stream-Metadaten für die Schleifenverarbeitung in Ihre App finden Sie im Startleitfaden für IMA Roku. Der Abschnitt zum Ereignis-Listener und zum Streamstart des Leitfadens enthält die Schleife für die Metadatenverarbeitung.

Anforderungen an Streamformat und Container

Wenn Sie clientseitiges Anzeigen-Tracking auf Roku aktivieren möchten, müssen Sie Media-Segmente in Ihrem DAI-Stream verwenden, die in einem unterstützten Containerformat verpackt sind. So kann Roku OS zeitgesteuerte Metadaten extrahieren.

Der Roku Mediaplayer unterstützt die In-Band-ID3-Metadatenextraktion in den folgenden Containerformaten:

  • MPEG-2 Transport Stream (TS)
  • Fragmentiertes MP4
  • Common Media Application Format (CMAF)

Rohe elementare Audiostreams wie rohe AAC-Segmente (Advanced Audio Coding) werden für zeitgesteuerte Metadaten auf Roku OS nicht unterstützt. Der Roku Mediaplayer kann keine zeitgesteuerten ID3-Metadaten aus rohen AAC-Audiostreams extrahieren. Dadurch kann das IMA SDK keine Metadatenereignisse empfangen und keine Anzeigenimpressionen- oder Tracking-Beacons senden. Für alle reinen Audiostreams und Audiowiedergabestreams müssen Sie Streams mit unterstützten Containerformaten wie TS, MP4 oder CMAF verwenden.

HLS-CMAF-Streams

Lineare DAI-HLS-Streams, die das Common Media Application Framework (CMAF) verwenden, übergeben zeitgesteuerte Metadaten über In-Band-eMSGv1-Boxen gemäß dem ID3 über CMAF Standard. Diese eMSG-Boxen sind am Anfang jedes Media-Segments eingebettet. Jede ID3-eMSG enthält einen PTS relativ zur letzten Unterbrechung im Stream.

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

Damit HLS-CMAF-Stream-ID3-Ereignisse ordnungsgemäß geparst werden können, müssen Sie Ihr Videoobjekt in der Streamanfrage mit StreamRequest.videoObject senden.