Uskunaviy dekodlash: bu nima, ishlash prinsipi va afzalliklari

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

Hardware decoding — SoC ichidagi ixtisoslashgan GPU, DSP chiplari yoki video qayta ishlash bloklari yordamida media ma'lumotlarini uskunaviy dekodlash. Dasturiy dekodlashdan farqli o'laroq, uskunaviy dekodlash faqat video dekompressiyasi uchun mo'ljallangan fizik sxemalarda amalga oshiriladi. Apple VideoToolbox documentation (2026) ma'lumotlariga ko'ra, A seriyali chiplarda uskunaviy dekodlash 4K H.264 uchun 60 FPS da energiya samaradorligi 0,3 Vt ga etadi.

Asosiy ma'lumotlar

  • Hardware decoding — asosiy CPU ni yuklamasdan SoC ning ixtisoslashgan bloklarida media dekompressiyasi
  • Energiya sarfi uskunaviy dekoderda bir xil sifatda dasturiyga nisbatan 5–10 marta kam
  • Kechikish uskunaviy dekodlashda 5–15 ms, dasturiyda esa 30–80 ms
  • Formatlarni qo'llab-quvvatlash fizik bloklar bilan cheklangan: H.264, H.265, VP9, AV1 (SoC 2023+)
  • API: iOS da VideoToolbox va Android da MediaCodec uskunaviy dekoderlarga kirishni ta'minlaydi

Uskunaviy dekodlash nima?

Hardware decoding — media ma'lumotlarini universal CPU da emas, balki sistem-on-chip (SoC) ga integratsiyalangan ixtisoslashgan integral sxemalarda dekompressiya qilish jarayoni. Bunday bloklar video dekoderlar yoki VPU (Video Processing Unit) deb ataladi va ma'lum siqish algoritmlari uchun optimallashtirilgan ASIC tezlatkichlaridir.

Zamonaviy mobil SoC lar har bir mashhur kodek uchun alohida uskunaviy bloklarni o'z ichiga oladi. Masalan, Apple A17 Pro chipi H.264, H.265, VP9, AV1 va ProRes uchun dekoderlarga ega. Har bir blok kirishda siqilgan bit oqimini qabul qilib, chiqishda CPU ishtirokisiz YUV yoki BGRA formatidagi tayyor dekodlangan kadrlarni bera oladigan to'liq qayta ishlash konveyerini tashkil qiladi.

Uskunaviy dekodlash 2012–2013 yillarda mobil sanoatda standartga aylandi, o'shanda Qualcomm Snapdragon 800 va Apple A7 birinchi marta H.264 dekodlash uchun ajratilgan bloklarni o'z ichiga olgan. O'shandan beri texnologiya bir formatni qo'llab-quvvatlashdan bir vaqtning o'zida bir necha oqimni dekodlay oladigan universal ko'p formatli bloklargacha rivojlandi — masalan, alohida video oqim bilan PiP ishi uchun.

Uskunaviy dekodlash qanday ishlaydi?

Uskunaviy dekodlash jarayoni dasturiydan tubdan farq qiladi. CPU ko'rsatmalarining ketma-ket bajarilishi o'rniga, uskunaviy blok dekompressiyaning har bir bosqichi uchun fizik sxemalarni amalga oshiradi: entropiya dekodlash, teskari kvantlash, teskari DCT va harakat kompensatsiyasi.

Uskunaviy dekoder arxitekturasi

Oddiy uskunaviy dekoder bir necha konveyer bosqichidan iborat. Birinchi bosqich — CABAC yoki CAVLC uchun chekli avtomat (FSM) ko'rinishida amalga oshirilgan entropiya dekoderi. Dasturiy ta'minotda har bir bit shartli o'tishlar bilan qayta ishlansa, uskunaviy CABAC parallel kontekst prognozlash sxemalaridan foydalanadi, bu esa bir takt o'rniga 2–3 bitni qayta ishlashga imkon beradi.

Ikkinchi bosqich — teskari DCT bloki. Dasturiy DCT CPU da ko'paytirish-yig'ish sikllarini talab qiladi. Uskunaviy amalga oshirish bir taktda 8×8 blokning barcha 64 koeffitsiyentini hisoblaydigan matritsali ko'paytirgichdan foydalanadi. Uskunaviy teskari DCT 400–600 MHz chastotada ishlaydi va sekundiga 4 million makroblokgacha qayta ishlaydi, bu real vaqtda 8K videoni dekodlash uchun yetarli.

Uchinchi bosqich — harakat kompensatsiyasi (MC) moduli. Teskari DCT bilan parallel ravishda uskunaviy blok bit oqimidan harakat vektorlarini oladi va dekodlangan kadrlar buferidan mos yozuvlar sohalarini chiqaradi. DPB buferi (Decoded Picture Buffer) 16 tagacha mos yozuvlar kadrini saqlaydi, ularga kirish past kechikishli ixtisoslashgan kesh xotira orqali amalga oshiriladi. Zamonaviy dekoderlar adaptiv silliqlash va subpiksel interpolyatsiyasi bilan prognozlashdan foydalanadi, bu H.265 va AV1 uchun muhimdir.

Tizim bilan o'zaro aloqa

Uskunaviy dekoderni boshqarish DMA kontrolleri orqali amalga oshiriladi. Ilova dekoderga umumiy xotirada siqilgan ma'lumotlarga ko'rsatgich uzatadi, dekoder esa mustaqil ravishda to'g'ridan-to'g'ri xotiraga kirish orqali bit oqimini o'qiydi. Kadrni dekodlash tugagach, uzilish drayverni xabardor qiladi va tayyor kadr chiqish buferlari hovuzida mavjud bo'ladi. Bunday mexanizm ma'lumotlarni qayta ishlash bosqichida CPU yuklanishini butunlay yo'q qiladi — protsessor faqat dekodlashni boshlaydi va tayyor natijani oladi.

VideoToolbox va MediaCodec: platformalarni taqqoslash

Ikkala mobil platforma ham uskunaviy dekodlash uchun mahalliy API taqdim etadi, lekin buferlarni boshqarish va dekoder hayotiy siklida turlicha yondashuvlar bilan. iOS da VideoToolbox ekranga chiqish uchun Metal bilan zich integratsiyalangan, Android da MediaCodec esa to'g'ridan-to'g'ri render uchun Surface dan foydalanadi.

ParametrVideoToolbox (iOS)MediaCodec (Android)
Chiqish formatiCVPixelBuffer (Metal/OpenGL)Surface yoki ByteBuffer
Xotira boshqaruviPool orqali avtomatikDequeue orqali qo'lda
Ip xavfsizligiHa, asinxron callbackHa, sinxron API
HDR qo'llab-quvvatlashHa (PQ, HLG)Ha (HDR10, HDR10+)
Ko'p dekodlash4 seansgacha (A17)SoC ga bog'liq

VideoToolbox — iOS va macOS da uskunaviy dekodlash uchun freymvork. Asinxron dekodlash modelidan foydalanadi: VTDecompressionSessionDecodeFrame chaqiruvi darhol qaytadi, tayyor kadrlar esa alohida navbatda callback orqali keladi. VideoToolbox piksel buferlari hovuzini (CVPixelBufferPool) avtomatik boshqaradi va yangi kadrlar uchun bo'shatilgan buferlarni qayta ishlatishi mumkin. HDR video uchun VideoToolbox ITU-R BT.2020 rang fazolarini va PQ/HLG EOTF ni qo'llab-quvvatlaydi.

