ডিকোডিং হল সংকুচিত মিডিয়া স্ট্রিমকে একটি অসংকুচিত ফরম্যাটে রূপান্তর করার প্রক্রিয়া যা স্ক্রিন এবং স্পীকারে আউটপুটের জন্য উপযুক্ত। মোবাইল ডিভাইসে, ডিকোডিং হয় সফ্টওয়্যারের মাধ্যমে CPU-তে অথবা হার্ডওয়্যারের মাধ্যমে বিশেষায়িত GPU এবং DSP ব্লকের মাধ্যমে সম্পাদিত হয়। MDN Web Docs (2026) অনুসারে, আধুনিক কোডেকগুলি স্ট্রিমকে 100–500 গুণ সংকুচিত করে, এবং ডিকোডিং সঠিক কম্প্রেশন প্রোফাইল নির্বাচন করলে কোনো ক্ষতি ছাড়াই মূল গুণমান পুনরুদ্ধার করে।
মূল পয়েন্ট
ডিকোডিং হল সংকুচিত ডিজিটাল ডেটাকে পুনরায় তার মূল অসংকুচিত ফরম্যাটে রূপান্তর করার প্রক্রিয়া। মিডিয়ার প্রসঙ্গে, ডিকোডিং একটি এনকোডার দ্বারা তৈরি সংকুচিত বিটস্ট্রিম থেকে ভিডিও ফ্রেম পুনরুদ্ধার করে। ডিকোডিং ছাড়া, ব্যবহারকারীরা ভিডিও দেখতে বা অডিও শুনতে পারেন না, কারণ সমস্ত আধুনিক মিডিয়া ফরম্যাট ব্যান্ডউইথ এবং ডিস্ক স্পেস বাঁচাতে কম্প্রেশন ব্যবহার করে।
5 Mbps বিটরেটে H.264 ফরম্যাটে একটি সাধারণ ভিডিও স্ট্রিম একই রেজোলিউশনের একটি অসংকুচিত 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন