Mobil tətbiqlərdə Decoding: nədir, əsas anlayışlar və iş prinsipi

Müəllif: IT Sectr Dərc olunub: 2026-05-25 Oxuma vaxtı: 10 dəq

Decoding — sıxılmış media axınının ekran və dinamiklər üçün uyğun olan sıxılmamış formata çevrilməsi prosesidir. Mobil cihazlarda dekodinq ya proqram vasitəsilə CPU-da, ya da GPU və DSP-nin ixtisaslaşdırılmış blokları vasitəsilə aparatla yerinə yetirilir. MDN Web Docs (2026) məlumatına görə, müasir kodeklər axını 100–500 dəfə sıxır və dekodinq düzgün sıxılma profilinin seçilməsi şərti ilə orijinal keyfiyyəti itkisiz bərpa edir.

Əsas məqamlar

  • Decoding — sıxılmış medianın cihazlarda oxutma üçün sıxılmamış PCM-formatına çevrilməsi
  • Kodeklər H.264, H.265, VP9 və AV1 müxtəlif sıxılma alqoritmləri və keyfiyyət profillərindən istifadə edir
  • Apparat dekodinqi GPU/DSP-də yerinə yetirilir və proqramdan 3–5 dəfə az enerji sərf edir
  • Proqram dekodinqi FFmpeg vasitəsilə CPU yükü bahasına istənilən formatla uyğunluğu təmin edir
  • Dekoder seçimi oxutma müddətinə, cihazın qızmasına və batareya ömrünə təsir edir

Decoding nədir?

Decoding — sıxılmış rəqəmsal məlumatların orijinal sıxılmamış formata geri çevrilməsi prosesidir. Media kontekstində dekodinq enkoder tərəfindən yaradılmış sıxılmış bit axınından video kadrları bərpa edir. Dekodinq olmadan istifadəçi videonu görə və ya audionu eşidə bilməz, çünki bütün müasir media formatları bant genişliyinə və disk yerinə qənaət etmək üçün sıxılmadan istifadə edir.

5 Mbit/s bitreytli H.264 formatında tipik video axını oxşar rezolyusiyaya malik sıxılmamış RGB axınından 100 dəfə az yer tutur. Dekodinq alqoritmi hər bir kadrı orijinal rezolyusiyaya və rəng məkanına qaytarmalı, kodlaşdırmaya nisbətən tərs ardıcıllıqla kodek spesifikasiyasına əməl etməlidir. Bunun üçün dekoder kadrdaxili (I-frame) və kadrarası (P-frame, B-frame) məlumatları emal edir.

Mobil cihazlarda dekodinq həm CPU-da, həm də ayrılmış aparat bloklarında baş verə bilər. Apple (A seriyası), Qualcomm (Snapdragon) və MediaTek (Dimensity) tərəfindən müasir SoC-lər bütün məşhur formatlar üçün quraşdırılmış dekoderlərə malikdir. Video prosessor tərs diskret kosinus çevrilməsi və hərəkət kompensasiyası üzrə ağır işi öz üzərinə götürür, CPU-nu digər tapşırıqlar üçün azad edir.

Dekodinq necə işləyir?

Dekodinq prosesi kodlaşdırma addımlarını tərsinə çevirən bir neçə ardıcıl mərhələdən ibarətdir. Əvvəlcə bit axınından başlıqlar və sıxılma parametrləri — profil, səviyyə, rezolyusiya, rəng məkanı çıxarılır. Sonra dekoder sıxılmış makroblokları ardıcıl olaraq emal edir, onlara tərs çevrilmələr tətbiq edir.

Video axınının dekodinq mərhələləri

Birinci mərhələ — entropiya kodunun çıxarılması. Entropiya dekodlaşdırması diskret kosinus çevrilməsinin əmsallarını bərpa etmək üçün CABAC və ya CAVLC alqoritmlərindən istifadə edir. Bu mərhələ videonun rezolyusiyasından asılı deyil — o, pikselləri deyil, bit axınını emal edir və onun mürəkkəbliyi kadr ölçüləri ilə deyil, bitreytlə müəyyən edilir.