MediaCodec kirish va chiqish buferlari navbatlari bilan sinxron modeldan foydalanadi. Ilova davriy ravishda siqilgan ma'lumotlarni yuborish uchun dequeueInputBuffer va dekodlangan natijani olish uchun dequeueOutputBuffer chaqiradi. Bu yondashuv dasturchiga dekodlash tezligi ustidan to'liq nazorat beradi, bu audio va video sinxronizatsiyasi uchun muhimdir. Ekranga chiqish uchun MediaCodec Surface ni qabul qiladi, bu CPU orqali nusxalamasdan to'g'ridan-to'g'ri GPU da dekodlash imkonini beradi.

Uskunaviy dekodlashning afzalliklari

Uskunaviy dekodlash dasturiyga nisbatan uchta asosiy afzallik beradi: energiya samaradorligi, unumdorlik va barqarorlik. Ularning har biri cheklangan batareya resurslari va termal cheklovlarga ega mobil qurilmalar uchun muhimdir.

Energiya samaradorligi

Uskunaviy dekodlashning asosiy afzalligi — tubdan past energiya sarfi. Oddiy uskunaviy H.264/H.265 dekoderi real vaqtda 1080p videoni dekodlashda 0,2–0,5 Vt energiya sarflaydi. Taqqoslash uchun, CPU da bir xil oqimning dasturiy dekodlashi protsessor arxitekturasiga qarab 1,5–4 Vt energiya sarflaydi. 5–10 marta farq to'g'ridan-to'g'ri batareyaning ishlash muddatiga ta'sir qiladi: video tomosha qilishda uskunaviy dekodlash 10–15 soat film ko'rish imkonini beradi, CPU da dasturiy dekodlash esa atigi 2–4 soat.

Energiya samaradorligi tor ixtisoslashish hisobiga erishiladi. Keng spektrli ko'rsatmalarni bajaradigan va murakkab boshqaruv mantiqiga ega CPU dan farqli o'laroq, uskunaviy dekoder faqat ma'lum algoritm uchun zarur sxemalarni o'z ichiga oladi. Takt chastotasi bunday bloklarning 200–600 MHz ni, CPU da esa 2–3 GHz ni tashkil qiladi, bu dinamik energiya sarfini kuchlanish kvadratiga mutanosib ravishda kamaytiradi.

Unumdorlik va issiqlik ajratish

Uskunaviy dekodlash hatto yuqori ruxsatlarda ham kafolatlangan kadr chastotasini ta'minlaydi. Konveyer arxitekturasi tufayli uskunaviy blok bir vaqtning o'zida dekompressiyaning bir necha bosqichini qayta ishlashi mumkin: bir modul keyingi makroblok uchun entropiya dekodlashni amalga oshirayotganda, boshqasi joriyga teskari DCT ni qo'llaydi. Bunday parallellik CPU da erishib bo'lmaydi, bu yerda har bir bosqich ketma-ket amaldir.

Uskunaviy dekoderning issiqlik ajratishi sezilarli darajada past: oddiy blok 4K videoning dasturiy dekodlashida CPU ning 2–6 Vt iga nisbatan 0,3–0,8 Vt issiqlik ajratadi. Bu degani, qurilma hatto uzoq muddatli tomosha paytida ham qizib ketmaydi, trottling yuz bermaydi va foydalanuvchi pasayishlarsiz barqaror 60 FPS oladi. Korpus harorati uskunaviy dekodlashda odatda dasturiydan 5–10 daraja past, bu ayniqsa faol sovutishsiz planshetlar uchun muhimdir.

Uskunaviy dekodlash kod namunalari

iOS da VideoToolbox orqali callback lar bilan uskunaviy dekodlashning va Android da MediaCodec orqali to'liq pipeline ning amaliy tatbiqini ko'rib chiqamiz.

iOS da uskunaviy dekodlashning to'liq namunasi

swift
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
        )
    }
}

