SDK для динамической вставки рекламы в интерактивные медиафайлы (IMA) использует метаданные, встроенные в медиасегменты потока (внутриполосные метаданные) или в файл манифеста потока (внутриманифестные метаданные), для отслеживания местоположения зрителей и событий рекламы на стороне клиента. Метаданные доступны из потока DAI в различных форматах, в зависимости от типа воспроизводимого потока. SDK IMA DAI обрабатывает все форматы метаданных через единый API.
Ваше приложение отвечает за сбор метаданных и их передачу в SDK IMA DAI. SDK предоставляет метод StreamManager.onMessage() для передачи этой информации. Этот метод передает метаданные в виде объекта msg , предоставляемого портом roVideo. Затем эти объекты обрабатываются SDK IMA DAI для определения времени показа рекламных событий. Метод принимает один аргумент:
-
msg: объект типа msg, предоставляемый портом roVideo.
Пример кода для работы с метаданными
Вот пример того, как обрабатывать метаданные из порта roVideo и передавать их в SDK IMA DAI через 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 . Раздел руководства, посвященный обработчику событий и запуску потока, содержит описание цикла обработки метаданных.
Потоки HLS CMAF
Линейные потоки DAI HLS, использующие Common Media Application Framework (CMAF), передают синхронизированные метаданные через внутриполосные блоки eMSGv1, соответствующие стандарту ID3 через CMAF . Эти блоки eMSG встраиваются в начало каждого медиасегмента, при этом каждый блок ID3 eMSG содержит PTS относительно последнего разрыва в потоке.
Для IMA Roku все потоки HLS CMAF передают внутриполосные данные ID3 в формате eMSGv0. IMA объединяет информацию, предоставляемую форматом eMSGv0, с информацией из видеообъекта.
Для корректного анализа событий ID3 потока HLS CMAF необходимо отправлять видеообъект в запросе потока, используя StreamRequest.videoObject .