SCTE-35 को Stream सर्वर पर भेजना

SCTE मार्कर मुख्य रूप से वीडियो आउटपुट में विज्ञापन डालने के लिए रिसीवर (जैसे Streamिंग सर्वर) को यह संकेत देने के लिए उपयोग किए जाते हैं कि विज्ञापन कब और कितनी अवधि के लिए डाले जाएँ। इससे तीसरे पक्ष के सिस्टम को डेटाबेस से विज्ञापनों को गतिशील रूप से चुनने की अनुमति मिलती है। आप सामान्यतः SCTE-35 के बारे में और अधिक पढ़ सकते हैं। इस वेबसाइट पर.

इस लेख में:
परिचय
SCTE-35 मार्कर उदाहरण
स्थानीय रूप से SCTE-35 मार्कर का परीक्षण करें
निम्बल Streamer में SCTE-35 मार्कर का परीक्षण
अतिरिक्त जानकारी


परिचय

हम यह भी अनुशंसा करते हैं SCTE पर हमारा सामान्य लेख.

आप PLAYDECK में SCTE मार्कर को 4 अलग-अलग ऑब्जेक्ट्स से जोड़ सकते हैं:
– क्लिप्स (कोई भी स्थिति)
– ब्लॉक (शुरुआत और अंत)
– ओवरले (दिखाएँ और छिपाएँ)
– क्रियाएँ बटन

आपको पूर्वनिर्धारित SCTE मार्कर प्रदान करने के बजाय, हमने एक अलग दृष्टिकोण अपनाया: आपको अपना खुद का SCTE मार्कर लिखना होगा। यह थोड़ी सी सीखने की प्रक्रिया हो सकती है, लेकिन अंत में यह बहुत अधिक लचीला है। इसका फायदा यह है कि आप हमेशा सभी रिसीवरों के साथ संगत रहेंगे। क्लिप की अवधि और अन्य “चर” इकट्ठा करने के लिए हम कुछ “प्लेसहोल्डर” प्रदान करते हैं।.

कृपया ध्यान दें कि आपके Stream विकल्पों में SCTE सक्षम होना चाहिए:


SCTE-35 मार्कर उदाहरण

आइए कुछ SCTE-35 नमूने देखें। यह SCTE-35 का सबसे अधिक प्रयुक्त रूप है जिसे “स्प्लाइसिंग” कहा जाता है।.

नोट: यहाँ प्रस्तुत SCTE-35 प्रारूप Nimble Streamer के साथ सबसे अच्छा काम करता है (नीचे देखें)। आपके Stream सर्वर के आधार पर, प्रारूप अलग हो सकता है। अपने प्रदाता से पूछें।.

यह एक विज्ञापन डालकर निर्दिष्ट अवधि के बाद स्वचालित रूप से आपके प्रोग्राम में वापस लौट जाएगा। आपकी वर्तमान चल रही क्लिप के लिए अवधि स्वचालित रूप से PLAYDECK द्वारा सेट की जाएगी। इसे {blockduration} या किसी मैनुअल मान से बदला जा सकता है। यदि आप अवधि के लिए मैनुअल मान चुनते हैं, तो सूत्र है: CLIP DURATION को 90000 से गुणा करके राउंड किया जाता है। इसके पीछे का कारण यह है कि 90000 वह डिफ़ॉल्ट टाइमस्केल है जिसका उपयोग अधिकांश SCTE सिस्टम करते हैं। उदाहरण: क्लिप 12.4 सेकंड की है, तो SCTE अवधि 1116000 होगी।.

अवधि भेजने के बजाय, आप विज्ञापन की शुरुआत और अंत के लिए दो अलग-अलग SCTE मार्कर भी भेज सकते हैं। इन्हें CUE-OUT (विज्ञापन के लिए अपने प्रोग्राम से बाहर निकलना) और CUE-IN (अपने प्रोग्राम में वापस आना) कहा जाता है।.

जैसा कि आपने शायद पहले ही देखा होगा, एकमात्र अंतर “outOfNetworkIndicator” का 1 (CUE-OUT) और 0 (CUE-IN) होना है। SCTE सिस्टम स्वयं “spliceEventId” के आधार पर दोनों मार्करों को जोड़ेगा।.

नोट: समर्थित प्लेसहोल्डर हैं: {timestamp} {timestampunix} {airtimenext} {airtimenextunix} {plannednext} {plannednextunix} {clipid} {blockid} {blockduration} {clipduration}


स्थानीय रूप से SCTE-35 मार्कर का परीक्षण करें

PLAYDECK खोलें। अभी आपको कोई क्लिप लोड करने की आवश्यकता नहीं है। किसी भी ACTION बटन पर राइट-क्लिक करें, एक नया Action बनाएँ और COMMANDS/SCTE चुनें:

