Mobil ilovalarda Decoding: nima, asosiy tushunchalar va ishlash prinsipi

Muallif: IT Sectr Nashr etilgan: 2026-05-25 O'qish vaqti: 10 daq

Decoding — siqilgan media oqimini ekran va dinamiklar uchun mos bo'lgan siqilmagan formatga aylantirish jarayoni. Mobil qurilmalarda dekodlash yoki dasturiy ravishda CPU orqali yoki apparat vositasida GPU va DSP ning ixtisoslashtirilgan bloklari orqali amalga oshiriladi. MDN Web Docs (2026) ma'lumotlariga ko'ra, zamonaviy kodeklar oqimni 100–500 marta siqadi va dekodlash siqish profilini to'g'ri tanlash bilan asl sifatni yo'qotishlarsiz tiklaydi.

Asosiy fikrlar

  • Decoding — siqilgan mediani qurilmalarda chiqarish uchun siqilmagan PCM formatiga aylantirish
  • Kodeklar H.264, H.265, VP9 va AV1 turli xil siqish algoritmlari va sifat profillaridan foydalanadi
  • Apparat dekodlashi GPU/DSP da amalga oshiriladi va dasturiyga qaraganda 3–5 marta kam energiya sarflaydi
  • Dasturiy dekodlash FFmpeg orqali CPU yuki evaziga istalgan format bilan moslikni ta'minlaydi
  • Dekoder tanlash ijro vaqtiga, qurilmaning qizishiga va batareya quvvatiga ta'sir qiladi

Decoding nima?

Decoding — siqilgan raqamli ma'lumotlarni asl siqilmagan formatga qayta aylantirish jarayoni. Media kontekstida dekodlash enkoder tomonidan yaratilgan siqilgan bit oqimidan video kadrlarni tiklaydi. Dekodlashsiz foydalanuvchi videoni ko'ra olmaydi yoki audioni eshita olmaydi, chunki barcha zamonaviy media formatlari tarmoqli kengligi va disk joyini tejash uchun siqishdan foydalanadi.

5 Mbit/s bitreytli H.264 formatidagi tipik video oqimi o'xshash piksellar soniga ega siqilmagan RGB oqimidan 100 marta kam joy egallaydi. Dekodlash algoritmi har bir kadrni asl piksellar soni va rang fazosiga qaytarishi, kodlashga nisbatan teskari tartibda kodek spetsifikatsiyasiga amal qilishi kerak. Buning uchun dekoder kadr ichidagi (I-frame) va kadrlararo (P-frame, B-frame) ma'lumotlarni qayta ishlaydi.

Mobil qurilmalarda dekodlash CPU da ham, ajratilgan apparat bloklarida ham amalga oshishi mumkin. Apple (A seriyasi), Qualcomm (Snapdragon) va MediaTek (Dimensity) tomonidan zamonaviy SoC-lar barcha mashhur formatlar uchun o'rnatilgan dekoderlarni o'z ichiga oladi. Video protsessor teskari diskret kosinus konvertatsiyasi va harakat kompensatsiyasi bo'yicha og'ir ishni o'z zimmasiga oladi, CPU ni boshqa vazifalar uchun bo'shatadi.

Dekodlash qanday ishlaydi?

Dekodlash jarayoni kodlash bosqichlarini teskari aylantiruvchi bir necha ketma-ket bosqichlardan iborat. Avval bit oqimidan sarlavhalar va siqish parametrlari — profil, daraja, piksellar soni, rang fazosi chiqariladi. Keyin dekoder siqilgan makrobloklarni ketma-ket qayta ishlaydi, ularga teskari konvertatsiyalarni qo'llaydi.

Video oqimini dekodlash bosqichlari

Birinchi bosqich — entropiya kodini chiqarish. Entropiya dekodlashi diskret kosinus konvertatsiyasi koeffitsiyentlarini tiklash uchun CABAC yoki CAVLC algoritmlaridan foydalanadi. Bu bosqich video piksellar soniga bog'liq emas — u piksellarni emas, balki bit oqimini qayta ishlaydi va uning murakkabligi kadr o'lchami bilan emas, balki bitreyt bilan belgilanadi.