İkinci mərhələ — tərs kvantlaşdırma və tərs DCT. Dekoder kvantlaşdırılmış əmsalları kvantlaşdırma addımına vurur, DCT-əmsallarının təxmini dəyərlərini bərpa edir, sonra tərs DCT çevrilməsini tətbiq edir. Tərs DCT tezlik sahəsindən məkan məlumatlarını bərpa edərək piksel makrobloku yaradır. Xroma və lüma üçün çevrilmə müstəqil şəkildə yerinə yetirilir.

Üçüncü mərhələ — hərəkət kompensasiyası. P- və B-kadrlar üçün dekoder bit axınından çıxarılmış hərəkət vektorlarından istifadə edir və əvvəllər dekodlaşdırılmış istinad kadrlarına istinad edir. Hərəkət kompensasiyası cari makroblokun prediktorunu yaradır, ona tərs DCT-dən sonra qalıq siqnal əlavə edilir. Nəticə — ekrana çıxarmağa hazır tam bərpa edilmiş kadr.

cpp
// Video kadrının əsas dekodinqinin psevdokodu
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;
    }
};

Yuxarıdakı nümunədə H.264 dekoderinin əsas strukturu göstərilmişdir. decodeNALUnit funksiyası H.264 sıxılmış axınının əsas bloku olan NAL vahidini qəbul edir. Dekoder ardıcıl olaraq başlığı təhlil edir, slayş tipini çıxarır, entropiya dekodlaşdırması, tərs kvantlaşdırma və tərs DCT tətbiq edir. P- və B-slayşlar üçün DPB buferindən istinad kadrlarından istifadə edərək əlavə olaraq hərəkət kompensasiyası yerinə yetirilir.

Sıxılma formatları və kodeklər

Müasir video kodeklər sıxılma alqoritmləri, səmərəlilik və hesablama resurslarına tələblər baxımından fərqlənir. Format seçimi birbaşa fayl ölçüsünə, təsvir keyfiyyətinə və mobil cihazda dekodinq zamanı enerji sərfiyyatına təsir edir.

KodekİlSıxılmaApparat dəstəyi
H.26420031:100Bütün müasir SoC-lər
H.26520131:200Apple A8+, Snapdragon 805+
VP920131:180Snapdragon 820+, Exynos
AV120181:300Apple A17+, Snapdragon 8 Gen 2+

H.264 — bütün mobil cihazlar tərəfindən dəstəklənən ən geniş yayılmış video kodekidir. Onun əsas üstünlüyü universallıqdır: istənilən Android smartfonu və iPhone H.264-ü aparatla dekodlaşdıra bilər. Lakin eyni bitreytdə H.264 keyfiyyətcə daha müasir H.265 və AV1 kodeklərindən geri qalır, analoji vizual keyfiyyət üçün 30–50% daha çox bitreyt tələb edir.

H.265 eyni keyfiyyətdə H.264 ilə müqayisədə iki dəfə yaxşı sıxılma təmin edir. H.265-in dekodlaşdırılması daha güclü aparat bloku tələb edir: iOS-da VideoToolbox H.265-i iPhone 6-dan (A8) başlayaraq, Android cihazları isə Snapdragon 805 və yuxarıdan dəstəkləyir. Mobil tətbiq üçün H.265 seçərkən nəzərə almalısınız ki, köhnə cihazlarda aparat dəstəyi olmaya bilər və onlar bu formatı proqram vasitəsilə dekodlaşdıracaq, bu da enerji sərfiyyatını kəskin artırır.

