Interactive Media Ads (IMA) 동적 광고 삽입 SDK (DAI)는 스트림의 미디어 세그먼트 (인밴드 메타데이터) 또는 스트리밍 매니페스트 파일 (인매니페스트 메타데이터)에 삽입된 메타데이터 정보를 사용하여 시청자의 위치와 클라이언트 측 광고 이벤트를 추적합니다. 메타데이터는 재생되는 스트림의 유형에 따라 다양한 형식으로 DAI 스트림에서 사용할 수 있습니다. IMA DAI SDK는 단일 API를 통해 모든 메타데이터 형식을 처리합니다.
앱에서 메타데이터를 캡처하여 IMA DAI SDK로 전달해야 합니다. SDK는 이 정보를 전달하는 StreamManager.onMessage()
메서드를 제공합니다. 이 메서드는 roVideo 포트에서 제공하는 msg
객체 형식으로 메타데이터를 전달합니다. 이러한 객체는 IMA DAI SDK에 의해 처리되어 광고 이벤트의 타이밍을 설정합니다. 이 함수는 하나의 인수를 사용합니다.
msg
: roVideo 포트에서 제공하는 메시지 유형 객체입니다.
메타데이터 샘플 코드
다음은 roVideo 포트의 메타데이터를 처리하고 StreamManager.onMessage()
를 통해 IMA DAI 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 스트림
Common Media Application Framework (CMAF)를 사용하는 선형 DAI HLS 스트림은 ID3 through CMAF 표준에 따라 인밴드 eMSGv1 상자를 통해 시간 메타데이터를 전달합니다. 이러한 eMSG 상자는 각 미디어 세그먼트의 시작 부분에 삽입되며 각 ID3 eMSG에는 스트림의 마지막 불연속점과 관련된 PTS가 포함됩니다.
IMA Roku의 경우 모든 HLS CMAF 스트림은 eMSGv0 형식을 사용하여 인밴드 ID3 데이터를 전송합니다. IMA는 eMSGv0 형식에서 제공하는 정보와 동영상 객체의 정보를 결합합니다.
HLS CMAF 스트림 ID3 이벤트를 올바르게 파싱하려면 StreamRequest.videoObject
를 사용하여 스트림 요청에서 동영상 객체를 전송해야 합니다.