Kod asinxron callback bilan VideoToolbox dekodlash seansi yaratadi. VTDecompressionSessionCreate uzatilgan CMVideoFormatDescription asosida mavjud uskunaviy dekoderni avtomatik aniqlaydi. kVTDecodeFrame_EnableAsynchronousDecompression bayrog'i asinxron rejimni faollashtiradi — ilova dekodlash vaqtida bloklanmaydi, kadrlarni callback orqali oladi. H.264 uchun SPS/PPS NAL birliklaridan CMVideoFormatDescriptionCreateFromH264ParameterSets orqali format description oldindan yaratilishi kerak.

Android da uskunaviy dekodlash Surface ga chiqish bilan

kotlin
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 kodi ma'lumotlarni CPU orqali nusxalamasdan to'g'ridan-to'g'ri ekranga chiqishni ta'minlaydigan Surface bilan MediaCodec yaratadi. mimeType parametri MediaFormat konstantalaridan foydalanadi: H.264 uchun video/avc, H.265 uchun video/hevc, AV1 uchun video/av01. dequeueInputBuffer metodi timeout bilan bo'sh kirish buferini kutadi; bufer mavjud bo'lmasa — joriy kadr o'tkazib yuboriladi, bu notekis bitrate da navbatning to'lib ketishining oldini oladi.

Uskunaviy dekodlashni qachon tanlash kerak

Uskunaviy dekodlash ko'pchilik ishlab chiqarish stsenariylari uchun optimal tanlovdir, lekin universal yechim emas. Qo'llanish chegaralarini tushunish kodekning uskunaviy qo'llab-quvvatlanmasligi foydalanuvchi tajribasini buzadigan vaziyatlardan qochishga yordam beradi.

Majburiy foydalanish stsenariylari

Uskunaviy dekodlash uchta holatda majburiydir: uzoq muddatli video tomosha (30 daqiqadan ortiq), 4K tarkibini dekodlash va maksimal batareya ishlash muddatiga yo'naltirilgan har qanday ilova. Striming xizmatlari (Netflix, YouTube, Twitch) faqat uskunaviy dekodlashdan foydalanadi, chunki dasturiy yuqori bitrate va katta ruxsatda barqaror ijro etishni kafolatlay olmaydi. Bu xizmatlar uchun faqat dekoderdan ekrangacha himoyalangan pipeline ni ta'minlaydigan uskunaviy blok orqali mumkin bo'lgan DRM (FairPlay, Widevine) qo'llab-quvvatlashi muhimdir.

Integratsiyalashgan video bilan o'yinlar uchun (kesma sahnalar, reklama, o'yin ichidagi videolar) ham uskunaviy dekodlash tavsiya etiladi. Unity va Unreal Engine kabi zamonaviy o'yin dvigatellari VideoToolbox va MediaCodec uchun ichki qo'llab-quvvatlashga ega. Uskunaviy dekodlash o'yinlarda CPU ni fizika simulyatsiyasi, raqib AI si va kiritishni qayta ishlash uchun bo'shatadi, bu umumiy unumdorlikni oshiradi.

Cheklovlar va fallback

Uskunaviy dekodlashning asosiy cheklovi — formatning uskunaviy qo'llab-quvvatlanishiga bog'liqlik. SoC da AV1 uchun dekoder bo'lmasa (masalan, Snapdragon 8 Gen 1 qurilmalari), ilova FFmpeg va dav1d orqali dasturiy fallback ni ta'minlashi kerak. Xuddi shu holat eski qurilmalarda H.265 va faqat Apple A13+ chiplarida dekodlash uchun qo'llab-quvvatlanadigan ProRes bilan ham mavjud. Ijro etishni boshlashdan oldin kerakli formatning uskunaviy dekoderi mavjudligini tekshirish va dekodlash strategiyasini dinamik tanlash tavsiya etiladi.