AV1 — Alliance for Open Media-dan açıq kodek, bütün müasir formatlar arasında ən yaxşı sıxılmanı təmin edir. AV1 eyni vizual keyfiyyətdə H.265-dən 30%, H.264-dən isə 50% daha səmərəlidir. AV1-in aparat dekodinqi yalnız 2023+ il SoC-lərində peyda olub: Apple A17 Pro, Qualcomm Snapdragon 8 Gen 2 və daha yeniləri. Köhnə cihazlar üçün AV1 dekodinqi yalnız dav1d kitabxanası vasitəsilə proqram şəklində mümkündür ki, bu da CPU-ya əhəmiyyətli yük yaradır.

Proqram vs aparat dekodlaşdırması

Proqram və aparat dekodinqi arasında seçim mobil media pleyerinin hazırlanmasında əsas memarlıq qərarıdır. Hər bir yanaşmanın tətbiqin layihələndirilməsi zamanı nəzərə alınmalı olan üstünlükləri və məhdudiyyətləri var.

Performans və enerji sərfiyyatı

Apparat dekodinqi eyni tapşırığı yerinə yetirərkən CPU-dan əhəmiyyətli dərəcədə az enerji sərf edən ixtisaslaşdırılmış video emal bloklarında yerinə yetirilir. Qualcomm məlumatına görə, H.265 aparat dekoderi 4K video oxutma zamanı Snapdragon 8 Gen 1 CPU-da proqram dekodinqindən 5–10 dəfə az enerji sərf edir. Bu, hər millivatın batareya ömrünə təsir etdiyi mobil cihazlar üçün kritik əhəmiyyət daşıyır.

Proqram dekodinqi isə maksimum elastiklik verir. FFmpeg libavcodec kitabxanası ilə aparat dəstəyi olmayan nadir və köhnəlmiş formatlar da daxil olmaqla, onlarla kodek və konteyneri dəstəkləyir. Tərtibatçı dekodinq boru xəttini dəyişdirə, post-emal və filtrləri uçuşda əlavə edə bilər ki, bu da qapalı aparat bloklarından istifadə edərkən mümkün deyil.

Nə vaxt proqram dekodinqini seçməli

Proqram dekodinqi bir neçə ssenaridə əsaslandırılır: nadir formatları (ProRes, DNxHD, Motion JPEG) oxutduqda, kadr emalının hər mərhələsinə dəqiq nəzarət lazım olduqda, həmçinin aparat dəstəyi olmayan cihazlarda AV1 dekodinqi zamanı. libavcodec FFmpeg tərkibində praktiki olaraq hər hansı məlum formatı dekodlaşdırmağa imkan verir ki, bu da onu universal media pleyerləri üçün de-fakto standarta çevirir.

Proqram dekodinqinin məhdudiyyəti istilik buraxılmasıdır. CPU-da 4K videonun fasiləsiz dekodlaşdırılması 10–15 dəqiqə ərzində cihazı 45–50 dərəcəyə qədər qızdıra bilər ki, bu da trotlinqə və kadr tezliyinin azalmasına səbəb olur. Aktiv soyutma olmayan cihazlarda (planşetlər, telefonlar) bu xüsusilə nəzərə çarpır. CPU enerji sərfiyyatı proqram dekodinqi zamanı eyni axının aparat dekodinqində 0,3–0,5 Vt-a qarşı 3–5 Vt-a çata bilər.

Nə vaxt aparat dekodinqini seçməli

Apparat dekodinqi istənilən istehsal media pleyeri üçün standart seçimdir. Minimum enerji sərfiyyatı ilə 4K video üçün sabit 60 kadr/s təmin edir. iOS-da VideoToolbox və Android-də MediaCodec kodek və rezolyusiyadan asılı olaraq avtomatik olaraq optimal emal blokunu seçən aparat dekodinqi üçün yerli API təqdim edir.

Platforma API-ləri kadr buferlərinin idarə edilməsini (Android-də surface pool, iOS-da CVPixelBufferPool), displeylə sinxronizasiyanı və yaddaş optimallaşdırmasını öz üzərinə götürür. Tərtibatçı sadəcə lazımi parametrlərlə dekoderi açmalı və hazır kadrları qəbul etməlidir. Apparat dekodinqi minimal gecikmə ilə ucadan-uca boru xəttini dəstəkləyir: bit axınının qəbulundan ekrana çıxarılana qədər proqram dekodinqində 30–80 ms-ə qarşı 5–15 ms keçir.

