ट्रांसकोडिंग और सर्वर की क्षमता¶
कम शब्दों में:
- ट्रांसकोडिंग का मतलब है किसी वीडियो को ऐसे रूप में बदलना जिसे डिवाइस चला सके। सर्वर का भारी काम सिर्फ़ यही है: किसी फ़ाइल को जैसी है वैसी चलाना (सीधा प्लेबैक) या उसे दोबारा पैक करना (रीमक्स) सर्वर पर लगभग कोई भार नहीं डालता। देखें Evey प्लेबैक का तरीका कैसे चुनता है।
- सर्वर कितने लोगों को सेवा दे सकता है, यह आप तय नहीं करते। सर्वर कम लोड वाले पहले मौके पर, कुछ ही मिनट में, खुद को नापता है, और उससे ज़्यादा कभी स्वीकार नहीं करता।
- जब क्षमता कम पड़ती है, तो नया प्लेबैक कम क्वालिटी पर मिलता है, या व्यस्त ग्राफ़िक्स कार्ड से प्रोसेसर पर चला जाता है। अगर दोनों में जगह न हो, तो प्लेयर कहता है सर्वर अन्य स्ट्रीम ट्रांसकोड करने में व्यस्त है।
- आप शायद यह करना चाहें: सर्वर को एक ग्राफ़िक्स कार्ड दें (हार्डवेयर एक्सेलेरेशन), और जिस डिस्क पर कैश है उस पर खाली जगह रखें (ट्रांसकोडिंग कैश)।
इस पेज का बाकी हिस्सा उस एडमिन के लिए है जो विस्तार जानना चाहता है: सर्वर कैसे नापता है कि वह क्या एन्कोड कर सकता है, वह इस क्षमता को कैसे बाँटता है, और भर जाने पर दर्शक को क्या दिखता है।
सर्वर खुद को नापता है¶
क्षमता कोई सेटिंग नहीं है जिसका आप अंदाज़ा लगाएँ। सर्वर उसे नापता है:
- कब। सर्वर शुरू होते समय नहीं: सर्वर पहले से जो जानता था उस पर शुरू होता है (या पहली बार, सॉफ़्टवेयर पर 720p वाले एक सावधान डिफ़ॉल्ट पर), और नापने का काम कम लोड वाले पहले मौके पर करता है, जब कोई कुछ नहीं देख रहा और प्रोसेसर ज़्यादातर खाली है। इसमें कुछ मिनट लगते हैं। लोड के बीच लिया गया माप अस्थायी माना जाता है और मशीन खाली होने पर दोबारा किया जाता है।
- क्या। एक 4K क्लिप के असली एन्कोड, SDR में और HDR में, प्रोसेसर पर और सर्वर को मिले हर एक्सेलेरेटर पर, ठीक उसी रूप में जैसे असली प्लेबैक में होता है। नतीजा है हर एक का सबसे ऊँचा रिज़ॉल्यूशन जिसे वह रियल टाइम में लगातार दे सके, और हर तरह की स्ट्रीम की लागत।
- दोबारा। हार्डवेयर बदलने के बाद, या एडमिन → ट्रांसकोडिंग → एनकोड कैलिब्रेशन में फिर से कैलिब्रेट करें दबाने पर। जब कोई देख रहा हो तो यह बटन मना कर देता है; सिर्फ़ अपने-आप होने वाला दोबारा माप सर्वर के खाली होने का इंतज़ार करता है।
जब माप चल रहा हो, तो जिस प्लेबैक को ट्रांसकोड की ज़रूरत है वह सर्वर खुद को कैलिब्रेट कर रहा है दिखाता है, और उससे थोड़ी देर बाद फिर कोशिश करने को कहा जाता है। सीधे प्लेबैक और रीमक्स पर कोई असर नहीं होता।
अगर प्रोसेसर इनमें से कोई भी रिज़ॉल्यूशन लगातार नहीं दे पाता, तब भी सर्वर 720p (SDR) और 480p (HDR) देता है; एक साथ कितनी स्ट्रीम चलेंगी, यह वीडियो सेशन लिमिटर के बजट से तय होता है।
माप के लिए इस क्रम में क्लिप ली जाती है: आपकी दी हुई क्लिप, या एक बार डाउनलोड की गई और SHA256 से जाँची गई एक संदर्भ क्लिप, या उसी समय बनाई गई एक नकली (सिंथेटिक) क्लिप। असली क्लिप ज़्यादा सटीक माप देती है। सिंथेटिक क्लिप लागत को बढ़ा-चढ़ाकर दिखाती है और मशीन की सीमा उसकी असली क्षमता से कम रख सकती है:
services:
evey:
environment:
EVEY_BENCH_HDR_SAMPLE: /data/bench/my-4k-hdr.hevc
EVEY_BENCH_SDR_SAMPLE: /data/bench/my-4k-sdr.hevc
क्षमता बाँटना¶
लाइव प्लेबैक क्षमता (एडमिन → ट्रांसकोडिंग) उन वीडियो स्ट्रीम की संख्या है जो एक ही समय पर एन्कोड हो सकती हैं। यह माप से निकलती है और हार्डवेयर बदलने पर अपने-आप बदल जाती है। एक साथ चलने वाली वीडियो स्ट्रीम सीमित करें इसे कम कर सकता है, कभी बढ़ा नहीं सकता।
- जो ट्रांसकोड सिर्फ़ ऑडियो को दोबारा एन्कोड करता है (वीडियो कॉपी होता है), वह कोई स्लॉट नहीं लेता।
- क्वालिटी बदलने वाला दर्शक एक ही स्लॉट रखता है।
- सिर्फ़ वही क्वालिटी एन्कोड होती है जो दर्शक सच में देख रहा है, क्वालिटी के सारे स्तर नहीं।
हर स्ट्रीम उस सबसे कम लागत वाले रास्ते पर जाती है जिसने साबित किया है कि वह उसे चला सकता है: कोई एक्सेलेरेटर, जिसे उसी चीज़ पर नापा गया हो जिसकी स्ट्रीम को ज़रूरत है (जैसे HDR टोन मैपिंग, या HEVC आउटपुट), या प्रोसेसर। प्रोसेसर और एक्सेलेरेटर दो अलग पूल हैं, और ग्राफ़िक्स कार्ड पर चल रही स्ट्रीम भी अपने ऑडियो और पैकिंग के लिए थोड़ा प्रोसेसर खर्च करती है।
जब जगह कम पड़ती है, तो सर्वर इस क्रम में जवाब देता है:
- कम क्वालिटी। जिस नई स्ट्रीम की सबसे ऊँची क्वालिटी फ़िट नहीं होती, उसे उस सबसे ऊँची क्वालिटी पर लिया जाता है जो फ़िट हो, और यह सीमा पूरी स्ट्रीम के लिए रहती है।
- प्रोसेसर। जब एक्सेलेरेटर भरे हों, तो नई स्ट्रीम प्रोसेसर पर चली जाती है, अगर उसमें जगह हो।
- मना करना। जब किसी में जगह न हो, तो प्लेयर सर्वर अन्य स्ट्रीम ट्रांसकोड करने में व्यस्त है दिखाता है और फिर कोशिश कर सकता है।
अगर किसी एक टाइटल पर ग्राफ़िक्स कार्ड का एन्कोड फ़ेल होता है, तो वह टाइटल कुछ समय के लिए, हर दर्शक के लिए, प्रोसेसर पर भेजा जाता है। कार्ड को खुद तभी इस्तेमाल से हटाया जाता है जब मीडिया से अलग एक टेस्ट एन्कोड भी उस पर फ़ेल हो, और बाद में उसे फिर आज़माया जाता है: देखें हार्डवेयर एक्सेलेरेशन।
जब कोई देख रहा होता है, तो सर्वर का अपना बैकग्राउंड काम (थंबनेल, इंट्रो की पहचान, मीडिया का विश्लेषण) रुक जाता है, ताकि मशीन प्लेबैक के लिए रहे: देखें बैकग्राउंड का काम और सर्वर पर लोड।
अगर इन सबके बावजूद किसी एक तरह का सोर्स दर्शकों को इंतज़ार कराता रहे, तो सर्वर कुछ समय के लिए उसकी सबसे ऊँची क्वालिटी कम कर देता है, फिर यह सीमा अपने-आप हटा देता है। देखें निगरानी और लॉग।
क्या एन्कोड होता है¶
| डिफ़ॉल्ट | |
|---|---|
| वीडियो कोडेक | H.264। HEVC आउटपुट तब, जब कोई नापा हुआ रूट इसे साबित करे और प्लेयर उसे डिकोड करता हो (HDR पासथ्रू रूट, या जब प्रोफ़ाइल का पसंदीदा वीडियो कोडेक यह माँगे); AV1 तब, जब यह चालू हो (AV1 आउटपुट, सिर्फ़ हार्डवेयर पर) और प्लेयर उसे डिकोड करता हो। |
| रिज़ॉल्यूशन | सोर्स वाला, जब तक कोई सीमा न लगे: प्लेयर की सबसे ऊँची सीमा, बिटरेट की सीमा, या जो सर्वर रियल टाइम में एन्कोड कर सके। |
| बिटरेट | सोर्स के हिसाब से, रिज़ॉल्यूशन के अनुपात में। वीडियो बिटरेट सीमा इसे सीमित करती है; वीडियो बिटरेट सीमा, दूरस्थ दर्शक लोकल नेटवर्क के बाहर इसे और कम रखती है। |
| ऑडियो | AAC। देखें ऑडियो। |
| भेजने का तरीका | HLS, fragmented MP4 सेगमेंट में। |
ट्रांसकोडिंग कैश¶
एन्कोड हुए सेगमेंट डिस्क पर evey-cache वॉल्यूम में रखे जाते हैं, और जब कोई
दूसरा दर्शक, या वही दर्शक बाद में, वही टाइटल उसी फ़ैसले के साथ चलाता है तो
दोबारा इस्तेमाल होते हैं। एडमिन → ट्रांसकोड कैश उसका साइज़ दिखाता है और उसे
खाली करता है; ट्रांसकोड कैश बजट (एडमिन → ट्रांसकोडिंग) उसकी सीमा तय करता है। सभी साफ़ करें आपकी फ़ाइलों से निकाले गए
उपशीर्षक भी हटा देता है, जो ./evey-data/subtitles में रखे होते हैं: माँगने पर
वे फिर से निकाले जाते हैं।
जब डिस्क भर जाए। सर्वर उस डिस्क पर, जिस पर कैश है, खाली जगह की एक गुंजाइश
रखता है: डिफ़ॉल्ट रूप से 2 GiB, जिसे EVEY_TRANSCODE_CACHE_MIN_FREE_MB से तय
किया जाता है (0 यह गुंजाइश बंद कर देता है)। इससे नीचे जाने पर, सबसे पुराने
सेगमेंट जिन्हें कोई नहीं देख रहा, पहले हटाए जाते हैं। अगर इससे काफ़ी जगह खाली न
हो, तो जो सेगमेंट अभी बना नहीं है उसे मना कर दिया जाता है, एक इंतज़ार के समय के
साथ जिसके बाद प्लेयर फिर माँग सकता है। ऐसा इसलिए, ताकि ऐसा एन्कोडर शुरू न हो जो
जगह की कमी से फ़ेल हो जाता; जो सेगमेंट पहले से डिस्क पर हैं वे मिलते रहते हैं।
./evey-data में निकाले गए उपशीर्षक भी इसी गुंजाइश को मानते हैं: इससे नीचे
जाने पर नए उपशीर्षक रखे नहीं जाते, हर माँग पर उन्हें फिर से निकाला जाता है, और
एडमिन को उपशीर्षक कैश भर गया मिलता है (घंटे में ज़्यादा से ज़्यादा एक बार,
वेबहुक को भी transcoding.derived_cache_full के रूप में भेजा जाता है)।
Tip
किसी ऐसे अपडेट के बाद कैश खाली करें जो वीडियो एन्कोड होने का तरीका बदलता है, ताकि किसी को पिछले वर्ज़न के सेगमेंट न मिलें। कोई देख रहा हो तब कैश खाली करने पर उसकी स्ट्रीम एक बार बफ़र होती है, फिर चलने लगती है।
क्या हो रहा है, यह जाँचना¶
- एडमिन → अभी चल रहा है: हर स्ट्रीम, हर ट्रैक का तरीका, और उसे एन्कोड करने वाला बैकएंड।
- एडमिन → ट्रांसकोडिंग → एनकोड कैलिब्रेशन: नापी गई सीमाएँ और इस्तेमाल हो रहे एक्सेलेरेटर।
- एडमिन → स्ट्रीमिंग गुणवत्ता: असली दर्शकों के लिए प्लेबैक कैसा रहा।
- लोड टेस्ट (एडमिन → ट्रांसकोडिंग): यह नकली दर्शक बनाकर नापता है कि सर्वर कितना संभाल सकता है। कोई देख रहा हो तो यह चलने से मना कर देता है।