इंटरैक्टिव मीडिया विज्ञापन (IMA) का डाइनैमिक विज्ञापन इंसर्शन एसडीके (डीएआई), दर्शकों की पोज़िशन और क्लाइंट-साइड विज्ञापन इवेंट को ट्रैक करने के लिए, स्ट्रीम के मीडिया सेगमेंट (इन-बैंड मेटाडेटा) में एम्बेड की गई मेटाडेटा की जानकारी या स्ट्रीमिंग मेनिफ़ेस्ट फ़ाइल (इन-मेनिफ़ेस्ट मेटाडेटा) पर निर्भर करता है. डीएआई स्ट्रीम से मेटाडेटा अलग-अलग फ़ॉर्मैट में उपलब्ध होता है. यह इस बात पर निर्भर करता है कि किस तरह की स्ट्रीम चलाई जा रही है. IMA DAI SDK, एक ही एपीआई के ज़रिए सभी मेटाडेटा फ़ॉर्मैट को मैनेज करता है.
मेटाडेटा कैप्चर करने और उसे IMA DAI SDK टूल को भेजने की ज़िम्मेदारी आपके ऐप्लिकेशन की होती है. SDK टूल, यह जानकारी देने के लिए StreamManager.onMessage()
तरीका उपलब्ध कराता है. यह तरीका, roVideo पोर्ट से मिले msg
ऑब्जेक्ट के तौर पर मेटाडेटा फ़ॉरवर्ड करता है. इसके बाद, इन ऑब्जेक्ट को IMA DAI SDK टूल प्रोसेस करता है, ताकि विज्ञापन इवेंट के लिए समय तय किया जा सके. इसमें सिर्फ़ एक आर्ग्युमेंट होता है:
msg
: roVideo पोर्ट से मिला msg टाइप ऑब्जेक्ट.
मेटाडेटा का सैंपल कोड
यहां 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 की शुरुआती गाइड देखें. गाइड के इवेंट लिसनर और स्ट्रीम शुरू करने वाले सेक्शन में, मेटाडेटा हैंडलिंग लूप होता है.
एचएलएस सीएमएएफ़ स्ट्रीम
कॉमन मीडिया ऐप्लिकेशन फ़्रेमवर्क (सीएमएएफ़) का इस्तेमाल करने वाली लीनियर डीएआई एचएलएस स्ट्रीम, सीएमएएफ़ के ज़रिए आईडी3 स्टैंडर्ड के मुताबिक, इन-बैंड eMSGv1 बॉक्स के ज़रिए टाइम किया गया मेटाडेटा पास करती हैं. ये eMSG बॉक्स, हर मीडिया सेगमेंट की शुरुआत में एम्बेड किए जाते हैं. हर ID3 eMSG में, स्ट्रीम में आखिरी बार रुकावट आने के समय के हिसाब से पीटीएस होता है.
IMA Roku के लिए, सभी HLS CMAF स्ट्रीम, eMSGv0 फ़ॉर्मैट का इस्तेमाल करके इन-बैंड ID3 डेटा भेजती हैं. IMA, eMSGv0 फ़ॉर्मैट से मिली जानकारी को वीडियो ऑब्जेक्ट से मिली जानकारी के साथ जोड़ता है.
एचएलएस सीएमएएफ़ स्ट्रीम के आईडी3 इवेंट को सही तरीके से पार्स करने के लिए, आपको StreamRequest.videoObject
का इस्तेमाल करके, स्ट्रीम के अनुरोध में अपना वीडियो ऑब्जेक्ट भेजना होगा.