विषय पर बढ़ें

Evey में ac3go

संक्षेप में:

  • Chrome, Firefox और Edge, Dolby Digital (AC-3) या Dolby Digital Plus (E-AC-3) वाली आवाज़ नहीं चला सकते। सर्वर से इसे बदलवाने के बजाय, Evey का वेब प्लेयर इसे पेज के अंदर ही डिकोड करता है, ac3go से, जो ब्राउज़र में WebAssembly के रूप में चलने वाला एक डिकोडर है।
  • आवाज़ आप तक वैसी ही पहुँचती है जैसी फ़ाइल में है, और इसके लिए सर्वर को आवाज़ में कोई बदलाव नहीं करना पड़ता।
  • आपको कुछ सेट नहीं करना होता। प्लेयर की स्ट्रीम जानकारी आवाज़ को क्लाइंट पर डिकोड किया गया दिखाती है, और एडमिन → अभी चल रहा है उस ट्रैक के लिए प्लेयर में ac3go दिखाता है।
  • अगर डिकोडर नहीं चल पाता, तो प्लेयर अपने-आप सर्वर द्वारा बदली गई आवाज़ (AAC) पर चला जाता है।

इस पेज का बाकी हिस्सा बताता है कि यह रास्ता कब लिया जाता है, आवाज़ तस्वीर के साथ कैसे तालमेल में रहती है, और जब कोई फ़िल्म बिना आवाज़ के चले तो क्या जाँचें। कौन-सा ऑडियो ट्रैक चलता है, और आम तौर पर वह कब कॉपी या बदला जाता है, यह ऑडियो पर है।

ac3go एक अलग लाइब्रेरी के रूप में विकसित होता है, Go में लिखा हुआ और बिना किसी निर्भरता के: github.com/gravity-zero/ac3go।

ब्राउज़र आवाज़ खुद कब डिकोड करता है

ये सभी शर्तें पूरी होनी चाहिए:

शर्त नहीं तो
ब्राउज़र AC-3 या E-AC-3 खुद नहीं चला सकता, और WebAssembly चलाता है। प्लेयर ब्राउज़र को नाम से पहचानने के बजाय इन दोनों बातों पर जाँचता है। जो ब्राउज़र Dolby Digital खुद डिकोड करता है, जैसे Safari, उसे ट्रैक एक आम ट्रैक की तरह मिलता है।
चल रहा ऑडियो ट्रैक AC-3 या E-AC-3 है। फ़िल्म के दूसरे ट्रैक नहीं गिने जाते। दूसरा कोडेक ऑडियो के नियमों पर चलता है।
ट्रैक में ज़्यादा से ज़्यादा छह चैनल (5.1) हों, और प्रोफ़ाइल के अधिकतम ऑडियो चैनल से ज़्यादा नहीं। यह रास्ता ट्रैक को वैसा ही सौंपता है जैसा वह फ़ाइल में है, इसलिए यह चैनलों को मिला नहीं सकता। सर्वर ट्रैक को AAC में बदलता है, जो स्टीरियो प्रोफ़ाइल के लिए चैनलों को मिला सकता है। 7.1 वाला E-AC-3 ट्रैक हमेशा बदला जाता है।
फ़िल्म सर्वर की स्ट्रीम से चलती है (रीमक्स या ट्रांसकोड), सीधे पढ़ी गई फ़ाइल के रूप में नहीं। ट्रैक उस प्लेबैक के लिए लिए गए फ़ैसले पर चलता है।

प्लेबैक कैसे होता है

तस्वीर ब्राउज़र के आम प्लेयर से चलती है; उसकी स्ट्रीम में कोई ऑडियो ट्रैक नहीं होता, और प्लेयर का वॉल्यूम और म्यूट इसके बजाय साउंड इंजन के गेन को चलाते हैं। आवाज़ एक अलग ऑडियो स्ट्रीम से आती है, जिसे सर्वर प्लेलिस्ट में बताता है: ट्रैक वैसा ही जैसा वह फ़ाइल में है, जहाँ हो सके MKVGo से पैक किया गया, नहीं तो FFmpeg से कॉपी किया गया। इनमें से कोई भी उसे डिकोड नहीं करता।

पेज में, एक बैकग्राउंड थ्रेड (एक worker) ac3go लोड करता है और हर ऑडियो सेगमेंट को बिना कंप्रेशन वाली आवाज़ में डिकोड करता है, तस्वीर बनाने वाले कोड से अलग। फिर प्लेयर यह आवाज़ ब्राउज़र के ऑडियो आउटपुट से चलाता है, तस्वीर की लय में: समय तस्वीर बताती है, और आवाज़ उसी के हिसाब से तय होती है। पॉज़ दोनों को एक साथ रोकता है। फ़िल्म में आगे-पीछे जाना, या स्ट्रीम अटकने के बाद आया खाली हिस्सा, आवाज़ को नई जगह पर फिर से मिला देता है।

5.1 ट्रैक ब्राउज़र को उसी चैनल क्रम में दिया जाता है जिसकी वह उम्मीद करता है, ताकि वह उसे स्टीरियो स्पीकर या हेडफ़ोन के लिए मिला सके।

फ़िल्म की शुरुआत में डिकोडर को लोड होने में एक पल लगता है। जब सर्वर वही ट्रैक AAC में बदलकर भी देता है, तो उस पल में वही आवाज़ चलती है, और ac3go तैयार होते ही कमान सँभाल लेता है। ब्राउज़र डिकोडर को एक ही बार डाउनलोड करता है और हर इस्तेमाल पर उसे फिर से जाँचता है, इसलिए सर्वर का अपडेट कभी पुरानी और नई कॉपी को नहीं मिलाता।

अगर ac3go नहीं चल पाता

जब डिकोडर लोड नहीं होता, किसी सेगमेंट पर विफल होता है, या सर्वर ने उसे कोई ऑडियो स्ट्रीम नहीं बताई, तो प्लेयर बाकी टाइटल के लिए उसका इस्तेमाल बंद कर देता है और सर्वर से सामान्य स्ट्रीम माँगता है, जिसमें आवाज़ AAC में बदली होती है। फ़िल्म की आवाज़ बनी रहती है; तब स्ट्रीम जानकारी क्लाइंट पर डिकोड किया गया के बजाय बदलाव दिखाती है।

Warning

जो रिवर्स प्रॉक्सी अपनी Content-Security-Policy लगाता है, उसे script-src में 'wasm-unsafe-eval' की अनुमति देनी होगी, नहीं तो डिकोडर शुरू नहीं हो पाता। उसे डिकोडर की फ़ाइलें भी /wasm/ के तहत वेब ऐप के बाकी हिस्से की तरह देनी होंगी। देखें रिवर्स प्रॉक्सी कॉन्फ़िगरेशन।

कास्ट रिसीवर पर

Evey का Chromecast रिसीवर ac3go का इस्तेमाल नहीं करता। कम मेमोरी वाले TV बॉक्स पर, इस तरह आवाज़ डिकोड करने वाले रिसीवर कुछ मिनट के प्लेबैक के बाद रुक जाते थे। TV को Dolby Digital वैसा ही मिलता है जब उसका रिसीवर बताता है कि वह उसे आगे भेज देता है, नहीं तो सर्वर का AAC: देखें Chromecast पर कास्ट करना।

लाइब्रेरी और उसका लाइसेंस

ac3go, Evey की तरह, GNU AGPLv3 के तहत प्रकाशित है। Evey इमेज बनाते समय इसे इसके सोर्स से बनाया जाता है (Go के टूल से WebAssembly में कंपाइल करके), और इसका लाइसेंस डिकोडर के बगल में /wasm/ac3go.LICENSE.md पर दिया जाता है।