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.