Как обрабатывать временные метаданные в линейных потоках с динамической вставкой объявлений

Выберите платформу: HTML5 Roku

Для отслеживания позиций зрителей и событий объявлений на стороне клиента IMA DAI SDK использует метаданные, встроенные в медиасегменты потока (внутриполосные метаданные) или в файл манифеста потоковой передачи (метаданные в манифесте). Метаданные доступны в потоке динамической вставки объявлений в разных форматах в зависимости от типа воспроизводимого потока. IMA DAI SDK обрабатывает все форматы метаданных через один API.

Приложение должно собирать метаданные и передавать их в IMA DAI SDK. Для передачи этой информации в SDK предусмотрен метод StreamManager.onMessage(). Этот метод пересылает метаданные в виде объекта msg, предоставленного портом roVideo. Затем эти объекты обрабатываются IMA DAI SDK, чтобы определить время рекламных событий. Она принимает один аргумент:

  • msg – объект типа msg, предоставляемый портом roVideo.

Образец кода метаданных

Ниже приведен пример того, как обрабатывать метаданные из порта roVideo и передавать их в IMA DAI SDK через 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, необходимо использовать сегменты медиаконтента в потоке с динамической вставкой объявлений, упакованные в поддерживаемый формат контейнера. Это позволяет Roku OS извлекать временные метаданные.

Roku Media Player поддерживает извлечение метаданных ID3 из следующих контейнеров:

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

Необработанные элементарные аудиопотоки, например необработанные сегменты AAC, не поддерживаются для временных метаданных в Roku OS. Roku Media Player не может извлекать временные метаданные ID3 из необработанных аудиопотоков AAC, поэтому IMA SDK не получает события метаданных и не отправляет веб-маяки для отслеживания или показа объявлений. Для всех потоков, содержащих только аудио, и потоков с аудиоверсиями необходимо использовать потоки с поддерживаемым форматом контейнера, например TS, MP4 или CMAF.

Потоки HLS CMAF

Потоки 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.