Hardware decoding विशेष GPU चिप्स, DSP या SoC के अंदर वीडियो प्रोसेसिंग ब्लॉक का उपयोग करके मीडिया डेटा का हार्डवेयर डीकंप्रेशन है। सॉफ़्टवेयर डिकोडिंग के विपरीत, हार्डवेयर डिकोडिंग भौतिक सर्किट पर की जाती है जो विशेष रूप से वीडियो डीकंप्रेशन के लिए डिज़ाइन की गई है। Apple VideoToolbox दस्तावेज़ीकरण (2026) के अनुसार, A-सीरीज़ चिप्स पर हार्डवेयर डिकोडिंग 60 FPS पर 4K H.264 के लिए ऊर्जा दक्षता 0.3 वॉट प्राप्त करती है।
मुख्य बिंदु
Hardware decoding मीडिया डेटा को डीकंप्रेस करने की प्रक्रिया है जो सामान्य-उद्देश्य CPU पर नहीं, बल्कि सिस्टम-ऑन-चिप (SoC) में एकीकृत विशेष एकीकृत सर्किट पर की जाती है। ऐसे ब्लॉक को वीडियो डिकोडर या VPU (Video Processing Unit) कहा जाता है और ये ASIC एक्सेलेरेटर होते हैं जो विशिष्ट संपीड़न एल्गोरिदम के लिए अनुकूलित होते हैं।
आधुनिक मोबाइल SoC में प्रत्येक लोकप्रिय कोडेक के लिए अलग हार्डवेयर ब्लॉक होते हैं। उदाहरण के लिए, Apple A17 Pro चिप में H.264, H.265, VP9, AV1 और ProRes के लिए डिकोडर शामिल हैं। प्रत्येक ब्लॉक एक पूर्ण प्रसंस्करण पाइपलाइन है जो इनपुट पर संपीड़ित बिटस्ट्रीम स्वीकार करने और CPU भागीदारी के बिना आउटपुट पर YUV या BGRA प्रारूप में तैयार डिकोडेड फ्रेम देने में सक्षम है।
हार्डवेयर डिकोडिंग 2012–2013 में मोबाइल उद्योग में मानक बन गई, जब Qualcomm Snapdragon 800 और Apple A7 ने पहली बार समर्पित H.264 डिकोडिंग ब्लॉक शामिल किए। तब से, प्रौद्योगिकी एकल प्रारूप समर्थन से सार्वभौमिक मल्टी-फॉर्मेट ब्लॉक तक विकसित हुई है जो एक साथ कई स्ट्रीम डिकोड करने में सक्षम है — उदाहरण के लिए, अलग वीडियो स्ट्रीम के साथ PiP के लिए।
हार्डवेयर डिकोडिंग प्रक्रिया सॉफ़्टवेयर डिकोडिंग से मौलिक रूप से भिन्न है। क्रमिक CPU निर्देश निष्पादन के बजाय, हार्डवेयर ब्लॉक डीकंप्रेशन के प्रत्येक चरण के लिए भौतिक सर्किट लागू करता है: एन्ट्रॉपी डिकोडिंग, व्युत्क्रम क्वांटीकरण, व्युत्क्रम DCT और गति क्षतिपूर्ति।
एक सामान्य हार्डवेयर डिकोडर में कई पाइपलाइन चरण होते हैं। पहला चरण एन्ट्रॉपी डिकोडर है, जो CABAC या CAVLC के लिए परिमित अवस्था मशीन (FSM) के रूप में कार्यान्वित होता है। सॉफ़्टवेयर कार्यान्वयन के विपरीत जहाँ प्रत्येक बिट सशर्त शाखाओं के साथ संसाधित होता है, हार्डवेयर CABAC समानांतर संदर्भ पूर्वानुमान सर्किट का उपयोग करता है, जो प्रति चक्र एक के बजाय 2–3 बिट संसाधित करने की अनुमति देता है।
दूसरा चरण व्युत्क्रम DCT ब्लॉक है। सॉफ़्टवेयर DCT को CPU पर गुणा-संचय लूप की आवश्यकता होती है। हार्डवेयर कार्यान्वयन एक मैट्रिक्स गुणक का उपयोग करता है जो एक चक्र में 8x8 ब्लॉक के सभी 64 गुणांक की गणना करता है। हार्डवेयर व्युत्क्रम DCT 400–600 मेगाहर्ट्ज पर चलता है और प्रति सेकंड 4 मिलियन मैक्रोब्लॉक तक संसाधित करता है, जो रीयल-टाइम 8K वीडियो डिकोडिंग के लिए पर्याप्त है।
तीसरा चरण गति क्षतिपूर्ति (MC) मॉड्यूल है। व्युत्क्रम DCT के समानांतर, हार्डवेयर ब्लॉक बिटस्ट्रीम से गति वेक्टर प्राप्त करता है और डिकोडेड फ्रेम बफर से संदर्भ क्षेत्र निकालता है। DPB बफर (Decoded Picture Buffer) 16 संदर्भ फ्रेम तक संग्रहीत करता है, जिसे एक विशेष कम-विलंबता कैश मेमोरी के माध्यम से एक्सेस किया जाता है। आधुनिक डिकोडर अनुकूली स्मूथिंग और सबपिक्सेल इंटरपोलेशन के साथ पूर्वानुमान का उपयोग करते हैं, जो H.265 और AV1 के लिए महत्वपूर्ण है।
हार्डवेयर डिकोडर प्रबंधन DMA नियंत्रक के माध्यम से होता है। एप्लिकेशन डिकोडर को साझा मेमोरी में संपीड़ित डेटा का पॉइंटर पास करता है, और डिकोडर प्रत्यक्ष मेमोरी एक्सेस के माध्यम से बिटस्ट्रीम पढ़ता है। फ्रेम डिकोडिंग पूर्ण होने के बाद, एक इंटरप्ट ड्राइवर को सूचित करता है, और तैयार फ्रेम आउटपुट बफर पूल में उपलब्ध हो जाता है। यह तंत्र डेटा प्रसंस्करण के दौरान CPU लोड को पूरी तरह समाप्त कर देता है — प्रोसेसर केवल डिकोडिंग शुरू करता है और तैयार परिणाम प्राप्त करता है।
दोनों मोबाइल प्लेटफॉर्म हार्डवेयर डिकोडिंग के लिए मूल API प्रदान करते हैं, लेकिन बफर प्रबंधन और डिकोडर जीवनचक्र के लिए अलग-अलग दृष्टिकोणों के साथ। iOS पर VideoToolbox डिस्प्ले आउटपुट के लिए Metal के साथ कसकर एकीकृत है, जबकि Android पर MediaCodec प्रत्यक्ष रेंडरिंग के लिए Surface का उपयोग करता है।
| पैरामीटर | VideoToolbox (iOS) | MediaCodec (Android) |
|---|---|---|
| आउटपुट प्रारूप | CVPixelBuffer (Metal/OpenGL) | Surface या ByteBuffer |
| मेमोरी प्रबंधन | पूल के माध्यम से स्वचालित | dequeue के माध्यम से मैन्युअल |
| थ्रेड सुरक्षा | हाँ, अतुल्यकालिक कॉलबैक | हाँ, तुल्यकालिक API |
| HDR समर्थन | हाँ (PQ, HLG) | हाँ (HDR10, HDR10+) |
| मल्टी-डिकोडिंग | 4 सत्र तक (A17) | SoC पर निर्भर करता है |
VideoToolbox iOS और macOS पर हार्डवेयर डिकोडिंग के लिए एक फ्रेमवर्क है। यह अतुल्यकालिक डिकोडिंग मॉडल का उपयोग करता है: VTDecompressionSessionDecodeFrame तुरंत लौटता है, और तैयार फ्रेम एक अलग कतार पर कॉलबैक के माध्यम से आते हैं। VideoToolbox स्वचालित रूप से पिक्सेल बफर पूल (CVPixelBufferPool) का प्रबंधन करता है और नए फ्रेम के लिए मुक्त बफर का पुन: उपयोग कर सकता है। HDR वीडियो के लिए, VideoToolbox ITU-R BT.2020 रंग स्थान और PQ/HLG EOTF का समर्थन करता है।
MediaCodec इनपुट और आउटपुट बफर कतारों के साथ तुल्यकालिक मॉडल का उपयोग करता है। एप्लिकेशन चक्रीय रूप से संपीड़ित डेटा भेजने के लिए dequeueInputBuffer और डिकोडेड परिणाम प्राप्त करने के लिए dequeueOutputBuffer को कॉल करता है। यह दृष्टिकोण डेवलपर को डिकोडिंग गति पर पूर्ण नियंत्रण देता है, जो ऑडियो-वीडियो सिंक्रोनाइज़ेशन के लिए महत्वपूर्ण है। डिस्प्ले आउटपुट के लिए, MediaCodec एक Surface स्वीकार करता है, जो CPU कॉपी के बिना सीधे GPU डिकोडिंग की अनुमति देता है।
हार्डवेयर डिकोडिंग सॉफ़्टवेयर की तुलना में तीन मुख्य लाभ प्रदान करती है: ऊर्जा दक्षता, प्रदर्शन और स्थिरता। प्रत्येक सीमित बैटरी संसाधनों और थर्मल बाधाओं वाले मोबाइल उपकरणों के लिए महत्वपूर्ण है।
हार्डवेयर डिकोडिंग का मुख्य लाभ मौलिक रूप से कम बिजली की खपत है। एक सामान्य H.264/H.265 हार्डवेयर डिकोडर रीयल-टाइम में 1080p वीडियो डिकोड करते समय 0.2–0.5 वॉट की खपत करता है। तुलना में, CPU पर उसी स्ट्रीम की सॉफ़्टवेयर डिकोडिंग प्रोसेसर आर्किटेक्चर के आधार पर 1.5–4 वॉट की खपत करती है। 5–10 गुना अंतर सीधे बैटरी जीवन को प्रभावित करता है: हार्डवेयर डिकोडिंग के साथ, वीडियो प्लेबैक CPU पर सॉफ़्टवेयर डिकोडिंग के साथ 2–4 घंटे की तुलना में 10–15 घंटे की फिल्में देखने की अनुमति देता है।
ऊर्जा दक्षता संकीर्ण विशेषज्ञता के माध्यम से प्राप्त की जाती है। CPU के विपरीत, जो निर्देशों की एक विस्तृत श्रृंखला निष्पादित करता है और जटिल नियंत्रण तर्क रखता है, हार्डवेयर डिकोडर में केवल एक विशिष्ट एल्गोरिदम के लिए आवश्यक सर्किट होते हैं। ऐसे ब्लॉक की क्लॉक आवृत्ति CPU के 2–3 गीगाहर्ट्ज की तुलना में 200–600 मेगाहर्ट्ज है, जो वोल्टेज के वर्ग के अनुपात में गतिशील बिजली खपत को कम करती है।
हार्डवेयर डिकोडिंग उच्च रिज़ॉल्यूशन के लिए भी गारंटीकृत फ्रेम दर प्रदान करती है। पाइपलाइन आर्किटेक्चर के लिए धन्यवाद, हार्डवेयर ब्लॉक एक साथ कई डीकंप्रेशन चरणों को संसाधित कर सकता है: जबकि एक मॉड्यूल अगले मैक्रोब्लॉक के लिए एन्ट्रॉपी डिकोडिंग करता है, दूसरा पहले से ही वर्तमान पर व्युत्क्रम DCT लागू करता है। ऐसा समानांतरवाद CPU पर अप्राप्य है, जहाँ प्रत्येक चरण एक अनुक्रमिक संक्रिया है।
हार्डवेयर डिकोडर का गर्मी अपव्यय काफी कम है: 4K वीडियो डिकोडिंग के दौरान एक सामान्य ब्लॉक CPU के 2–6 वॉट की तुलना में 0.3–0.8 वॉट गर्मी छोड़ता है। इसका मतलब है कि डिवाइस लंबे समय तक देखने पर भी ज़्यादा गरम नहीं होता, थ्रॉटलिंग नहीं होती, और उपयोगकर्ता को बिना गिरावट के स्थिर 60 FPS मिलता है। हार्डवेयर डिकोडिंग के दौरान केस का तापमान आमतौर पर सॉफ़्टवेयर डिकोडिंग की तुलना में 5–10 डिग्री कम होता है, जो बिना सक्रिय शीतलन वाले टैबलेट के लिए विशेष रूप से महत्वपूर्ण है।
आइए VideoToolbox के माध्यम से iOS पर कॉलबैक हैंडलिंग और MediaCodec के माध्यम से Android पर पूर्ण पाइपलाइन के साथ हार्डवेयर डिकोडिंग के व्यावहारिक कार्यान्वयन को देखें।
import VideoToolbox
import CoreMedia
class HardwareDecoder {
var session: VTDecompressionSession?
func setup() {
let formatDesc = createFormatDescription()
var callback = VTDecompressionOutputCallbackRecord(
decompressionOutputCallback: decodingCallback,
decompressionOutputRefCon: nil
)
VTDecompressionSessionCreate(
allocator: nil,
videoFormatDescription: formatDesc,
videoDecoderSpecification: nil,
destinationImageBufferAttributes: nil,
outputCallback: &callback,
decompressionSessionOut: &session
)
}
func decode(sampleBuffer: CMSampleBuffer) {
VTDecompressionSessionDecodeFrame(
session!, sampleBuffer: sampleBuffer,
flags: ._EnableAsynchronousDecompression,
frameRefcon: nil, infoFlagsOut: nil
)
}
}
कोड एक अतुल्यकालिक कॉलबैक के साथ VideoToolbox डिकोडिंग सत्र बनाता है। VTDecompressionSessionCreate प्रदान किए गए CMVideoFormatDescription के आधार पर उपलब्ध हार्डवेयर डिकोडर का स्वचालित रूप से पता लगाता है। फ़्लैग kVTDecodeFrame_EnableAsynchronousDecompression अतुल्यकालिक मोड सक्षम करता है — डिकोडिंग के दौरान एप्लिकेशन ब्लॉक नहीं होता और कॉलबैक के माध्यम से फ्रेम प्राप्त करता है। H.264 के लिए, पहले CMVideoFormatDescriptionCreateFromH264ParameterSets के माध्यम से SPS/PPS NAL इकाइयों से प्रारूप विवरण बनाना होगा।
class HardwareDecoder(private val surface: Surface) {
private var mediaCodec: MediaCodec? = null
fun initDecoder(mimeType: String, width: Int, height: Int) {
mediaCodec = MediaCodec.createDecoderByType(mimeType)
val format = MediaFormat.createVideoFormat(mimeType, width, height)
mediaCodec?.configure(format, surface, null, 0)
mediaCodec?.start()
}
fun feedFrame(data: ByteArray, pts: Long) {
val inputIndex = mediaCodec!!.dequeueInputBuffer(TIMEOUT_US)
if (inputIndex >= 0) {
val buffer = mediaCodec!!.getInputBuffer(inputIndex)
buffer?.put(data)
mediaCodec!!.queueInputBuffer(inputIndex, 0, data.size, pts, 0)
}
}
}
Kotlin में कोड एक Surface से बंधा MediaCodec बनाता है, जो CPU के माध्यम से डेटा कॉपी किए बिना सीधे डिस्प्ले आउटपुट सुनिश्चित करता है। mimeType पैरामीटर MediaFormat स्थिरांक का उपयोग करता है: H.264 के लिए video/avc, H.265 के लिए video/hevc, AV1 के लिए video/av01। dequeueInputBuffer विधि टाइमआउट के साथ उपलब्ध इनपुट बफर की प्रतीक्षा करती है; यदि कोई बफर उपलब्ध नहीं है, तो वर्तमान फ्रेम छोड़ दिया जाता है, जो असमान बिटरेट के दौरान कतार ओवरफ़्लो को रोकता है।
हार्डवेयर डिकोडिंग अधिकांश उत्पादन परिदृश्यों के लिए इष्टतम विकल्प है, लेकिन सार्वभौमिक समाधान नहीं है। प्रयोज्यता की सीमाओं को समझने से उन स्थितियों से बचने में मदद मिलती है जहाँ हार्डवेयर कोडेक समर्थन की कमी उपयोगकर्ता अनुभव को तोड़ देती है।
हार्डवेयर डिकोडिंग तीन मामलों में अनिवार्य है: लंबे समय तक वीडियो प्लेबैक (30 मिनट से अधिक), 4K सामग्री डिकोडिंग, और अधिकतम बैटरी जीवन पर केंद्रित कोई भी एप्लिकेशन। स्ट्रीमिंग सेवाएँ (Netflix, YouTube, Twitch) विशेष रूप से हार्डवेयर डिकोडिंग का उपयोग करती हैं, क्योंकि सॉफ़्टवेयर उच्च बिटरेट और बड़े रिज़ॉल्यूशन पर स्थिर प्लेबैक की गारंटी नहीं दे सकता। इन सेवाओं के लिए, DRM समर्थन (FairPlay, Widevine) महत्वपूर्ण है, जो केवल हार्डवेयर ब्लॉक के माध्यम से उपलब्ध है जो डिकोडर से डिस्प्ले आउटपुट तक संरक्षित पाइपलाइन प्रदान करता है।
एकीकृत वीडियो (कटसीन, विज्ञापन, इन-गेम सिनेमैटिक्स) वाले गेम के लिए भी हार्डवेयर डिकोडिंग की सिफारिश की जाती है। आधुनिक गेम इंजन जैसे Unity और Unreal Engine में VideoToolbox और MediaCodec के लिए अंतर्निहित समर्थन है। गेम में हार्डवेयर डिकोडिंग भौतिकी सिमुलेशन, दुश्मन AI और इनपुट प्रोसेसिंग के लिए CPU को मुक्त करती है, जिससे समग्र प्रदर्शन में सुधार होता है।
हार्डवेयर डिकोडिंग की मुख्य सीमा हार्डवेयर प्रारूप समर्थन पर निर्भरता है। यदि SoC में AV1 के लिए डिकोडर नहीं है (उदाहरण के लिए, Snapdragon 8 Gen 1 पर उपकरण), तो एप्लिकेशन को FFmpeg और dav1d के माध्यम से सॉफ़्टवेयर फ़ॉलबैक प्रदान करना होगा। यही स्थिति पुराने उपकरणों पर H.265 और ProRes पर लागू होती है, जो केवल Apple A13+ चिप्स पर डिकोडिंग के लिए समर्थित है। प्लेबैक शुरू करने से पहले आवश्यक प्रारूप के लिए हार्डवेयर डिकोडर की उपलब्धता की जाँच करने और गतिशील रूप से डिकोडिंग रणनीति चुनने की सिफारिश की जाती है।
दूसरी सीमा एक साथ डिकोडिंग सत्रों की संख्या है। अधिकांश SoC 1–2 समानांतर हार्डवेयर डिकोडर का समर्थन करते हैं। तीसरा सत्र खोलने का प्रयास करने पर, API एक त्रुटि लौटाएगा और एप्लिकेशन को सॉफ़्टवेयर डिकोडिंग पर स्विच करना होगा। सत्रों की संख्या SoC निर्माता पर निर्भर करती है: Apple चिप्स A17 Pro पर 4 H.264 डिकोडिंग सत्र तक की अनुमति देते हैं, जबकि Snapdragon 8 Gen 2 H.265 के लिए 2 तक और VP9 के लिए कुल 2 तक का समर्थन करता है।
अक्सर पूछे जाने वाले प्रश्न
iOS पर, VTDecompressionSessionCopySupportedPropertyDictionary का उपयोग करें और kVTDecompressionPropertyKey_UsingHardwareAcceleratedVideoDecoder जाँचें। Android पर, डिकोडर बनाने के बाद MediaCodec.getCodecInfo().isHardwareAccelerated() कॉल करें। यदि फ़्लैग false है, तो सॉफ़्टवेयर डिकोडर का उपयोग हो रहा है, आमतौर पर OMX.google.*।
हाँ, स्ट्रीमिंग सेवाओं में DRM सामग्री के लिए हार्डवेयर डिकोडिंग अनिवार्य है। iOS पर FairPlay और Android पर Widevine L1 को डिकोडर से डिस्प्ले आउटपुट तक संरक्षित पाइपलाइन की आवश्यकता होती है, जहाँ डिकोडेड फ्रेम एप्लिकेशन के लिए अप्राप्य होते हैं। ऐसी पाइपलाइन केवल सुरक्षित सत्र समर्थन वाले हार्डवेयर डिकोडिंग के साथ संभव है।
VDADecoder (Video Decode Acceleration) iOS 6–8 का एक पुराना फ्रेमवर्क है, जिसे VideoToolbox द्वारा बदल दिया गया है। VideoToolbox H.265, HDR और मल्टीथ्रेडिंग के समर्थन के साथ अधिक आधुनिक और लचीला API प्रदान करता है। VDADecoder नई परियोजनाओं के लिए अनुशंसित नहीं है — VideoToolbox से VTDecompressionSession का उपयोग करें।
अधिकांश मामलों में, नहीं। iOS पर, हार्डवेयर डिकोडर को बिजली खपत की बाधाओं के कारण सक्रिय अग्रभूमि एप्लिकेशन की आवश्यकता होती है। Android पर, एक सेवा में MediaCodec के माध्यम से पृष्ठभूमि डिकोडिंग संभव है, लेकिन प्रदर्शन कम हो सकता है। अपवाद PiP मोड है, जहाँ सिस्टम फ्लोटिंग विंडो में हार्डवेयर डिकोडिंग की अनुमति देता है।
पूर्ण नेता H.264 है, जो 100% आधुनिक मोबाइल उपकरणों पर हार्डवेयर-डिकोड किया जाता है। H.265 लगभग 80% उपकरणों (iOS 8+, उपयुक्त SoC के साथ Android 5+) पर समर्थित है। AV1 सबसे सीमित है: केवल Snapdragon 8 Gen 2, Exynos 2200 और Apple A17 Pro के साथ 2023+ के उपकरणों पर हार्डवेयर समर्थन।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें