IMA SDK से, आपकी वेबसाइट और ऐप्लिकेशन में मल्टीमीडिया विज्ञापनों को जोड़ना आसान हो जाता है. IMA SDK, VAST-अनुपालन वाले किसी भी विज्ञापन सर्वर से विज्ञापन का अनुरोध कर सकता है और आपके ऐप्लिकेशन में विज्ञापन की प्लेबैक को मैनेज कर सकता है. IMA DAI SDK टूल की मदद से, ऐप्लिकेशन में विज्ञापन और कॉन्टेंट वीडियो के लिए स्ट्रीम का अनुरोध किया जाता है—वीओडी या लाइव कॉन्टेंट. इसके बाद SDK टूल, मिली-जुली वीडियो स्ट्रीम दिखाता है. इससे, आपको ऐप्लिकेशन में विज्ञापन और कॉन्टेंट वाले वीडियो के बीच स्विच करने से जुड़ी सेटिंग मैनेज करने की ज़रूरत नहीं पड़ती.
इस गाइड में IMA SDK को एक आसान वीडियो प्लेयर ऐप्लिकेशन में जोड़ने का तरीका बताया गया है. अगर आपको पूरा इंटिग्रेशन इंटिग्रेशन देखना है या इसके साथ काम करना है, तो GitHub से बुनियादी उदाहरण डाउनलोड करें.
IMA DAI के बारे में खास जानकारी
IMA DAI को लागू करने में SDK टूल के दो मुख्य कॉम्पोनेंट शामिल हैं, जो इस गाइड में दिखाए गए हैं:
StreamRequest
: ऐसा ऑब्जेक्ट जो स्ट्रीम के अनुरोध के बारे में बताता है. स्ट्रीम अनुरोध, मांग पर वीडियो या लाइव स्ट्रीम के लिए हो सकते हैं. अनुरोधों में एक Content ID के साथ-साथ, एक एपीआई कुंजी या पुष्टि करने वाले टोकन और दूसरे पैरामीटर के बारे में बताया जाता है.StreamManager
: एक ऑब्जेक्ट, जो डाइनैमिक विज्ञापन इंसर्शन स्ट्रीम और डीएआई बैकएंड के साथ इंटरैक्शन को मैनेज करता है. स्ट्रीम मैनेजर, ट्रैकिंग पिंग भी मैनेज करता है. साथ ही, स्ट्रीम और विज्ञापन इवेंट को प्रकाशक को फ़ॉरवर्ड करता है.
ज़रूरी शर्तें
शुरू करने से पहले, आपको ये काम करने होंगे:
- हमारे कम्पैटबिलटी पेज को पढ़ें और पक्का करें कि इस्तेमाल के उदाहरण वाला फ़ॉर्मैट काम करता हो.
- हमारा Roku सैंपल प्लेयर कोड डाउनलोड करें.
- यह पुष्टि करने के लिए कि आपके डेवलपमेंट का सेट अप काम कर रहा है, ऊपर दिए गए सैंपल प्लेयर कोड को Roku डिवाइस पर डिप्लॉय करें.
अपना वीडियो चलाएं
वीडियो प्लेयर का सैंपल, कॉन्टेंट कॉन्टेंट को बेहतरीन तरीके से चलाता है. सैंपल प्लेयर को अपने Roku प्लेयर पर डिप्लॉय करें, ताकि यह पक्का किया जा सके कि आपका डेवलपमेंट एनवायरमेंट सही तरीके से सेट अप किया गया है.
अपने वीडियो प्लेयर को IMA डाइनैमिक विज्ञापन इंसर्शन स्ट्रीम प्लेयर में बदलें
Sdk.xml बनाएं
अपने प्रोजेक्ट में MainScene.xml
Sdk.xml
नाम की एक नई फ़ाइल जोड़ें
और नीचे दिए गए बॉयलरप्लेट को जोड़ें:
Sdk.एक्सएमएल
<?xml version = "1.0" encoding = "utf-8" ?> <component name = "imasdk" extends = "Task"> <interface> </interface> <script type = "text/brightscript"> <![CDATA[ ' Your code goes here. ]]> </script> </component>
इस गाइड में आपको इन दोनों फ़ाइलों में बदलाव करना होगा. हर कोड स्निपेट के ऊपर मौजूद हेडिंग से पता चलता है कि आपको उस फ़ाइल को किस फ़ाइल में जोड़ने की ज़रूरत है.
Roku विज्ञापन फ़्रेमवर्क लोड करें
IMA SDK, Roku के विज्ञापन फ़्रेमवर्क पर निर्भर करता है. फ़्रेमवर्क लोड करने के लिए, इन्हें manifest
और Sdk.xml
में जोड़ें:
मेनिफ़ेस्ट
bs_libs_required=roku_ads_lib,googleima3
Sdk.एक्सएमएल
Library "Roku_Ads.brs" Library "IMA3.brs"
IMA SDK लोड करें
IMA डाइनैमिक विज्ञापन इंसर्शन स्ट्रीम लोड करने का पहला चरण, IMA SDK को लोड और शुरू करना है. यह IMA SDK स्क्रिप्ट को लोड करता है.
Sdk.एक्सएमएल
<interface> <field id="sdkLoaded" type="Boolean" /> <field id="errors" type="stringarray" /> </interface>
sub init() m.top.functionName = "runThread" End Sub sub runThread() if not m.top.sdkLoaded loadSdk() End If End Sub sub loadSdk() If m.sdk = invalid m.sdk = New_IMASDK() End If m.top.sdkLoaded = true End Sub
अब MainScene.xml
में यह काम शुरू करें और कॉन्टेंट स्ट्रीम लोड करने के लिए,
कॉल हटाएं.
मेनस्केन.एक्सएमएल
function init() m.video = m.top.findNode("myVideo") m.video.notificationinterval = 1 loadImaSdk() end function function loadImaSdk() as void m.sdkTask = createObject("roSGNode", "imasdk") m.sdkTask.observeField("sdkLoaded", "onSdkLoaded") m.sdkTask.observeField("errors", "onSdkLoadedError") m.sdkTask.control = "RUN" end function Sub onSdkLoaded(message as Object) print "----- onSdkLoaded --- control ";message End Sub Sub onSdkLoadedError(message as Object) print "----- errors in the sdk loading process --- ";message End Sub
IMA स्ट्रीम प्लेयर बनाएं
इसके बाद, IMA स्ट्रीम प्लेयर बनाने के लिए आपको अपने मौजूदा roVideoScreen
का इस्तेमाल करना होगा.
यह स्ट्रीम प्लेयर तीन कॉलबैक मेथड लागू करता है: loadUrl
,
adBreakStarted
, और adBreakEnded
. साथ ही, स्ट्रीम लोड होने पर
ट्रिक प्ले की सुविधा बंद कर दें. यह उपयोगकर्ताओं को विज्ञापन शुरू होने से पहले इवेंट शुरू होने से पहले, वीडियो शुरू होने से पहले उसे छोड़कर आगे बढ़ने से रोकता है.
Sdk.एक्सएमएल
<interface> <field id="sdkLoaded" type="Boolean" /> <field id="errors" type="stringarray" /> <field id="urlData" type="assocarray" /> <field id="adPlaying" type="Boolean" /> <field id="video" type="Node" /> </interface> ... sub setupVideoPlayer() sdk = m.sdk m.player = sdk.createPlayer() m.player.top = m.top m.player.loadUrl = Function(urlData) m.top.video.enableTrickPlay = false m.top.urlData = urlData End Function m.player.adBreakStarted = Function(adBreakInfo as Object) print "---- Ad Break Started ---- " m.top.adPlaying = True m.top.video.enableTrickPlay = false End Function m.player.adBreakEnded = Function(adBreakInfo as Object) print "---- Ad Break Ended ---- " m.top.adPlaying = False m.top.video.enableTrickPlay = true End Function m.player.seek = Function(timeSeconds as Float) print "---- SDK requested seek to ----" ; timeSeconds m.top.video.seekMode = "accurate" m.top.video.seek = timeSeconds End Function End Sub
स्ट्रीम का अनुरोध करना और उसे लागू करना
स्ट्रीम प्लेयर की तरह, अब आप स्ट्रीम का अनुरोध कर सकते हैं और उसे लागू कर सकते हैं.
इस उदाहरण में लाइव स्ट्रीम और वीओडी स्ट्रीम के लिए डेटा है. फ़िलहाल, वीओडी स्ट्रीम का इस्तेमाल किया जा रहा है.
वीओडी के बजाय लाइव स्ट्रीम का इस्तेमाल करने के लिए, selectedStream
को m.testVodStream
से
m.testLiveStream
में बदलें.
AdUI आइकॉन जैसे AdUI को सपोर्ट करने के लिए, आपको नोड के लिए रेफ़रंस भी पास करना होगा जिसमें आपके अनुरोध के तौर पर आपका कॉन्टेंट वीडियो होगा.
मेनस्केन.एक्सएमएल
function init() m.video = m.top.findNode("myVideo") m.video.notificationinterval = 1 m.testLiveStream = { title: "Live Stream", assetKey: "sN_IYUG8STe1ZzhIIE_ksA", apiKey: "", type: "live" } m.testVodStream = { title: "VOD stream" contentSourceId: "2528370", videoId: "tears-of-steel", apiKey: "", type: "vod" } loadImaSdk() end function function loadImaSdk() as void m.sdkTask = createObject("roSGNode", "imasdk") m.sdkTask.observeField("sdkLoaded", "onSdkLoaded") m.sdkTask.observeField("errors", "onSdkLoadedError") selectedStream = m.testVodStream m.videoTitle = selectedStream.title m.sdkTask.streamData = selectedStream m.sdkTask.video = m.video m.sdkTask.control = "RUN" end function
Sdk.एक्सएमएल
<interface> <field id="sdkLoaded" type="Boolean" /> <field id="errors" type="stringarray" /> <field id="urlData" type="assocarray" /> <field id="adPlaying" type="Boolean" /> <field id="video" type="Node" /> <field id="streamData" type="assocarray" /> <field id="streamManagerReady" type="Boolean" /> </interface>
sub runThread() if not m.top.sdkLoaded loadSdk() End If if not m.top.streamManagerReady loadStream() End If End Sub Sub loadStream() sdk = m.sdk sdk.initSdk() setupVideoPlayer() request = {} if m.top.streamData.type = "live" request = sdk.CreateLiveStreamRequest(m.top.streamData.assetKey, m.top.streamData.apiKey) else if m.top.streamData.type = "vod" request = sdk.CreateVodStreamRequest(m.top.streamData.contentSourceId, m.top.streamData.videoId, m.top.streamData.apiKey) else request = sdk.CreateStreamRequest() end if request.player = m.player request.adUiNode = m.top.video request.videoObject = m.top.video requestResult = sdk.requestStream(request) If requestResult <> Invalid print "Error requesting stream ";requestResult Else m.streamManager = Invalid While m.streamManager = Invalid sleep(50) m.streamManager = sdk.getStreamManager() End While If m.streamManager = Invalid or m.streamManager["type"] <> Invalid or m.streamManager["type"] = "error" errors = CreateObject("roArray", 1, True) print "error ";m.streamManager["info"] errors.push(m.streamManager["info"]) m.top.errors = errors Else m.top.streamManagerReady = True addCallbacks() m.streamManager.start() End If End If End Sub
इवेंट लिसनर जोड़ें और स्ट्रीम शुरू करें
स्ट्रीम का अनुरोध करने के बाद, आपको बस कुछ काम करने होंगे: विज्ञापन की प्रगति ट्रैक करने, स्ट्रीम शुरू करने, और SDK टूल को Roku पर फ़ॉरवर्ड करने के लिए, इवेंट लिसनर जोड़ें. यह ज़रूरी है कि विज्ञापन दिखाने के लिए, SDK टूल को सभी मैसेज भेजे जाएं.
मेनस्केन.एक्सएमएल
function loadImaSdk() as void m.sdkTask = createObject("roSGNode", "imasdk") m.sdkTask.observeField("sdkLoaded", "onSdkLoaded") m.sdkTask.observeField("errors", "onSdkLoadedError") selectedStream = m.testVodStream m.videoTitle = selectedStream.title m.sdkTask.streamData = selectedStream m.sdkTask.observeField("urlData", "urlLoadRequested") m.sdkTask.video = m.video m.sdkTask.control = "RUN" end function Sub urlLoadRequested(message as Object) print "Url Load Requested ";message data = message.getData() playStream(data.manifest) End Sub Sub playStream(url as Object) vidContent = createObject("RoSGNode", "ContentNode") vidContent.url = url vidContent.title = m.videoTitle vidContent.streamformat = "hls" m.video.content = vidContent m.video.setFocus(true) m.video.visible = true m.video.control = "play" m.video.EnableCookies() End Sub
Sdk.एक्सएमएल
sub runThread() if not m.top.sdkLoaded loadSdk() End If if not m.top.streamManagerReady loadStream() End If If m.top.streamManagerReady runLoop() End If End Sub Sub runLoop() m.top.video.timedMetaDataSelectionKeys = ["*"] m.port = CreateObject("roMessagePort") ' Listen to all fields. ' IMPORTANT: Failure to listen to the position and timedmetadata fields ' could result in ad impressions not being reported. 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 Function addCallbacks() as Void m.streamManager.addEventListener(m.sdk.AdEvent.ERROR, errorCallback) m.streamManager.addEventListener(m.sdk.AdEvent.START, startCallback) m.streamManager.addEventListener(m.sdk.AdEvent.FIRST_QUARTILE, firstQuartileCallback) m.streamManager.addEventListener(m.sdk.AdEvent.MIDPOINT, midpointCallback) m.streamManager.addEventListener(m.sdk.AdEvent.THIRD_QUARTILE, thirdQuartileCallback) m.streamManager.addEventListener(m.sdk.AdEvent.COMPLETE, completeCallback) End Function Function startCallback(ad as Object) as Void print "Callback from SDK -- Start called - " End Function Function firstQuartileCallback(ad as Object) as Void print "Callback from SDK -- First quartile called - " End Function Function midpointCallback(ad as Object) as Void print "Callback from SDK -- Midpoint called - " End Function Function thirdQuartileCallback(ad as Object) as Void print "Callback from SDK -- Third quartile called - " End Function Function completeCallback(ad as Object) as Void print "Callback from SDK -- Complete called - " End Function Function errorCallback(error as Object) as Void print "Callback from SDK -- Error called - "; error m.errorState = True End Function