SCTE-35 पर क्लिक करके SCTE-35 सैंपल टैग डालें। पॉपअप को OK (दो बार) से बंद करें।

अब हम किसी भी संगत Stream (UDP, DVB, SRT) को SCTE-35 टैग भेज सकते हैं। यदि आप अभी एक्शन पर क्लिक करेंगे, तो कुछ नहीं होगा, क्योंकि हमारे पास अभी Stream नहीं है।.

आइए एक Test UDP Stream बनाएँ, जहाँ हम बस आउटपुट को एक फ़ाइल में भेजते हैं, ताकि हमें अभी सर्वर से जुड़ी चीज़ों की झंझट न करनी पड़े। निम्नलिखित सेटिंग्स कॉपी करें और START NOW पर क्लिक करके Stream शुरू करें। SCTE-35 को “Parameter” के साथ सक्षम करना न भूलें:

हम अपना Sample SCTE-35 टैग अब Stream को भेजना चाहते हैं। इसलिए सेटिंग्स बंद करें और अपने एक्शन बटन को कई बार क्लिक करें, फिर सेटिंग्स में वापस जाएँ और STOP NOW से अपने Stream को रोकें।.

आपके SCTE-35 टैग्स PLAYDECK द्वारा लॉग किए गए हैं। आप लॉग्स देख सकते हैं, यदि आप एक्शन बटन पर अपने SCTE-35 कोड पर वापस जाते हैं और 'इवेंट लॉग्स खोलें' पर क्लिक करते हैं:

आप SCTE-35 टैग्स को भी दिखाई देने योग्य बना सकते हैं, जो आपके रिकॉर्ड किए गए Stream में हैं। इसके लिए हमें “DVBInspector” नामक एक अलग टूल की आवश्यकता है। इस टूल को JAVA रनटाइम की भी आवश्यकता है, इसलिए दोनों डाउनलोड करें:

इस टूल के लिए JAVA रनटाइम आवश्यक है। यदि यह पहले से स्थापित नहीं है, तो आप इसे यहाँ डाउनलोड कर सकते हैं:
https://www.oracle.com/java/technologies/downloads/

अब अपने “DVBinspector-1.18.0-dist.zip” (या समान) को अनज़िप करें और “DVBinspector-1.18.0.jar” चलाएँ। फिर अपनी TS फ़ाइल को एप्लिकेशन पर ड्रैग और ड्रॉप करें। अपना SCTE मार्कर देखने के लिए निम्नलिखित क्रम में ट्री खोलें।.


निम्बल Streamer में SCTE-35 मार्कर का परीक्षण

Nimble Streamer हमारी पसंदीदा Streaming सेवा है। यह लागत-कुशल है, सेटअप और रखरखाव में आसान है, लेकिन उन्नत उपयोग मामलों के लिए इसमें जटिलता की गहराई भी है:

https://softvelum.com/nimble/

PLAYDECK जिस मशीन पर चल रहा है, उसी पर Nimble का 14-दिन का ट्रायल संस्करण इंस्टॉल करें। यह अनिवार्य नहीं है, लेकिन इससे चीजें सरल हो जाती हैं, क्योंकि आपको नेटवर्क सेटअप से जूझना नहीं पड़ता। आपसे Nimble द्वारा WMSPanel में एक खाता बनाने के लिए भी कहा जाएगा, जो Nimble के लिए एक वेब-आधारित सेटअप टूल है, क्योंकि Nimble Streamer स्वयं बिना यूज़र इंटरफ़ेस के इंस्टॉल होता है।.

जानकारी: इस SCTE-35 सैंपल को काम करने के लिए, यदि आप इसे लाइव इंस्टॉलेशन पर टेस्ट करते हैं तो आपको “Nimble Live Transcoder” या “Nimble Advertizer” प्लगइन्स की आवश्यकता नहीं है। ये ट्रायल इंस्टॉलेशन में डिफ़ॉल्ट रूप से अक्षम होते हैं।.

एक बार जब आप Nimble को चला लेते हैं, तो आपको एक और कॉन्फ़िगरेशन मैन्युअली करना होगा। यहाँ Nimble सर्वर कॉन्फ़िगरेशन फ़ाइल खोलें:
सी:\प्रोग्राम फाइल्स\निम्बल 1टीपी25टेर\कॉन्फ\निम्बल.कॉन्फ

इस फ़ाइल के अंत में निम्नलिखित पंक्तियाँ जोड़ें और फ़ाइल सहेजें।.

scte35_processing_enabled = true 
scte35_forwarding_enabled = true 
hls_ad_scte35_forwarding_enabled = true
hls_ad_marker_format = cue
hls_ad_splice_out_cont_marker_enabled = true

