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 . Раздел руководства, посвященный обработчику событий и запуску потока, содержит описание цикла обработки метаданных.
Требования к формату потока и контейнеру
Для включения отслеживания рекламы на стороне клиента на Roku необходимо использовать медиасегменты в вашем потоке DAI, упакованные в поддерживаемый формат контейнера. Этот процесс позволяет Roku OS извлекать метаданные с привязкой ко времени.
Медиаплеер Roku поддерживает внутриполосное извлечение метаданных ID3 для следующих форматов контейнеров:
- Транспортный поток MPEG-2 (TS)
- Фрагментированный MP4
- Общий формат мультимедийных приложений (CMAF)
В операционной системе Roku OS не поддерживаются исходные аудиопотоки, такие как сегменты Advanced Audio Coding (AAC), для временных метаданных. Медиаплеер Roku не может извлекать временные метаданные ID3 из исходных аудиопотоков AAC, что препятствует получению событий метаданных IMA SDK и отправке показов рекламы или маяков отслеживания. Для всех аудиопотоков и потоков с воспроизведением аудио необходимо использовать потоки с поддерживаемыми форматами упаковки контейнеров, такими как TS, MP4 или CMAF.
Потоки 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 .