Ikkinchi bosqich — teskari kvantlash va teskari DCT. Dekoder kvantlangan koeffitsiyentlarni kvantlash qadamiga ko'paytiradi, DCT koeffitsiyentlarining taxminiy qiymatlarini tiklaydi, so'ngra teskari DCT konvertatsiyasini qo'llaydi. Teskari DCT chastota sohasidan fazoviy ma'lumotlarni tiklab, piksel makroblokini hosil qiladi. Xrom va lyuma uchun konvertatsiya mustaqil ravishda amalga oshiriladi.

Uchinchi bosqich — harakat kompensatsiyasi. P- va B-kadrlar uchun dekoder bit oqimidan chiqarilgan harakat vektorlaridan foydalanadi va avval dekodlangan mos yozuvlar kadrlariga murojaat qiladi. Harakat kompensatsiyasi joriy makroblokning prediktorini yaratadi, unga teskari DCT dan keyin qoldiq signal qo'shiladi. Natija — ekranga chiqarishga tayyor to'liq tiklangan kadr.

cpp
// Video kadrining asosiy dekodlash psevdokodi
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;
    }
};

Yuqoridagi misolda H.264 dekoderining asosiy tuzilishi ko'rsatilgan. decodeNALUnit funksiyasi H.264 siqilgan oqimining asosiy bloki bo'lgan NAL birligini qabul qiladi. Dekoder ketma-ket sarlavhani tahlil qiladi, slayd turini chiqaradi, entropiya dekodlash, teskari kvantlash va teskari DCT ni qo'llaydi. P- va B-slaydlar uchun DPB buferidan mos yozuvlar kadrlari yordamida qo'shimcha ravishda harakat kompensatsiyasi amalga oshiriladi.

Siqish formatlari va kodeklar

Zamonaviy video kodeklar siqish algoritmlari, samaradorligi va hisoblash resurslariga talablar jihatidan farqlanadi. Format tanlovi to'g'ridan-to'g'ri fayl hajmiga, tasvir sifatiga va mobil qurilmada dekodlash paytida energiya sarfiga ta'sir qiladi.

KodekYilSiqishApparat qo'llab-quvvatlashi
H.26420031:100Barcha zamonaviy SoC-lar
H.26520131:200Apple A8+, Snapdragon 805+
VP920131:180Snapdragon 820+, Exynos
AV120181:300Apple A17+, Snapdragon 8 Gen 2+

H.264 — barcha mobil qurilmalar tomonidan qo'llab-quvvatlanadigan eng keng tarqalgan video kodek. Uning asosiy ustunligi universallikdir: har qanday Android smartfoni va iPhone H.264 ni apparat vositasida dekodlashi mumkin. Biroq, bir xil bitreytda H.264 sifat jihatidan zamonaviyroq H.265 va AV1 kodeklaridan pastroq, o'xshash vizual sifat uchun 30–50% ko'proq bitreyt talab qiladi.

H.265 bir xil sifatda H.264 bilan solishtirganda ikki baravar yaxshi siqishni ta'minlaydi. H.265 dekodlashi kuchliroq apparat blokini talab qiladi: iOS da VideoToolbox H.265 ni iPhone 6 (A8) dan boshlab, Android qurilmalari esa Snapdragon 805 va undan yuqoridan qo'llab-quvvatlaydi. Mobil ilova uchun H.265 ni tanlashda eski qurilmalarda apparat qo'llab-quvvatlashi bo'lmasligi mumkinligini va ular bu formatni dasturiy ravishda dekodlashini hisobga olish kerak, bu energiya sarfini keskin oshiradi.

AV1 — Alliance for Open Media dan ochiq kodek, barcha zamonaviy formatlar orasida eng yaxshi siqishni ta'minlaydi. AV1 bir xil vizual sifatda H.265 dan 30%, H.264 dan esa 50% samaraliroq. AV1 apparat dekodlashi faqat 2023+ yil SoC larida paydo bo'lgan: Apple A17 Pro, Qualcomm Snapdragon 8 Gen 2 va undan yangilari. Eski qurilmalar uchun AV1 dekodlashi faqat dav1d kutubxonasi orqali dasturiy ravishda mumkin, bu esa CPU ga sezilarli yuk yaratadi.

