लीनियर डीएआई स्ट्रीम में, तय समय के मेटाडेटा को मैनेज करना

इंटरैक्टिव मीडिया विज्ञापन (IMA) डाइनैमिक ऐड इंसर्शन SDK (डीएआई), स्ट्रीम के मीडिया सेगमेंट (इन-बैंड मेटाडेटा) या स्ट्रीमिंग मेनिफ़ेस्ट फ़ाइल (मेनिफ़ेस्ट मेटाडेटा) में जोड़े गए मेटाडेटा की जानकारी का इस्तेमाल करता है. डीएआई स्ट्रीम से मेटाडेटा अलग-अलग फ़ॉर्मैट में उपलब्ध होता है. यह इस बात पर निर्भर करता है कि स्ट्रीम किस तरह की है. Roku IMA SDK टूल, सभी मेटाडेटा फ़ॉर्मैट को एक ही एपीआई से मैनेज करता है.

मेटाडेटा को कैप्चर करने और उसे IMA डीएआई SDK टूल को भेजने के लिए, आपके ऐप्लिकेशन की ज़िम्मेदारी होती है. SDK टूल में, इस जानकारी को भेजने का StreamManager.onMessage() तरीका दिया जाता है. यह तरीका, roVideo पोर्ट से मिले msg ऑब्जेक्ट के रूप में मेटाडेटा को फ़ॉरवर्ड करता है. इसके बाद, IMA डीएआई 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 स्ट्रीम

लीनियर डीएआई HLS स्ट्रीम में, कॉमन मीडिया ऐप्लिकेशन फ़्रेमवर्क (CMAF) पास का इस्तेमाल किया जाता है. साथ ही, इसमें इन-बैंड eMSGv1 बॉक्स के ज़रिए तय समय वाला मेटाडेटा होता है. ऐसा ID3 से लेकर CMAF स्टैंडर्ड के मुताबिक होता है. ये eMSG बॉक्स हर मीडिया सेगमेंट की शुरुआत में जोड़े जाते हैं. ID3 के हर eMSG में स्ट्रीम के बीच में आने वाले समय के मुकाबले PTS होता है.

IMA Roku के लिए, सभी HLS CMAF स्ट्रीम, eMSGv0 फ़ॉर्मैट का इस्तेमाल करके इन-बैंड ID3 डेटा भेजते हैं. IMA, eMSGv0 फ़ॉर्मैट से मिली जानकारी को वीडियो ऑब्जेक्ट की जानकारी के साथ मिलाता है.

HLS सीएमएएफ़ स्ट्रीम आईडी3 इवेंट को सही तरीके से पार्स करने के लिए, आपको StreamRequest.videoObject का इस्तेमाल करके, स्ट्रीम अनुरोध में अपना वीडियो ऑब्जेक्ट भेजना होगा.