Dekodinq kod nümunələri

Hər iki mobil platformada dekodinqin praktik tətbiqini nəzərdən keçirək. iOS-da aparat dekodinqi VideoToolbox vasitəsilə, proqram dekodinqi isə FFmpeg vasitəsilə yerinə yetirilir. Android-də aparat dekodinqi üçün MediaCodec istifadə olunur.

iOS-da VideoToolbox ilə aparat dekodinqi

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 aparat dekoderinin inisializasiyasını nümayiş etdirir. VTDecompressionSessionCreate dekodinq sessiyası yaradır, VTCreate isə hazır kadr görünəndə callback çağırır. Sessiya göstərilən kodek üçün mövcuddursa, avtomatik olaraq aparat blokundan istifadə edir. CVPixelBuffer formatında dekodlaşdırılmış kadrları qəbul etmək üçün hər hazır kadrı minimal gecikmə ilə ötürən callback istifadə olunur.

Android-də MediaCodec ilə aparat dekodinqi

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-də MediaCodec çıxış üçün piksel buferi deyil, Surface istifadə edir ki, bu da GPU və CPU arasında məlumatların kopyalanmasını minimuma endirir. Dekoder kodek növünə əsasən avtomatik olaraq aparat blokunu (OMX-komponenti) seçir. H.264 üçün istehsalçının tətbiqindən asılı olaraq həm aparat, həm də proqram ola bilən OMX.google.h264.decoder istifadə olunur.

Mobil tətbiq üçün dekoderi necə seçməli

Dekodinq strategiyasının seçimi tətbiqin hədəf auditoriyasından, dəstəklənən formatlardan və performans tələblərindən asılıdır. Optimal həll çox vaxt hibrid yanaşmanı əhatə edir: əsas formatlar (H.264, H.265) üçün aparat dekodinqi, nadir kodeklər üçün proqram fallback.

Prioritetlər üzrə seçim strategiyası

Tətbiq maksimum uyğunluğa yönəlibsə — istənilən cihazda aparat dekodinqinə zəmanət verən H.264-dən istifadə edin. Video striminq xidmətləri üçün 2016-cı ildən sonrakı cihazlarda aparat dəstəyi olan H.265 əsaslandırılır. AV1 — bant genişliyinə qənaətin vacib olduğu xidmətlər üçün seçim: YouTube, Netflix və digər böyük platformalar keyfiyyəti qoruyarkən CDN xərclərini azaltmaq üçün AV1-i fəal şəkildə tətbiq edir.

Kritik parametr — dekoderin bufer ölçüsüdür. Apparat dekoderləri sabit bufer hovuzuna malikdir (adətən 4–16 kadr). Yüksək bitreytli axını oxutduqda buferlər daşa bilər ki, bu da kadrların buraxılmasına səbəb olar. MediaCodec müəyyən cihazda dekoderin real performansını təyin etmək üçün getOutputFrameRate metodunu təqdim edir, VideoToolbox isə kVTDecodeFrame_EnableAsynchronousDecompression vasitəsilə real-vaxt prioritetini idarə etməyə imkan verir.

İstilik trotlinqi digər amildir. Hətta aparat dekodinqi də uzun müddətli 4K HDR video oxutma zamanı cihazı qızdıra bilər. iOS-da ProcessInfo və Android-də BatteryManager vasitəsilə temperaturu izləmək, həddindən artıq qızma zamanı axının keyfiyyətini və ya rezolyusiyasını aşağı salmaq tövsiyə olunur. Bu, xüsusilə uzun baxış sessiyaları olan oyunlar və striminq tətbiqləri üçün kritikdir.

Tez-tez verilən suallar