Dasturiy vs apparat dekodlash

Dasturiy va apparat dekodlash o'rtasidagi tanlov mobil media pleyerini ishlab chiqishda asosiy arxitektura qaroridir. Har bir yondashuvning ilovani loyihalashda hisobga olinishi kerak bo'lgan afzalliklari va cheklovlari mavjud.

Ishlash va energiya sarfi

Apparat dekodlashi bir xil vazifani bajarishda CPU dan sezilarli darajada kam energiya sarflaydigan ixtisoslashtirilgan video qayta ishlash bloklarida amalga oshiriladi. Qualcomm ma'lumotlariga ko'ra, H.265 apparat dekoderi 4K video ijro etishda Snapdragon 8 Gen 1 CPU sidagi dasturiy dekodlashdan 5–10 marta kam energiya sarflaydi. Bu har bir millivat batareya quvvatiga ta'sir qiladigan mobil qurilmalar uchun juda muhimdir.

Dasturiy dekodlash esa maksimal moslashuvchanlikni beradi. FFmpeg libavcodec kutubxonasi bilan apparat qo'llab-quvvatlashi bo'lmagan noyob va eskirgan formatlarni ham o'z ichiga olgan holda o'nlab kodek va konteynerlarni qo'llab-quvvatlaydi. Dasturchi dekodlash quvurini o'zgartirishi, uchish paytida post-ishlov va filtrlarni qo'shishi mumkin, bu esa yopiq apparat bloklaridan foydalanganda mumkin emas.

Qachon dasturiy dekodlashni tanlash kerak

Dasturiy dekodlash bir necha stsenariyda oqlanadi: noyob formatlarni (ProRes, DNxHD, Motion JPEG) ijro etishda, kadrni qayta ishlashning har bir bosqichi ustidan aniq nazorat zarur bo'lganda, shuningdek apparat qo'llab-quvvatlashi bo'lmagan qurilmalarda AV1 dekodlashda. libavcodec FFmpeg tarkibida amalda har qanday ma'lum formatni dekodlash imkonini beradi, bu esa uni universal media pleyerlari uchun de-fakto standartga aylantiradi.

Dasturiy dekodlashning cheklovi — issiqlik ajralishi. CPU da 4K videoni uzluksiz dekodlash 10–15 daqiqa ichida qurilmani 45–50 darajaga qadar qizdirishi mumkin, bu esa trottlingga va kadrlar chastotasining pasayishiga olib keladi. Faol sovutish tizimi bo'lmagan qurilmalarda (planshetlar, telefonlar) bu ayniqsa sezilarli. CPU energiya sarfi dasturiy dekodlashda bir xil oqimning apparat dekodlashida 0,3–0,5 Vt ga nisbatan 3–5 Vt ga yetishi mumkin.

Qachon apparat dekodlashni tanlash kerak

Apparat dekodlashi har qanday ishlab chiqarish media pleyeri uchun standart tanlovdir. Minimal energiya sarfi bilan 4K video uchun barqaror 60 kadr/s ni ta'minlaydi. iOS da VideoToolbox va Android da MediaCodec kodek va piksellar soniga qarab avtomatik ravishda optimal qayta ishlash blokini tanlaydigan apparat dekodlash uchun mahalliy API larni taqdim etadi.

Platforma API lari kadr buferlarini boshqarish (Android da surface pool, iOS da CVPixelBufferPool), displey bilan sinxronizatsiya va xotirani optimallashtirishni o'z zimmasiga oladi. Dasturchi shunchaki kerakli parametrlar bilan dekoderni ochishi va tayyor kadrlarni qabul qilishi kerak. Apparat dekodlashi minimal kechikish bilan uchdan-uchga quvurni qo'llab-quvvatlaydi: bit oqimini qabul qilishdan ekranga chiqarishgacha dasturiy dekodlashda 30–80 ms ga nisbatan 5–15 ms o'tadi.

Dekodlash kod namunalari

Ikkala mobil platformada dekodlashning amaliy tatbiqini ko'rib chiqamiz. iOS da apparat dekodlashi VideoToolbox orqali, dasturiy dekodlash esa FFmpeg orqali amalga oshiriladi. Android da apparat dekodlash uchun MediaCodec ishlatiladi.

iOS da VideoToolbox bilan apparat dekodlashi

objective-c
@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

Kod iOS da H.264 apparat dekoderining ishga tushirilishini ko'rsatadi. VTDecompressionSessionCreate dekodlash sessiyasini yaratadi, VTCreate esa tayyor kadr paydo bo'lganda callback ni chaqiradi. Sessiya belgilangan kodek uchun mavjud bo'lsa, avtomatik ravishda apparat blokidan foydalanadi. CVPixelBuffer formatidagi dekodlangan kadrlarni qabul qilish uchun har bir tayyor kadrni minimal kechikish bilan uzatuvchi callback ishlatiladi.

Android da MediaCodec bilan apparat dekodlashi

java
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 da MediaCodec chiqish uchun piksel buferi emas, balki Surface dan foydalanadi, bu GPU va CPU o'rtasida ma'lumotlar nusxalanishini minimallashtiradi. Dekoder kodek turiga qarab avtomatik ravishda apparat blokini (OMX komponenti) tanlaydi. H.264 uchun ishlab chiqaruvchi tatbiqiga qarab apparat yoki dasturiy bo'lishi mumkin bo'lgan OMX.google.h264.decoder ishlatiladi.

Mobil ilova uchun dekoderni qanday tanlash kerak

Dekodlash strategiyasini tanlash ilovaning maqsadli auditoriyasiga, qo'llab-quvvatlanadigan formatlarga va ishlash talablariga bog'liq. Optimal yechim ko'pincha gibrid yondashuvni o'z ichiga oladi: asosiy formatlar (H.264, H.265) uchun apparat dekodlashi, noyob kodeklar uchun dasturiy fallback.

Prioritetlar bo'yicha tanlash strategiyasi

Agar ilova maksimal moslikka yo'naltirilgan bo'lsa — har qanday qurilmada apparat dekodlanishi kafolatlangan H.264 dan foydalaning. Video striming xizmatlari uchun 2016 yildan keyingi qurilmalarda apparat qo'llab-quvvatlashiga ega H.265 oqlanadi. AV1 — tarmoqli kengligini tejash muhim bo'lgan xizmatlar uchun tanlov: YouTube, Netflix va boshqa yirik platformalar sifatni saqlab qolgan holda CDN xarajatlarini kamaytirish uchun AV1 ni faol joriy qilmoqda.

Muhim parametr — dekoder buferining hajmi. Apparat dekoderlari qattiq bufer hovuziga ega (odatda 4–16 kadr). Yuqori bitreytli oqimni ijro etishda buferlar to'lib ketishi mumkin, bu esa kadrlarning o'tkazib yuborilishiga olib keladi. MediaCodec ma'lum bir qurilmada dekoderning haqiqiy ishlashini aniqlash uchun getOutputFrameRate metodini taqdim etadi, VideoToolbox esa kVTDecodeFrame_EnableAsynchronousDecompression orqali real vaqt rejimida ustuvorlikni boshqarish imkonini beradi.

Issiqlik trottlingi — yana bir omil. Hatto apparat dekodlashi ham uzoq muddatli 4K HDR video ijro etishda qurilmani qizdirishi mumkin. iOS da ProcessInfo va Android da BatteryManager orqali haroratni kuzatish, qizib ketganda oqim sifatini yoki piksellar sonini pasaytirish tavsiya etiladi. Bu, ayniqsa, uzoq tomosha sessiyalari bo'lgan o'yinlar va striming ilovalari uchun juda muhimdir.

Tez-tez beriladigan savollar

Dekodlash kodlashdan nimasi bilan farq qiladi?

