Hardware decoding — SoC daxilindəki GPU, DSP və ya video emal blokları kimi ixtisaslaşmış çiplərdən istifadə edərək media məlumatlarının avadanlıq dekodlaşdırması. Proqram təminatı ilə dekodlaşdırmadan fərqli olaraq, avadanlıq dekodlaşdırması yalnız video dekompressiyası üçün nəzərdə tutulmuş fiziki sxemlər üzərində aparılır. Apple VideoToolbox documentation (2026) məlumatlarına görə, A seriyalı çiplərdə avadanlıq dekodlaşdırması 4K H.264 üçün 60 FPS-də enerji səmərəliliyi 0,3 Vt-a çatır.
Əsas məqamlar
Hardware decoding — media məlumatlarının dekompressiyası universal CPU-da deyil, sistem-üstündə-çipdə (SoC) inteqrasiya edilmiş ixtisaslaşmış inteqral sxemlərdə aparılır. Bu cür bloklar video dekoderlər və ya VPU (Video Processing Unit) adlanır və müəyyən sıxlaşdırma alqoritmləri üçün optimallaşdırılmış ASIC sürətləndiriciləridir.
Müasir mobil SoC-lər hər məşhur kodek üçün ayrıca avadanlıq blokları ehtiva edir. Məsələn, Apple A17 Pro çipi H.264, H.265, VP9, AV1 və ProRes üçün dekoderlərə malikdir. Hər blok girişdə sıxılmış bit axınını qəbul edə və CPU-nun iştirakı olmadan çıxışda YUV və ya BGRA formatında hazır dekodlanmış kadrları verə bilən tam emal konveyerini təşkil edir.
Avadanlıq dekodlaşdırması 2012–2013-cü illərdə mobil sənayedə standarta çevrildi, o zaman Qualcomm Snapdragon 800 və Apple A7 ilk dəfə H.264 dekodlaşdırması üçün ayrılmış blokları ehtiva etdi. O vaxtdan bəri texnologiya bir formatın dəstəyindən eyni anda bir neçə axını dekodlaşdıra bilən universal çoxformatlı bloklara qədər inkişaf etdi — məsələn, ayrı video axını ilə PiP işi üçün.
Avadanlıq dekodlaşdırması prosesi proqramdan köklü şəkildə fərqlənir. CPU təlimatlarının ardıcıl icrası əvəzinə, avadanlıq bloku dekompressiyanın hər mərhələsi üçün fiziki sxemləri həyata keçirir: entropiya dekodlaşdırması, tərs kvantlaşdırma, tərs DCT və hərəkət kompensasiyası.
Tipik avadanlıq dekoderi bir neçə konveyer mərhələsindən ibarətdir. Birinci mərhələ — CABAC və ya CAVLC üçün sonlu avtomat (FSM) şəklində reallaşdırılmış entropiya dekoderi. Proqram təminatında hər bit şərti keçidlərlə işlənirsə, avadanlıq CABAC-ı paralel kontekst proqnozlaşdırma sxemlərindən istifadə edir ki, bu da bir takt əvəzinə 2–3 bit emal etməyə imkan verir.
İkinci mərhələ — tərs DCT bloku. Proqram DCT-si CPU-da vurma-toplama dövrləri tələb edir. Avadanlıq tətbiqi bir taktda 8×8 blokun bütün 64 əmsalını hesablayan matris vurma qurğusundan istifadə edir. Avadanlıq tərs DCT 400–600 MHz tezliyində işləyir və saniyədə 4 milyon makroblok emal edir ki, bu da real vaxtda 8K videonun dekodlaşdırılması üçün kifayətdir.
Üçüncü mərhələ — hərəkət kompensasiyası (MC) modulu. Tərs DCT ilə paralel olaraq avadanlıq bloku bit axınından hərəkət vektorlarını alır və dekodlanmış kadrlar buferindən istinad sahələrini çıxarır. DPB buferi (Decoded Picture Buffer) 16 istinad kadrına qədər saxlayır, onlara giriş aşağı gecikməli ixtisaslaşmış keş yaddaş vasitəsilə həyata keçirilir. Müasir dekoderlər adaptiv hamarlaşdırma və subpiksel interpolyasiyası ilə proqnozlaşdırmadan istifadə edir ki, bu da H.265 və AV1 üçün vacibdir.
Avadanlıq dekoderinin idarə edilməsi DMA kontrolleri vasitəsilə həyata keçirilir. Tətbiq dekoderə ümumi yaddaşda sıxılmış məlumatlara göstərici ötürür, dekoder isə birbaşa yaddaş girişi ilə bit axınını müstəqil oxuyur. Kadrın dekodlaşdırılması başa çatdıqdan sonra kəsmə sürücüyə xəbər verir və hazır kadr çıxış buferləri hovuzunda əlçatan olur. Bu mexanizm məlumat emalı mərhələsində CPU-nun yüklənməsini tamamilə aradan qaldırır — prosessor yalnız dekodlaşdırmanı başladır və hazır nəticəni alır.
Hər iki mobil platforma avadanlıq dekodlaşdırması üçün yerli API təqdim edir, lakin buferlərin idarə edilməsi və dekoderin həyat dövrünə fərqli yanaşmalarla. iOS-da VideoToolbox ekrana çıxış üçün Metal ilə sıx inteqrasiya olunub, Android-də MediaCodec isə birbaşa render üçün Surface istifadə edir.
| Parametr | VideoToolbox (iOS) | MediaCodec (Android) |
|---|---|---|
| Çıxış formatı | CVPixelBuffer (Metal/OpenGL) | Surface və ya ByteBuffer |
| Yaddaş idarəçiliyi | Pool vasitəsilə avtomatik | Dequeue vasitəsilə əl ilə |
| Thread təhlükəsizliyi | Bəli, asinxron callback | Bəli, sinxron API |
| HDR dəstəyi | Bəli (PQ, HLG) | Bəli (HDR10, HDR10+) |
| Çoxdekodlaşdırma | 4 seansadək (A17) | SoC-dən asılıdır |
VideoToolbox — iOS və macOS-da avadanlıq dekodlaşdırması üçün freymvork. Asinxron dekodlaşdırma modelindən istifadə edir: VTDecompressionSessionDecodeFrame çağırışı dərhal qayıdır, hazır kadrlar isə ayrıca növbədə callback vasitəsilə gəlir. VideoToolbox piksel buferləri hovuzunu (CVPixelBufferPool) avtomatik idarə edir və yeni kadrlar üçün boşaldılmış buferləri təkrar istifadə edə bilər. HDR video üçün VideoToolbox ITU-R BT.2020 rəng fəzalarını və PQ/HLG EOTF-ni dəstəkləyir.
MediaCodec giriş və çıxış buferləri növbələri ilə sinxron modeldən istifadə edir. Tətbiq dövri olaraq sıxılmış məlumatları göndərmək üçün dequeueInputBuffer və dekodlanmış nəticəni almaq üçün dequeueOutputBuffer çağırır. Bu yanaşma tərtibatçıya dekodlaşdırma sürəti üzərində tam nəzarət verir ki, bu da audio və video sinxronizasiyası üçün vacibdir. Ekrana çıxış üçün MediaCodec Surface qəbul edir ki, bu da CPU vasitəsilə kopyalamadan birbaşa GPU-da dekodlaşdırmağa imkan verir.
Avadanlıq dekodlaşdırması proqramla müqayisədə üç əsas üstünlük verir: enerji səmərəliliyi, performans və sabitlik. Onların hər biri məhdud batareya resursları və termal məhdudiyyətləri olan mobil cihazlar üçün vacibdir.
Avadanlıq dekodlaşdırmasının əsas üstünlüyü — radikal dərəcədə aşağı enerji sərfiyyatıdır. Tipik avadanlıq H.264/H.265 dekoderi real vaxtda 1080p video dekodlaşdırarkən 0,2–0,5 Vt enerji sərf edir. Müqayisə üçün, CPU-da eyni axının proqram dekodlaşdırması prosessor arxitekturasından asılı olaraq 1,5–4 Vt enerji sərf edir. 5–10 dəfə fərq birbaşa batareya iş müddətinə təsir edir: video izləyərkən avadanlıq dekodlaşdırması 10–15 saat film izləməyə imkan verir, CPU-da proqram dekodlaşdırması isə cəmi 2–4 saat.
Enerji səmərəliliyi dar ixtisaslaşma hesabına əldə edilir. Geniş spektrli təlimatları yerinə yetirən və mürəkkəb idarəetmə məntiqinə malik CPU-dan fərqli olaraq, avadanlıq dekoderi yalnız müəyyən alqoritm üçün lazım olan sxemləri ehtiva edir. Takt tezliyi belə blokların 200–600 MHz təşkil edir, CPU isə 2–3 GHz, bu da dinamik enerji sərfiyyatını gərginliyin kvadratına mütənasib olaraq azaldır.
Avadanlıq dekodlaşdırması hətta yüksək təsvir ölçüləri üçün zəmanətli kadr tezliyini təmin edir. Konveyer arxitekturası sayəsində avadanlıq bloku eyni anda dekompressiyanın bir neçə mərhələsini emal edə bilər: bir modul növbəti makroblok üçün entropiya dekodlaşdırmasını yerinə yetirərkən, digəri artıq cariyə tərs DCT tətbiq edir. Belə paralellik CPU-da əldə edilməzdir, burada hər mərhələ ardıcıl əməliyyatdır.
Avadanlıq dekoderinin istilik yayılması əhəmiyyətli dərəcədə aşağıdır: tipik blok 4K videonun proqram dekodlaşdırmasında CPU-nun 2–6 Vt-nə qarşı 0,3–0,8 Vt istilik yayır. Bu o deməkdir ki, cihaz hətta uzunmüddətli baxış zamanı qızışmır, trottling baş vermir və istifadəçi düşmələr olmadan sabit 60 FPS alır. Korpusun temperaturu avadanlıq dekodlaşdırmasında adətən proqramdan 5–10 dərəcə aşağıdır ki, bu da aktiv soyutması olmayan planşetlər üçün xüsusilə vacibdir.
iOS-da VideoToolbox vasitəsilə callback-lərlə avadanlıq dekodlaşdırmasının və Android-də MediaCodec vasitəsilə tam pipeline-nın praktik tətbiqini nəzərdən keçirək.
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 ilə VideoToolbox dekodlaşdırma seansı yaradır. VTDecompressionSessionCreate ötürülmüş CMVideoFormatDescription əsasında mövcud avadanlıq dekoderini avtomatik müəyyən edir. kVTDecodeFrame_EnableAsynchronousDecompression bayrağı asinxron rejimi aktivləşdirir — tətbiq dekodlaşdırma zamanı bloklanmır, kadrları callback vasitəsilə alır. H.264 üçün SPS/PPS NAL vahidlərindən CMVideoFormatDescriptionCreateFromH264ParameterSets vasitəsilə format description əvvəlcədən yaradılmalıdır.
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 kodu məlumatları CPU vasitəsilə kopyalamadan birbaşa ekrana çıxışı təmin edən Surface ilə MediaCodec yaradır. mimeType parametri MediaFormat sabitlərindən istifadə edir: H.264 üçün video/avc, H.265 üçün video/hevc, AV1 üçün video/av01. dequeueInputBuffer metodu timeout ilə boş giriş buferini gözləyir; bufer mövcud deyilsə — cari kadr buraxılır ki, bu da qeyri-bərabər bitrate zamanı növbənin daşmasının qarşısını alır.
Avadanlıq dekodlaşdırması əksər istehsal ssenariləri üçün optimal seçimdir, lakin universal həll deyil. Tətbiq sərhədlərini başa düşmək kodekin avadanlıq dəstəyinin olmamasının istifadəçi təcrübəsini pozduğu vəziyyətlərdən qaçmağa kömək edir.
Avadanlıq dekodlaşdırması üç halda məcburidir: uzunmüddətli video izləmə (30 dəqiqədən çox), 4K məzmununun dekodlaşdırılması və maksimum batareya iş müddətinə yönəlmiş istənilən tətbiq. Striminq xidmətləri (Netflix, YouTube, Twitch) yalnız avadanlıq dekodlaşdırmasından istifadə edir, çünki proqram təminatı yüksək bitrate və böyük təsvir ölçüsündə sabit izləməni təmin edə bilməz. Bu xidmətlər üçün yalnız dekoderdən ekrana qədər qorunan pipeline təmin edən avadanlıq bloku vasitəsilə mümkün olan DRM (FairPlay, Widevine) dəstəyi vacibdir.
İnteqrasiya edilmiş video olan oyunlar üçün (kəsmə səhnələri, reklam, oyundaxili videolar) da avadanlıq dekodlaşdırması tövsiyə olunur. Unity və Unreal Engine kimi müasir oyun mühərrikləri VideoToolbox və MediaCodec üçün daxili dəstəyə malikdir. Avadanlıq dekodlaşdırması oyunlarda CPU-nu fizika simulyasiyası, rəqib AI-si və giriş emalı üçün azad edir ki, bu da ümumi performansı artırır.
Avadanlıq dekodlaşdırmasının əsas məhdudiyyəti — formatın avadanlıq dəstəyindən asılılıqdır. SoC-də AV1 üçün dekoder yoxdursa (məsələn, Snapdragon 8 Gen 1 cihazları), tətbiq FFmpeg və dav1d vasitəsilə proqram fallback-i təmin etməlidir. Eyni vəziyyət köhnə cihazlarda H.265 və yalnız Apple A13+ çiplərində dekodlaşdırma üçün dəstəklənən ProRes ilə də mövcuddur. İzləməyə başlamazdan əvvəl tələb olunan formatın avadanlıq dekoderinin mövcudluğunu yoxlamaq və dekodlaşdırma strategiyasını dinamik seçmək tövsiyə olunur.
İkinci məhdudiyyət — eyni vaxtda dekodlaşdırma seanslarının sayı. Əksər SoC-lər 1–2 paralel avadanlıq dekoderini dəstəkləyir. Üçüncü seansı açmağa cəhd etdikdə API xəta qaytarır və tətbiq proqram dekodlaşdırmasına keçməlidir. Seansların sayı SoC istehsalçısından asılıdır: Apple çipləri A17 Pro-da 4 seans H.264 dekodlaşdırmasına, Snapdragon 8 Gen 2 isə H.265 üçün 2 və VP9 üçün ümumi 2 seansa icazə verir.
Tez-tez verilən suallar
iOS-da VTDecompressionSessionCopySupportedPropertyDictionary istifadə edin və kVTDecompressionPropertyKey_UsingHardwareAcceleratedVideoDecoder-i yoxlayın. Android-də MediaCodec.getCodecInfo().isHardwareAccelerated() çağırın. Əgər false qaytarırsa — proqram dekoderi istifadə olunur, adətən OMX.google.*.
Bəli, avadanlıq dekodlaşdırması striminq xidmətlərində DRM məzmunu üçün məcburidir. iOS-da FairPlay və Android-də Widevine L1 dekodlaşdırılmış kadrların tətbiq tərəfindən oxunmasının qarşısını alan dekoderdən ekrana qədər qorunan pipeline tələb edir. Belə pipeline yalnız secure session dəstəyi ilə avadanlıq dekodlaşdırmasında mümkündür.
VDADecoder (Video Decode Acceleration) — iOS 6–8-dən köhnəlmiş, VideoToolbox ilə əvəz edilmiş freymvork. VideoToolbox H.265, HDR və çoxthread dəstəyi ilə daha müasir və çevik API təmin edir. VDADecoder yeni layihələr üçün tövsiyə edilmir — VideoToolbox-dan VTDecompressionSession istifadə edin.
Əksər hallarda yox. iOS-da avadanlıq dekoderi enerji istehlakı məhdudiyyətləri səbəbindən aktiv tətbiq tələb edir. Android-də MediaCodec vasitəsilə xidmətdə fon dekodlaşdırması mümkündür, lakin performans aşağı düşə bilər. İstisna — sistemin üzən pəncərədə avadanlıq dekodlaşdırmasına icazə verdiyi PiP rejimidir.
Mütləq lider — H.264, müasir mobil cihazların 100%-də avadanlıqla dekodlaşdırılır. H.265 cihazların ~80%-də dəstəklənir (iOS 8+, müvafiq SoC ilə Android 5+). AV1 ən məhduddur: avadanlıq dəstəyi yalnız Snapdragon 8 Gen 2, Exynos 2200 və Apple A17 Pro ilə 2023+ cihazlarında.
Nəticə
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.
Həm də oxuyun