महत्वपूर्ण: आपको अब Nimble को पुनः आरंभ करना होगा, इसके लिए या तो अपना पीसी पुनः आरंभ करें या Windows सेवा “Nimble Streamer” को मैन्युअली पुनः आरंभ करें।.

यहाँ फिर से लाइनें हैं, लेकिन आपके लिए टिप्पणियों के साथ (इनका उपयोग न करें):

scte35_processing_enabled = true  // सामान्य रूप से SCTE मॉड्यूल को सक्षम करता है। अन्य सभी विकल्पों के लिए आवश्यक है
scte35_forwarding_enabled = true  // लाइव ट्रांसकोडर के माध्यम से SCTE-35 मार्करों को पास करने की अनुमति देता है
hls_ad_scte35_forwarding_enabled = true  // HLS स्ट्रीम में SCTE-35 मार्करों को फॉरवर्ड करना सक्षम करता है
hls_ad_marker_format = cue  // Nimble को CUE-OUT और CUE-IN मार्करों का उपयोग करने के लिए सेट करता है
hls_ad_splice_out_cont_marker_enabled = true  // EXT-X-CUE-OUT-CONT के स्वचालित सम्मिलन को सक्षम करता है

अब चलिए WMSPanel में आपका Streams सेटअप करते हैं:
सबसे पहले हम अपनी इनकमिंग Stream को परिभाषित करेंगे। मेनू में “Nimble Streamer” पर जाएँ, “MPEGTS In” चुनें और “Add UDP stream” बटन पर क्लिक करें, फिर इस तरह इनकमिंग स्ट्रीम जोड़ें। यदि पोर्ट 5001 पहले से उपयोग में हो तो आप कोई अन्य पोर्ट उपयोग कर सकते हैं।.

अगले हम आउटगोइंग स्ट्रीम प्रारूप सेटअप करने जा रहे हैं। हम यहाँ SCTE मार्कर का UDP से HLS में रूपांतरण दिखाने के लिए HLS का उपयोग करना चाहते हैं। उसी पेज पर “MPEGTS Out” पर जाएँ और “Add outgoing stream” बटन पर क्लिक करें, फिर इस तरह जोड़ें। सुनिश्चित करें कि आपने अपनी इनपुट स्ट्रीम को वीडियो और ऑडियो स्रोत के रूप में चुना है।.

अगला हम PLAYDECK में अपनी सेटअप जारी रखते हैं। Stream आउटपुट सेटिंग्स पर जाएँ और Stream URL को “udp://127.0.0.1:5001” में बदलें।.

जानकारी: आप अपनी पसंद का कोई भी वीडियो कोडेक चुन सकते हैं। इस मामले में मैंने एनकोडिंग के लिए NVIDIA GPU का उपयोग करने हेतु H.264 चुना, जिससे मेरा CPU उपयोग कम हो जाएगा। साथ ही “Parameter” के साथ SCTE-35 को भी सक्षम करें।.

जानकारी: कृपया ध्यान दें कि PLAYDECK सीधे HLS स्ट्रीम करने में सक्षम नहीं है। यदि आप “Apple HTTP Live Streaming” को Streaming फॉर्मेट के रूप में चुनते हैं, तो आउटपुट एक फ़ाइल में लिखा जाएगा। इसलिए आपको फ़ाइल लक्ष्य को “Stream URL” के रूप में निर्दिष्ट करना होगा, उदाहरण के लिए “c:\Users\Public\Documents\stream.m3u8”। फिर किसी भी स्ट्रीमिंग सर्वर का उपयोग करके स्ट्रीम करने के लिए उस फ़ाइल का उपयोग करें। PLAYDECK HLS मैनिफेस्ट फ़ाइल (*.3u8 फ़ाइल) में HLS SCTE टैग नहीं लिख सकता है।.

अगला हम चाहते हैं कि PLAYDECK स्वचालित रूप से SCTE भेजे, सिर्फ बटन के माध्यम से नहीं बल्कि क्लिप से संबंधित। इसलिए हम कोई भी क्लिप डालते हैं और टूलबार में COMMANDS आइकन पर क्लिक करते हैं, फिर एक नया कमांड जोड़ते हैं, PLAY TIME 0 चुनते हैं, और फिर SCTE-35 सैंपल डालते हैं:

जानकारी: आप ब्लॉक्स, ओवरले और एक्शन बटनों में SCTE मार्कर भी जोड़ सकते हैं।.

अब चलिए काम शुरू करते हैं: क्लिप को CUE करें और PLAY करें तथा PLAYDECK सेटिंग्स में Stream शुरू करें। WMSPanel पर जाएँ और मेनू से “Nimble Streamer” विकल्प “Live Streams” खोलें। अब आप एक चलती लाइव स्ट्रीम देखेंगे। उस पर क्लिक करें और दाईं ओर सबसे अंत में मौजूद प्रश्नचिह्न पर क्लिक करें, जैसे यहाँ दिखाया गया है।.