Ikkinchi cheklov — bir vaqtda dekodlash seanslari soni. Ko'pchilik SoC lar 1–2 parallel uskunaviy dekoderni qo'llab-quvvatlaydi. Uchinchi seansni ochishga urinishda API xato qaytaradi va ilova dasturiy dekodlashga o'tishi kerak. Seanslar soni SoC ishlab chiqaruvchisiga bog'liq: Apple chiplari A17 Pro da 4 seans H.264 dekodlashga, Snapdragon 8 Gen 2 esa H.265 uchun 2 va VP9 uchun jami 2 seansga ruxsat beradi.

Tez-tez beriladigan savollar

Uskunaviy dekodlash ishlatilayotganini qanday tekshirish mumkin?

iOS da VTDecompressionSessionCopySupportedPropertyDictionary dan foydalaning va kVTDecompressionPropertyKey_UsingHardwareAcceleratedVideoDecoder ni tekshiring. Android da MediaCodec.getCodecInfo().isHardwareAccelerated() ni chaqiring. Agar false qaytarsa — dasturiy dekoder ishlatilmoqda, odatda OMX.google.*.

Uskunaviy dekodlash DRM himoyalangan tarkibni qo'llab-quvvatlaydimi?

Ha, uskunaviy dekodlash striming xizmatlarida DRM tarkibi uchun majburiydir. iOS da FairPlay va Android da Widevine L1 dekodlangan kadrlar ilova tomonidan o'qilishi mumkin bo'lmagan dekoderdan ekrangacha himoyalangan pipeline ni talab qiladi. Bunday pipeline faqat secure session qo'llab-quvvatlashi bilan uskunaviy dekodlashda mumkin.

iOS da VDADecoder nima?

VDADecoder (Video Decode Acceleration) — iOS 6–8 dan eskirgan, VideoToolbox bilan almashtirilgan freymvork. VideoToolbox H.265, HDR va ko'p ipli qo'llab-quvvatlash bilan zamonaviyroq va moslashuvchan API taqdim etadi. VDADecoder yangi loyihalar uchun tavsiya etilmaydi — VideoToolbox dan VTDecompressionSession dan foydalaning.

Uskunaviy dekoder fonda ishlay oladimi?

Ko'p hollarda yo'q. iOS da uskunaviy dekoder energiya iste'moli cheklovlari sababli faol ilovani talab qiladi. Android da MediaCodec orqali xizmatda fonda dekodlash mumkin, lekin unumdorlik pasayishi mumkin. Istisno — tizim suzuvchi oynada uskunaviy dekodlashga ruxsat beradigan PiP rejimi.

Qaysi kodek eng yaxshi uskunaviy qo'llab-quvvatlashga ega?

Mutlaq yetakchi — H.264, zamonaviy mobil qurilmalarning 100% ida uskunaviy dekodlanadi. H.265 ~80% qurilmalarda qo'llab-quvvatlanadi (iOS 8+, tegishli SoC bilan Android 5+). AV1 eng cheklangan: uskunaviy qo'llab-quvvatlash faqat Snapdragon 8 Gen 2, Exynos 2200 va Apple A17 Pro bilan 2023+ qurilmalarida.

Xulosa

  • Hardware decoding — 0,2–0,5 Vt sarf bilan SoC ning ixtisoslashgan ASIC bloklarida media dekompressiyasi
  • Energiya samaradorligi dasturiy dekodlashdan 5–10 marta yuqori, 10–15 soat video tomosha
  • Kechikish uskunaviy dekodlashda 5–15 ms, dasturiyda 30–80 ms konveyer arxitekturasi tufayli
  • VideoToolbox iOS da va MediaCodec Android da uskunaviy dekodlash uchun mahalliy API
  • Cheklov — format qo'llab-quvvatlashi SoC ga bog'liq; AV1 uchun 2023+ qurilmasi talab qilinadi
  • Uskunaviy dekodlash 4K video, uzoq muddatli tomosha va DRM himoyalangan tarkib uchun majburiy
  • Ishlating uskunaviy dekodlashni asosiy sifatida, qo'llab-quvvatlanmaydigan formatlar uchun dasturiy fallback bilan

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