Kodlash (encoding) siqilmagan ma'lumotlarni siqilgan formatga aylantiradi, dekodlash (decoding) esa siqilgan oqimdan asl ma'lumotlarni tiklaydi. Bu jarayonlar bir-biriga teskari bo'lib, bir xil algoritmlardan foydalanadi: DCT, kvantlash, harakat kompensatsiyasi. Enkoder to'g'ridan-to'g'ri konvertatsiyani, dekoder esa teskari konvertatsiyani amalga oshiradi.

Mobil ilova uchun qaysi kodek yaxshiroq?

Maksimal moslik uchun — H.264, chunki u zamonaviy qurilmalarning 100 foizida apparat vositasida dekodlanadi. Yaxshiroq siqish uchun — H.265 yoki AV1. Tanlov auditoriyaga bog'liq: agar foydalanuvchilarning 80 foizi 2021+ yil qurilmalariga ega bo'lsa, H.265 pastroq bitreytda yaxshiroq sifatni ta'minlaydi. AV1 2023+ yil apparat qo'llab-quvvatlashiga ega flagman qurilmalar uchun oqlanadi.

Nega apparat dekodlashi dasturiydan tezroq?

Apparat dekoderi faqat dekodlash uchun mo'ljallangan ixtisoslashtirilgan mikrosxema (ASIC) dir. Dekodlashni ketma-ket ko'rsatmalar bilan bajaradigan CPU dan farqli o'laroq, apparat bloki makrobloklarni parallel ravishda qayta ishlaydi. Energiya sarfi apparat dekoderida 5–10 marta past, chunki chip past chastotada ishlaydi va qo'shimcha quvur bosqichlariga ega emas.

H.264 da profil va daraja nima?

Profil (profile) enkoder tomonidan ishlatiladigan siqish algoritmlari to'plamini belgilaydi: Baseline, Main, High. Daraja (level) oqimning maksimal parametrlarini belgilaydi: piksellar soni, bitreyt, bufer hajmi. Mobil qurilmalar uchun High profili va 4.1–5.2 darajasi tavsiya etiladi — bu apparat dekodlashi bilan 1080p–4K video uchun etarli.

Qurilmada kodek qo'llab-quvvatlashini qanday tekshirish mumkin?

Android da mavjud kodeklar ro'yxatini olish va qaysi biri apparat ekanligini tekshirish uchun MediaCodecList dan foydalaning. iOS da ko'rsatilgan kodek bilan CMVideoFormatDescription orqali qo'llab-quvvatlashni tekshiring — agar VTDecompressionSessionCreate muvaffaqiyatli bo'lsa, kodek qo'llab-quvvatlanadi. Android da AV1 uchun OMX.google.aomc.decoder kodeki yoki uning apparat versiyasi mavjudligini tekshiring.

Xulosa

  • Decoding — kodlashga teskari jarayon: siqilgan bit oqimidan asl siqilmagan video kadr tiklanadi
  • Apparat dekodlashi GPU/DSP bloklarida amalga oshiriladi, 5–10 marta kam energiya sarflaydi, lekin qo'llab-quvvatlanadigan formatlar bilan cheklangan
  • Dasturiy dekodlash FFmpeg/libavcodec orqali istalgan kodeklar bilan moslikni ta'minlaydi, lekin CPU ni yuklaydi va qizishga sabab bo'ladi
  • H.264 — barcha qurilmalarda apparat qo'llab-quvvatlashiga ega universal kodek, maksimal moslik uchun optimal
  • H.265 ikki baravar yaxshi siqishni ta'minlaydi, 2016 yildan keyingi qurilmalarda apparat bilan qo'llab-quvvatlanadi
  • AV1 — 2023+ yil flagmanlarida apparat qo'llab-quvvatlashi va eski qurilmalarda dav1d orqali dasturiy qo'llab-quvvatlashi bilan eng samarali kodek
  • Tanlang gibrid strategiyani: asosiy formatlar uchun apparat dekodlashi, noyob kodeklar uchun dasturiy fallback

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing