선형 DAI 스트림의 시간이 지정된 메타데이터 처리

양방향 미디어 광고 (IMA) 동적 광고 삽입 SDK (DAI)는 스트림의 미디어 세그먼트 (대역 내 메타데이터) 또는 스트리밍 매니페스트 파일 (매니페스트 내 메타데이터)에 삽입된 메타데이터 정보를 사용하여 시청자의 위치와 클라이언트 측 광고 이벤트를 추적합니다. 메타데이터는 재생 중인 스트림의 유형에 따라 DAI 스트림에서 다양한 형식으로 사용할 수 있습니다. Roku IMA SDK는 단일 API를 통해 모든 메타데이터 형식을 처리합니다.

앱은 메타데이터를 캡처하여 IMA DAI SDK에 전달해야 합니다. SDK는 이 정보를 전달하는 StreamManager.onMessage() 메서드를 제공합니다. 이 메서드는 roVideo 포트에서 제공하는 msg 객체 형식으로 메타데이터를 전달합니다. 그런 다음 IMA DAI SDK에서 이러한 객체를 처리하여 광고 이벤트 타이밍을 설정합니다. 단일 인수를 사용합니다.

  • msg: roVideo 포트에서 제공하는 메시지 유형 객체입니다.

메타데이터 샘플 코드

다음은 roVideo 포트에서 메타데이터를 처리하고 StreamManager.onMessage()를 통해 IMA SDK에 전달하는 방법을 보여주는 예입니다.

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 스트림

CMAF (Common Media Application Framework)를 사용하는 선형 DAI HLS 스트림은 ID3~CMAF 표준에 따라 대역 내 eMSGv1 박스를 통해 시간 지정된 메타데이터를 전달합니다. 이러한 eMSG 박스가 각 미디어 세그먼트의 시작 부분에 삽입되고 각 ID3 eMSG에는 스트림의 마지막 불연속성에 대한 PTS가 포함됩니다.

IMA Roku의 경우 모든 HLS CMAF 스트림은 eMSGv0 형식을 사용하여 대역 내 ID3 데이터를 전송합니다. IMA는 eMSGv0 형식에서 제공하는 정보를 동영상 객체의 정보와 결합합니다.

HLS CMAF 스트림 ID3 이벤트의 적절한 파싱을 사용 설정하려면 StreamRequest.videoObject를 사용하여 스트림 요청에서 동영상 객체를 전송해야 합니다.