“URLs to play” की सूची से उस URL को चुनें जिसका अंत “playlist.m3u8” हो और “Copy” पर क्लिक करें। अब इस URL को किसी भी ब्राउज़र में पेस्ट करें जिसमें HLS प्लेयर अंतर्निहित या स्थापित हो। इस उदाहरण के लिए हम निम्नलिखित HLS प्लेयर एक्सटेंशन के साथ Chrome ब्राउज़र का उपयोग कर रहे हैं:
https://chromewebstore.google.com/detail/hls-player-m3u8-streaming/eakdijdofmnclopcffkkgmndadhbjgka

एक बार जब आप उस URL को Chrome में पोस्ट करेंगे, तो आप तुरंत अपना PLAYDECK स्ट्रीम चलता हुआ देखेंगे। अब मैं आपको दिखाता हूँ कि आप अपने SCTE मार्कर की निगरानी कैसे करें। Chrome में Developer Tools खोलने के लिए F12 दबाएँ। ऊपर “Network” टैब पर क्लिक करें। अब आप कई “chunks.m3u8” देखेंगे, जो आपकी स्ट्रीम का हिस्सा हैं। Chunk फ़ाइलों में से किसी एक पर क्लिक करें (जिसे HLS मैनिफ़ेस्ट भी कहा जाता है) और उसके बगल में “Preview” चुनें। अब आप HLS SCTE टैग देखेंगे। यदि यह वहां नहीं है, तो किसी अन्य चंक पर क्लिक करें, क्योंकि हम SCTE केवल क्लिप शुरू होने पर भेजते हैं।.

बस! हमने अपने परीक्षण लक्ष्य पूरे कर लिए हैं। आगे और जानकारी है जो गहराई से जानने के लिए प्रासंगिक हो सकती है।.


अतिरिक्त जानकारी

PLAYDECK में लॉग इन

हम सभी इनकमिंग और आउटगोइंग SCTE टैग्स को लॉग करते हैं। इससे आपको अपने आउटगोइंग SCTE का परीक्षण करने का भी अवसर मिलता है, बस अपने आउटपुट को इनपुट (SDI तथा Streams दोनों) में लूप करके, और PLAYDECK को अपने SCTE का पता लगाने दें। आप “Logs” मुख्य मेनू के माध्यम से लॉग फ़ाइलें खोल सकते हैं:


निम्बल Streamer में लॉग इन

यदि कुछ भी गलत हो जाए या उम्मीद के मुताबिक न हो, तो Nimble लॉग फ़ाइलों की समीक्षा करना एक अच्छा आरंभिक कदम है। Windows पर लॉग यहाँ पाया जा सकता है:
सी:\प्रोग्राम फाइल्स\निम्बल 1टीपी25टेर\लॉग

Nimble Trial एड-ऑन में लॉगिंग डिफ़ॉल्ट रूप से सक्षम है, लेकिन यदि आपको इसे सक्रिय करने की आवश्यकता हो, तो “nimble.conf” के लिए ये फ़्लैग्स हैं।.

log_access = file
logging = debug

अब लॉग फ़ाइल खोलें और “SCTE” के लिए स्कैन करें। आपको कुछ ऐसा दिख सकता है, जो यह दर्शाता है कि PLAYDECK में आपके SCTE मार्कर में टाइपो है:

[SCTE35] [mynewapp/mynewstream] के लिए प्रकार=6 का असमर्थित स्प्लाइस कमांड

यदि आपका SCTE मार्कर Nimble में सफलतापूर्वक पार्स हो जाता है, तो यह इस प्रकार दिखेगा:

[SCTE35] splice_insert: event_id=4157 oon=1 immediate=1 pts_adjustment=0 pts=0 actual_pts=202593600 duration=2707200 data=0xfc....



टूल: टीएसडक

यह MPEG ट्रांसपोर्ट स्ट्रीम को संसाधित करने के लिए उपकरणों और प्लगइन्स का एक संग्रह है, जिसमें एक बड़ी लाइब्रेरी है। इसके साथ आप PLAYDECK के बाहर एक एल्गोरिदम या अन्य जटिल लॉजिक के आधार पर SCTE मार्कर डाल सकेंगे।.

https://tsduck.io/


उपकरण: x9k3

यह टूल UDP Streams या MPEG-TS फ़ाइलों में मौजूद SCTE-35 मार्कर को HLS SCTE टैग्स में भी बदल सकता है। इससे आप एक ऐसा स्ट्रीमिंग सर्वर इंस्टॉल कर सकते हैं जिसमें स्वचालित SCTE-35 से HLS रूपांतरण की सुविधा नहीं होती।.

https://github.com/futzu/x9k3