Dekodinq kodlaşdırmadan nə ilə fərqlənir?

Kodlaşdırma (encoding) sıxılmamış məlumatları sıxılmış formata çevirir, dekodinq (decoding) isə sıxılmış axından orijinal məlumatları bərpa edir. Bu proseslər bir-birinə tərsdir və eyni alqoritmlərdən istifadə edir: DCT, kvantlaşdırma, hərəkət kompensasiyası. Enkoder düz çevrilməni, dekoder isə tərs çevrilməni yerinə yetirir.

Mobil tətbiq üçün hansı kodek daha yaxşıdır?

Maksimum uyğunluq üçün — H.264, çünki o, müasir cihazların 100%-də aparatla dekodlaşdırılır. Daha yaxşı sıxılma üçün — H.265 və ya AV1. Seçim auditoriyadan asılıdır: istifadəçilərin 80%-nin 2021+ il cihazları varsa, H.265 daha aşağı bitreytdə daha yaxşı keyfiyyət təmin edəcək. AV1 2023+ il aparat dəstəyi olan flaqman cihazlar üçün əsaslandırılır.

Niyə aparat dekodinqi proqramdan daha sürətlidir?

Apparat dekoderi yalnız dekodinq üçün nəzərdə tutulmuş ixtisaslaşdırılmış mikrosxemdir (ASIC). Dekodinqi ardıcıl təlimatlarla yerinə yetirən CPU-dan fərqli olaraq, aparat bloku makroblokları paralel emal edir. Enerji sərfiyyatı aparat dekoderində 5–10 dəfə aşağıdır, çünki çip daha aşağı tezlikdə işləyir və əlavə konveyer mərhələlərinə malik deyil.

H.264-də profil və səviyyə nədir?

Profil (profile) enkoder tərəfindən istifadə olunan sıxılma alqoritmləri dəstini müəyyən edir: Baseline, Main, High. Səviyyə (level) axının maksimum parametrlərini təyin edir: rezolyusiya, bitreyt, bufer ölçüsü. Mobil cihazlar üçün High profili və 4.1–5.2 səviyyəsi tövsiyə olunur — bu, aparat dekodinqi ilə 1080p–4K video üçün kifayətdir.

Cihazda kodek dəstəyini necə yoxlamaq olar?

Android-də mövcud kodeklərin siyahısını əldə etmək və hansının aparat olduğunu yoxlamaq üçün MediaCodecList istifadə edin. iOS-da göstərilən kodeklə CMVideoFormatDescription vasitəsilə dəstəyi yoxlayın — əgər VTDecompressionSessionCreate uğurludursa, kodek dəstəklənir. Android-də AV1 üçün OMX.google.aomc.decoder kodekinin və ya onun aparat versiyasının mövcudluğunu yoxlayın.

Nəticə

  • Decoding — kodlaşdırmaya tərs proses: sıxılmış bit axınından orijinal sıxılmamış video kadr bərpa olunur
  • Apparat dekodinqi GPU/DSP bloklarında yerinə yetirilir, 5–10 dəfə az enerji sərf edir, lakin dəstəklənən formatlarla məhdudlaşır
  • Proqram dekodinqi FFmpeg/libavcodec vasitəsilə istənilən kodeklərlə uyğunluğu təmin edir, lakin CPU-nu yükləyir və qızmağa səbəb olur
  • H.264 — bütün cihazlarda aparat dəstəyi olan universal kodek, maksimum uyğunluq üçün optimaldır
  • H.265 iki dəfə yaxşı sıxılma təmin edir, 2016-cı ildən sonrakı cihazlarda aparatla dəstəklənir
  • AV1 — 2023+ il flaqmanlarında aparat dəstəyi və köhnə cihazlarda dav1d vasitəsilə proqram dəstəyi olan ən səmərəli kodek
  • Seçin hibrid strategiyanı: əsas formatlar üçün aparat dekodinqi, nadir kodeklər üçün proqram fallback

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun