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