डिकोडिंग संपीड़ित मीडिया स्ट्रीम को एक असंपीड़ित प्रारूप में बदलने की प्रक्रिया है जो स्क्रीन और स्पीकर पर आउटपुट के लिए उपयुक्त होती है। मोबाइल उपकरणों में, डिकोडिंग या तो सॉफ़्टवेयर के माध्यम से CPU पर या हार्डवेयर के माध्यम से विशेष GPU और DSP ब्लॉक पर की जाती है। MDN Web Docs (2026) के अनुसार, आधुनिक कोडेक स्ट्रीम को 100–500 गुना संपीड़ित करते हैं, और डिकोडिंग सही संपीड़न प्रोफ़ाइल चुनने पर बिना किसी हानि के मूल गुणवत्ता को पुनर्स्थापित करता है।
मुख्य बिंदु
डिकोडिंग संपीड़ित डिजिटल डेटा को वापस उसके मूल असंपीड़ित प्रारूप में बदलने की प्रक्रिया है। मीडिया के संदर्भ में, डिकोडिंग एक एन्कोडर द्वारा बनाई गई संपीड़ित बिटस्ट्रीम से वीडियो फ्रेम को पुनर्स्थापित करता है। डिकोडिंग के बिना, उपयोगकर्ता वीडियो नहीं देख सकते या ऑडियो नहीं सुन सकते, क्योंकि सभी आधुनिक मीडिया प्रारूप बैंडविड्थ और डिस्क स्थान बचाने के लिए संपीड़न का उपयोग करते हैं।
H.264 प्रारूप में 5 Mbps बिटरेट पर एक सामान्य वीडियो स्ट्रीम समान रिज़ॉल्यूशन वाली असंपीड़ित RGB स्ट्रीम की तुलना में 100 गुना कम स्थान लेती है। डिकोडिंग एल्गोरिदम को एन्कोडिंग के सापेक्ष उल्टे क्रम में कोडेक विनिर्देश का पालन करते हुए प्रत्येक फ्रेम को उसके मूल रिज़ॉल्यूशन और रंग स्थान में पुनर्स्थापित करना होता है। ऐसा करने के लिए, डिकोडर इंट्रा-फ्रेम (I-frame) और इंटर-फ्रेम (P-frame, B-frame) डेटा को संसाधित करता है।
मोबाइल उपकरणों पर, डिकोडिंग या तो CPU पर या समर्पित हार्डवेयर ब्लॉक पर हो सकती है। Apple (A सीरीज़), Qualcomm (Snapdragon) और MediaTek (Dimensity) के आधुनिक SoC में सभी लोकप्रिय प्रारूपों के लिए अंतर्निहित डिकोडर होते हैं। वीडियो प्रोसेसर व्युत्क्रम असतत कोसाइन ट्रांसफ़ॉर्म और गति क्षतिपूर्ति का भारी काम संभालता है, CPU को अन्य कार्यों के लिए मुक्त करता है।
डिकोडिंग प्रक्रिया में कई क्रमिक चरण होते हैं जो एन्कोडिंग चरणों को उलटते हैं। पहले, बिटस्ट्रीम से हेडर और संपीड़न पैरामीटर — प्रोफ़ाइल, स्तर, रिज़ॉल्यूशन, रंग स्थान — निकाले जाते हैं। फिर डिकोडर क्रमिक रूप से संपीड़ित मैक्रोब्लॉक को संसाधित करता है, उन पर व्युत्क्रम ट्रांसफ़ॉर्म लागू करता है।
पहला चरण — एंट्रॉपी कोड निष्कर्षण। एंट्रॉपी डिकोडिंग असतत कोसाइन ट्रांसफ़ॉर्म गुणांक को पुनर्स्थापित करने के लिए CABAC या CAVLC एल्गोरिदम का उपयोग करती है। यह चरण वीडियो रिज़ॉल्यूशन पर निर्भर नहीं करता — यह पिक्सेल नहीं, बल्कि बिट्स की एक स्ट्रीम संसाधित करता है, और इसकी जटिलता फ्रेम आयामों द्वारा नहीं, बल्कि बिटरेट द्वारा निर्धारित होती है।
दूसरा चरण — व्युत्क्रम क्वांटीकरण और व्युत्क्रम DCT। डिकोडर क्वांटीकृत गुणांक को क्वांटीकरण चरण से गुणा करता है, अनुमानित DCT गुणांक मानों को पुनर्स्थापित करता है, और फिर व्युत्क्रम DCT ट्रांसफ़ॉर्म लागू करता है। व्युत्क्रम DCT आवृत्ति डोमेन से स्थानिक डेटा को पुनर्स्थापित करता है, पिक्सेल का एक मैक्रोब्लॉक बनाता है। क्रोमा और लूमा के लिए ट्रांसफ़ॉर्म स्वतंत्र रूप से किया जाता है।
तीसरा चरण — गति क्षतिपूर्ति। P- और B-फ्रेम के लिए, डिकोडर बिटस्ट्रीम से निकाले गए गति वैक्टर का उपयोग करता है और पहले से डिकोड किए गए संदर्भ फ्रेम को संदर्भित करता है। गति क्षतिपूर्ति वर्तमान मैक्रोब्लॉक के लिए एक भविष्यवक्ता बनाती है, जिसमें व्युत्क्रम DCT के बाद अवशिष्ट संकेत जोड़ा जाता है। परिणाम एक पूरी तरह से पुनर्स्थापित फ्रेम है जो आउटपुट के लिए तैयार है।
// वीडियो फ्रेम डिकोडिंग का मूल स्यूडोकोड
struct DecodedFrame {
uint8_t* y_plane;
uint8_t* u_plane;
uint8_t* v_plane;
int width, height;
};
class Decoder {
public:
bool decodeNALUnit(const uint8_t* nalUnit, size_t size) {
if (!parseNALUHeader(nalUnit, size))
return false;
int sliceType = parseSliceType(nalUnit);
entropyDecode(nalUnit);
inverseQuantize();
inverseDCT();
if (sliceType != I_SLICE)
motionCompensation();
return true;
}
};
उपरोक्त उदाहरण H.264 डिकोडर की मूल संरचना दिखाता है। फ़ंक्शन decodeNALUnit एक NAL यूनिट — संपीड़ित H.264 स्ट्रीम का मूल ब्लॉक — लेता है। डिकोडर क्रमिक रूप से हेडर को पार्स करता है, स्लाइस प्रकार निकालता है, एंट्रॉपी डिकोडिंग, व्युत्क्रम क्वांटीकरण और व्युत्क्रम DCT लागू करता है। P- और B-स्लाइस के लिए, DPB बफर से संदर्भ फ्रेम का उपयोग करके अतिरिक्त रूप से गति क्षतिपूर्ति की जाती है।
आधुनिक वीडियो कोडेक संपीड़न एल्गोरिदम, दक्षता और कम्प्यूटेशनल संसाधन आवश्यकताओं में भिन्न होते हैं। प्रारूप का चुनाव सीधे फ़ाइल आकार, छवि गुणवत्ता और मोबाइल डिवाइस पर डिकोडिंग के दौरान बिजली की खपत को प्रभावित करता है।
| कोडेक | वर्ष | संपीड़न | हार्डवेयर समर्थन |
|---|---|---|---|
| H.264 | 2003 | 1:100 | सभी आधुनिक SoC |
| H.265 | 2013 | 1:200 | Apple A8+, Snapdragon 805+ |
| VP9 | 2013 | 1:180 | Snapdragon 820+, Exynos |
| AV1 | 2018 | 1:300 | Apple A17+, Snapdragon 8 Gen 2+ |
H.264 सबसे व्यापक वीडियो कोडेक है, जो सभी मोबाइल उपकरणों द्वारा समर्थित है। इसका मुख्य लाभ सार्वभौमिकता है: कोई भी Android स्मार्टफोन और iPhone H.264 को हार्डवेयर पर डिकोड कर सकता है। हालांकि, समान बिटरेट पर, H.264 H.265 और AV1 जैसे अधिक आधुनिक कोडेक की तुलना में गुणवत्ता में पीछे रह जाता है, समान दृश्य गुणवत्ता के लिए 30–50% अधिक बिटरेट की आवश्यकता होती है।
H.265 समान गुणवत्ता पर H.264 की तुलना में दोगुना संपीड़न प्रदान करता है। H.265 डिकोडिंग के लिए अधिक शक्तिशाली हार्डवेयर ब्लॉक की आवश्यकता होती है: iOS पर VideoToolbox iPhone 6 (A8) से H.265 का समर्थन करता है, और Android डिवाइस Snapdragon 805 और उससे ऊपर से। मोबाइल ऐप के लिए H.265 चुनते समय, ध्यान रखें कि पुराने उपकरणों में हार्डवेयर समर्थन नहीं हो सकता है और वे इस प्रारूप को सॉफ़्टवेयर से डिकोड करेंगे, जिससे बिजली की खपत तेजी से बढ़ जाती है।
AV1 Alliance for Open Media का एक ओपन कोडेक है, जो सभी आधुनिक प्रारूपों में सबसे अच्छा संपीड़न प्रदान करता है। AV1 समान दृश्य गुणवत्ता पर H.265 से 30% और H.264 से 50% अधिक कुशल है। हार्डवेयर AV1 डिकोडिंग केवल 2023+ के SoC में दिखाई दी: Apple A17 Pro, Qualcomm Snapdragon 8 Gen 2 और नए। पुराने उपकरणों के लिए, AV1 डिकोडिंग केवल dav1d लाइब्रेरी के माध्यम से सॉफ़्टवेयर द्वारा संभव है, जो CPU पर महत्वपूर्ण भार पैदा करता है।
सॉफ़्टवेयर और हार्डवेयर डिकोडिंग के बीच चुनाव मोबाइल मीडिया प्लेयर विकसित करते समय एक महत्वपूर्ण आर्किटेक्चरल निर्णय है। प्रत्येक दृष्टिकोण के अपने फायदे और सीमाएँ हैं जिन्हें एप्लिकेशन डिज़ाइन करते समय ध्यान में रखा जाना चाहिए।
हार्डवेयर डिकोडिंग विशेष वीडियो प्रोसेसिंग ब्लॉक पर की जाती है जो समान कार्य करते समय CPU की तुलना में काफी कम ऊर्जा खपत करते हैं। Qualcomm के अनुसार, 4K वीडियो चलाते समय हार्डवेयर H.265 डिकोडर Snapdragon 8 Gen 1 CPU पर सॉफ़्टवेयर डिकोडिंग की तुलना में 5–10 गुना कम ऊर्जा खपत करता है। यह मोबाइल उपकरणों के लिए महत्वपूर्ण है जहां प्रत्येक मिलीवाट बैटरी जीवन को प्रभावित करता है।
दूसरी ओर, सॉफ़्टवेयर डिकोडिंग अधिकतम लचीलापन प्रदान करती है। FFmpeg libavcodec लाइब्रेरी के साथ दर्जनों कोडेक और कंटेनर का समर्थन करता है, जिसमें दुर्लभ और अप्रचलित प्रारूप शामिल हैं जिनमें हार्डवेयर समर्थन नहीं है। डेवलपर डिकोडिंग पाइपलाइन को संशोधित कर सकता है, चलते-फिरते पोस्ट-प्रोसेसिंग और फ़िल्टर जोड़ सकता है, जो बंद हार्डवेयर ब्लॉक का उपयोग करते समय असंभव है।
सॉफ़्टवेयर डिकोडिंग कई परिदृश्यों में उचित है: दुर्लभ प्रारूप (ProRes, DNxHD, Motion JPEG) चलाते समय, जब फ्रेम प्रोसेसिंग के प्रत्येक चरण पर सटीक नियंत्रण की आवश्यकता होती है, और हार्डवेयर समर्थन के बिना उपकरणों पर AV1 डिकोड करते समय। libavcodec FFmpeg से लगभग किसी भी ज्ञात प्रारूप को डिकोड कर सकता है, जो इसे सार्वभौमिक मीडिया प्लेयर के लिए डी-फैक्टो मानक बनाता है।
सॉफ़्टवेयर डिकोडिंग की सीमा गर्मी अपव्यय है। CPU पर निरंतर 4K वीडियो डिकोडिंग 10–15 मिनट के भीतर डिवाइस को 45–50 डिग्री तक गर्म कर सकती है, जिससे थ्रॉटलिंग और फ्रेम दर में कमी आती है। सक्रिय शीतलन के बिना उपकरणों (टैबलेट, फ़ोन) पर, यह विशेष रूप से ध्यान देने योग्य है। सॉफ़्टवेयर डिकोडिंग के दौरान CPU बिजली की खपत उसी स्ट्रीम की हार्डवेयर डिकोडिंग के दौरान 0,3–0,5 W की तुलना में 3–5 W तक पहुँच सकती है।
हार्डवेयर डिकोडिंग किसी भी प्रोडक्शन मीडिया प्लेयर के लिए डिफ़ॉल्ट विकल्प है। यह न्यूनतम बिजली खपत पर 4K वीडियो के लिए स्थिर 60 fps प्रदान करता है। iOS पर VideoToolbox और Android पर MediaCodec हार्डवेयर डिकोडिंग के लिए मूल API प्रदान करते हैं जो कोडेक और रिज़ॉल्यूशन के आधार पर स्वचालित रूप से इष्टतम प्रोसेसिंग ब्लॉक का चयन करते हैं।
प्लेटफ़ॉर्म API फ्रेम बफ़र प्रबंधन (Android पर surface pool, iOS पर CVPixelBufferPool), डिस्प्ले सिंक्रोनाइज़ेशन और मेमोरी ऑप्टिमाइज़ेशन संभालते हैं। डेवलपर को केवल आवश्यक पैरामीटर के साथ डिकोडर खोलना और तैयार फ्रेम प्राप्त करना होता है। हार्डवेयर डिकोडिंग न्यूनतम विलंबता के साथ एंड-टू-एंड पाइपलाइन का समर्थन करती है: बिटस्ट्रीम प्राप्त करने से लेकर स्क्रीन पर प्रदर्शित करने तक 5–15 ms लगते हैं, जबकि सॉफ़्टवेयर डिकोडिंग में 30–80 ms लगते हैं।
आइए दोनों मोबाइल प्लेटफ़ॉर्म पर डिकोडिंग के व्यावहारिक कार्यान्वयन को देखें। iOS पर, हार्डवेयर डिकोडिंग VideoToolbox के माध्यम से और सॉफ़्टवेयर डिकोडिंग FFmpeg के माध्यम से की जाती है। Android पर, हार्डवेयर डिकोडिंग के लिए MediaCodec का उपयोग किया जाता है।
@interface VideoDecoder ()
@property (nonatomic) VTDecompressionSessionRef session;
@end
@implementation VideoDecoder
- (void)setupDecoder {
CMVideoFormatDescriptionRef formatDesc;
CMVideoCodecType codecType = kCMVideoCodecType_H264;
OSStatus status = CMVideoFormatDescriptionCreate(
NULL, codecType, 1920, 1080, NULL, &formatDesc
);
VTDecompressionOutputCallbackRecord callback;
callback.decompressionOutputCallback = &decodingCallback;
VTDecompressionSessionCreate(NULL, formatDesc, NULL,
NULL, &callback, &_session);
}
- (void)decodeFrame: (uint8_t*)nalData length:(size_t)size {
CMBlockBufferRef blockBuffer;
CMBlockBufferCreateWithMemoryBlock(NULL, nalData,
size, NULL, NULL, 0, size, 0, &blockBuffer);
CMSampleBufferRef sampleBuffer;
CMSampleBufferCreate(NULL, blockBuffer, true, NULL,
NULL, NULL, 1, 0, NULL, 0, NULL, &sampleBuffer);
VTDecompressionSessionDecodeFrame(_session,
sampleBuffer, 0, NULL, 0);
}
@end
कोड iOS पर H.264 हार्डवेयर डिकोडर के आरंभीकरण को दर्शाता है। VTDecompressionSessionCreate एक डिकोडिंग सत्र बनाता है, और VTCreate तैयार फ्रेम आने पर कॉलबैक को कॉल करता है। सत्र स्वचालित रूप से हार्डवेयर ब्लॉक का उपयोग करता है यदि यह निर्दिष्ट कोडेक के लिए उपलब्ध है। CVPixelBuffer प्रारूप में डिकोड किए गए फ्रेम प्राप्त करने के लिए, एक कॉलबैक का उपयोग किया जाता है जो न्यूनतम विलंबता के साथ प्रत्येक तैयार फ्रेम को पास करता है।
MediaCodec decoder = MediaCodec.createDecoderByType("video/avc");
MediaFormat format = MediaFormat.createVideoFormat(
"video/avc", 1920, 1080
);
format.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
decoder.configure(format, surface, null, 0);
decoder.start();
ByteBuffer[] inputBuffers = decoder.getInputBuffers();
int inputIndex = decoder.dequeueInputBuffer(10000);
if (inputIndex >= 0) {
ByteBuffer buffer = inputBuffers[inputIndex];
buffer.clear();
buffer.put(nalData);
decoder.queueInputBuffer(inputIndex, 0, nalData.length, pts, 0);
}
Android पर, MediaCodec पिक्सेल बफर के बजाय आउटपुट के लिए Surface का उपयोग करता है, जो GPU और CPU के बीच डेटा कॉपी को कम करता है। डिकोडर कोडेक प्रकार के आधार पर स्वचालित रूप से हार्डवेयर ब्लॉक (OMX घटक) का चयन करता है। H.264 के लिए, OMX.google.h264.decoder का उपयोग किया जाता है, जो निर्माता के कार्यान्वयन के आधार पर हार्डवेयर या सॉफ़्टवेयर हो सकता है।
डिकोडिंग रणनीति का चुनाव एप्लिकेशन के लक्षित दर्शकों, समर्थित प्रारूपों और प्रदर्शन आवश्यकताओं पर निर्भर करता है। इष्टतम समाधान में अक्सर एक हाइब्रिड दृष्टिकोण शामिल होता है: मुख्य प्रारूपों (H.264, H.265) के लिए हार्डवेयर डिकोडिंग और दुर्लभ कोडेक के लिए सॉफ़्टवेयर फ़ॉलबैक।
यदि एप्लिकेशन अधिकतम संगतता के लिए लक्षित है — H.264 का उपयोग करें, जो किसी भी डिवाइस पर हार्डवेयर पर डिकोड होने की गारंटी है। वीडियो स्ट्रीमिंग सेवाओं के लिए, 2016 के बाद के उपकरणों पर हार्डवेयर समर्थन वाला H.265 उचित है। AV1 उन सेवाओं के लिए विकल्प है जहाँ बैंडविड्थ बचत महत्वपूर्ण है: YouTube, Netflix और अन्य बड़े प्लेटफ़ॉर्म गुणवत्ता बनाए रखते हुए CDN लागत कम करने के लिए सक्रिय रूप से AV1 अपना रहे हैं।
एक महत्वपूर्ण पैरामीटर डिकोडर का बफर आकार है। हार्डवेयर डिकोडर में एक निश्चित बफर पूल (आमतौर पर 4–16 फ्रेम) होता है। उच्च बिटरेट स्ट्रीम चलाते समय, बफर ओवरफ़्लो हो सकते हैं, जिससे फ्रेम ड्रॉप हो सकते हैं। MediaCodec किसी विशिष्ट डिवाइस पर वास्तविक डिकोडर प्रदर्शन निर्धारित करने के लिए getOutputFrameRate विधि प्रदान करता है, जबकि VideoToolbox kVTDecodeFrame_EnableAsynchronousDecompression के माध्यम से रीयलटाइम प्राथमिकता को नियंत्रित करने की अनुमति देता है।
थर्मल थ्रॉटलिंग एक और कारक है। लंबे समय तक 4K HDR वीडियो प्लेबैक के दौरान हार्डवेयर डिकोडिंग भी डिवाइस को गर्म कर सकती है। iOS पर ProcessInfo और Android पर BatteryManager के माध्यम से तापमान की निगरानी करने, ओवरहीटिंग होने पर गुणवत्ता या स्ट्रीम रिज़ॉल्यूशन कम करने की सिफारिश की जाती है। लंबे देखने के सत्र वाले गेम और स्ट्रीमिंग एप्लिकेशन के लिए यह विशेष रूप से महत्वपूर्ण है।
अक्सर पूछे जाने वाले प्रश्न
एन्कोडिंग असंपीड़ित डेटा को संपीड़ित प्रारूप में बदलती है, जबकि डिकोडिंग संपीड़ित स्ट्रीम से मूल डेटा को पुनर्स्थापित करती है। ये प्रक्रियाएँ एक-दूसरे के विपरीत हैं और समान एल्गोरिदम का उपयोग करती हैं: DCT, क्वांटीकरण, गति क्षतिपूर्ति। एन्कोडर प्रत्यक्ष रूपांतरण करता है, डिकोडर व्युत्क्रम करता है।
अधिकतम संगतता के लिए — H.264, क्योंकि यह 100% आधुनिक उपकरणों पर हार्डवेयर डिकोड होता है। बेहतर संपीड़न के लिए — H.265 या AV1। चुनाव दर्शकों पर निर्भर करता है: यदि 80% उपयोगकर्ताओं के पास 2021+ के डिवाइस हैं, तो H.265 कम बिटरेट पर बेहतर गुणवत्ता प्रदान करेगा। AV1 2023+ से हार्डवेयर समर्थन वाले फ्लैगशिप डिवाइस के लिए उचित है।
हार्डवेयर डिकोडर एक विशेष माइक्रोचिप (ASIC) है जो विशेष रूप से डिकोडिंग के लिए डिज़ाइन की गई है। CPU के विपरीत, जो अनुक्रमिक निर्देशों के साथ डिकोडिंग करता है, हार्डवेयर ब्लॉक मैक्रोब्लॉक को समानांतर में संसाधित करता है। हार्डवेयर डिकोडर की बिजली खपत 5–10 गुना कम होती है क्योंकि चिप कम आवृत्ति पर काम करती है और इसमें कोई अनावश्यक पाइपलाइन चरण नहीं होते हैं।
प्रोफ़ाइल एन्कोडर द्वारा उपयोग किए जाने वाले संपीड़न एल्गोरिदम के सेट को परिभाषित करती है: Baseline, Main, High। स्तर अधिकतम स्ट्रीम पैरामीटर सेट करता है: रिज़ॉल्यूशन, बिटरेट, बफर आकार। मोबाइल उपकरणों के लिए, High प्रोफ़ाइल और स्तर 4.1–5.2 की सिफारिश की जाती है — यह हार्डवेयर डिकोडिंग के साथ 1080p–4K वीडियो के लिए पर्याप्त है।
Android पर, उपलब्ध कोडेक की सूची प्राप्त करने और यह जाँचने के लिए MediaCodecList का उपयोग करें कि कौन सा हार्डवेयर है। iOS पर, निर्दिष्ट कोडेक के साथ CMVideoFormatDescription के माध्यम से समर्थन की जाँच करें — यदि VTDecompressionSessionCreate सफल होता है, तो कोडेक समर्थित है। Android पर AV1 के लिए, OMX.google.aomc.decoder कोडेक या उसके हार्डवेयर संस्करण की उपस्थिति की जाँच करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें