AVFoundation — iOS, macOS, tvOS və watchOS-da audio, video və şəkillərlə tam iş dövrünü təmin edən Apple multimedia freymvorkudur. O, kamera və mikrofondan tutma, media fayllarını oxutma, audio trekləri redaktə etmə, real vaxtda səs emalı və şəbəkə üzərindən striminqi əhatə edir. Apple AVFoundation Documentation (2026) məlumatına görə, freymvork media məzmunu ilə işləyən App Store tətbiqlərinin 90%-də istifadə olunur.
Əsas məqamlar
AVFoundation — Apple-ın audio və video oxutmaq üçün köhnəlmiş UIWebView-i əvəz etmək məqsədilə hələ iOS 4-də (2010) təqdim edilmiş əsas multimedia freymvorkudur. O vaxtdan bəri AVFoundation sadə MP3 faylını oxutmaqdan tutmuş çoxkanallı mikrofondan peşəkar video tutma və real vaxt effektləri vasitəsilə səs transformasiyasına qədər istənilən media növü ilə iş üçün tam hüquqlu alətlər dəstinə çevrilmişdir.
AVFoundation arxitekturası bir neçə əsas abstraksiya ətrafında qurulmuşdur: AVAsset (media məlumatları), AVPlayer (oxutma), AVCaptureSession (tutma) və AVAudioEngine (emal). Hər bir komponent asinxron işləyir ki, bu da böyük faylların yüklənməsi və ya emalı zamanı UI-nin hamarlığını qorumaq üçün kritik əhəmiyyət daşıyır. Apple (WWDC 2025) məlumatına görə, AVFoundation M seriyalı çipli cihazlarda performans itkisi olmadan 8K videonu emal edir.
AVFoundation 4K ProRes, HDR və ağır çəkilişdə 240 FPS dəstəyi ilə kameradan video tutma, daxili və xarici mikrofonlardan audio yazma və miksləmə, HLS, MPEG-4, QuickTime, MP3, AAC və FLAC dəstəyi ilə media oxutma, AVAssetExportSession vasitəsilə faylların ixrac və konvertasiyası, AVAudioEngine ilə reverb, ekvalayzer və pitch-shifting effektləri ilə real vaxtda səs emalı, həmçinin AirPlay və şəbəkə protokolları ilə striminqi təmin edir.
AVFoundation bir neçə moduldan ibarətdir, hər biri media ilə işin müəyyən sahəsinə cavabdehdir. Komponentin seçimi tapşırıqdan asılıdır: tutma, oxutma, ixrac və ya real vaxt emalı.
| Komponent | Təyinat | Əsas sinif |
|---|---|---|
| Tutma | Kamera və mikrofonla iş | AVCaptureSession |
| Oxutma | Audio və video pleyer | AVPlayer / AVAudioPlayer |
| Redaktə | Kompozisiya və montaj | AVMutableComposition |
| İxrac | Digər formatlara konvertasiya | AVAssetExportSession |
| Audio mühərrik | Real vaxtda səs emalı | AVAudioEngine |
| Metaməlumatlar | ID3, EXIF və XMP oxuma | AVMetadataItem |
AVCaptureSession — video və audio tutmaq üçün mərkəzi obyektdir. Fiziki cihazlardan (kamera, mikrofon) daxil olan məlumat axınlarını idarə edir, onların konfiqurasiyasını (rezolyusiya, FPS, format) tənzimləyir və çıxışa yönləndirir: önizləmə (AVCaptureVideoPreviewLayer), fayla yazma (AVCaptureMovieFileOutput) və ya kadr-kadr emal (AVCaptureVideoDataOutput).
AVPlayer — həm lokal, həm də şəbəkədən media məzmununu oxutmaq qabiliyyətinə malik universal AVFoundation pleyeridir. AVPlayer HLS striminqi, MPEG-4, QuickTime Movie və əksər audio formatlarını dəstəkləyir. Oxutmaya nəzarət AVPlayerItem vasitəsilə asinxron həyata keçirilir. AVPlayerViewController play/pause, sürüşdürmə, AirPlay və PiP kimi idarəetmə elementləri ilə hazır UI təmin edir.
Video və audio tutma AVFoundation-un ən çox tələb olunan imkanlarından biridir. Tutma seansının konfiqurasiyası bir neçə addımı əhatə edir: AVCaptureSession yaratma, girişlər əlavə etmə (kamera, mikrofon), çıxışları tənzimləmə və seansı işə salma.
iPhone-un arxa kamerasından video tutmaq və eyni vaxtda mikrofondan səs yazmaq üçün AVCaptureSession-un addım-addım konfiqurasiyasını nəzərdən keçirək. Proses Swift-də dörd addımdan ibarətdir.
import AVFoundation
// 1. Sessiyanın yaradılması və konfiqurasiyası
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. Kamera girişinin əlavə edilməsi
guard let camera = AVCaptureDevice.default(
for: .video
) else { return }
let cameraInput = try? AVCaptureDeviceInput(device: camera)
guard let input = cameraInput,
session.canAddInput(input)
else { return }
session.addInput(input)
// 3. Yazma çıxışının əlavə edilməsi
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. Sessiyanın işə salınması
session.startRunning()
Swift kodu Full HD preset ilə AVCaptureSession yaradır, arxa kameranı video mənbəyi kimi qoşur və fayla yazmaq üçün çıxış əlavə edir. session.startRunning() işə salındıqdan sonra kamera kadrları önizləmə və çıxış faylına ötürməyə başlayır. Yazmanın dayandırılması output.stopRecording() vasitəsilə həyata keçirilir, qalereyaya yadda saxlama imkanı ilə.
Yalnız audio (video olmadan) tutmaq üçün AVCaptureSession-a yalnız AVCaptureDevice.default(.audio) vasitəsilə mikrofon əlavə edilir. Çıxış kimi AVAudioFileOutput və ya real vaxtda səs emalı üçün AVCaptureAudioDataOutput istifadə olunur. AVFoundation çoxkanallı tutmanı dəstəkləyir: iPad Pro-da 8 audio kanalına qədər və iPhone-da 2 kanal, bu da Lightning, USB-C və ya Bluetooth vasitəsilə xarici mikrofonlardan stereo səs yazmağa imkan verir. Giriş siqnal mənbəyinin seçimi AVAudioSession.sharedInstance().setPreferredInput vasitəsilə həyata keçirilir ki, bu da xarici qulaqlıqlar və Bluetooth mikrofonları ilə işləyən tətbiqlər üçün kritikdir.
AVFoundation media oxutmağın iki əsas yolunu təmin edir: video üçün AVPlayer və audio üçün AVAudioPlayer. AVPlayer vasitəsilə uzaq HLS axınının oxudulması nümunəsini nəzərdən keçirək.
Kod AVPlayer yaradır, URL üzərindən HLS axınını yükləyir və aşağı səs səviyyəsində oxutmanı başladır. AVPlayerItem yükləmə və buferləşmə vəziyyətini idarə edir, KVO vasitəsilə statusun müşahidəsi isə səhvləri emal etməyə imkan verir.
import AVFoundation
import AVKit
// 1. HLS axını ilə AVPlayer yaradılması
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. Oxutma
player.play()
// 3. Pleyerin göstərilməsi
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. Statusun monitorinqi
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
Kod HLS URL ilə AVPlayer yaradır, səsi 70%-ə tənzimləyir və oxutmanı başladır. AVPlayerViewController idarəetmə elementləri, AirPlay və şəkil içərisində şəkil rejimi ilə daxili UI təmin edir. Pleyerin statusu KVO vasitəsilə izlənilir ki, HLS axını müvəqqəti əlçatmaz olduqda müvafiq tədbirlər görülsün.
Video interfeysi olmadan audio oxutmaq üçün AVAudioPlayer istifadə olunur — AVPlayerItem tələb etməyən yüngül pleyer. AVAudioPlayer MP3, AAC, ALAC, FLAC, WAV və AIFF audio formatlarını dəstəkləyir, play(), pause() və stop() metodlarını, həmçinin oxutmanın bitməsini və dekodlaşdırma səhvlərini izləmək üçün AVAudioPlayerDelegate-i təmin edir. AVAudioPlayer iOS və macOS-da fon musiqisi, podkastlar və oyunlarda səs effektləri üçün idealdır.
AVFoundation ilə işin daha iki xarakterik ssenarisini nəzərdən keçirək: AVAudioEngine vasitəsilə audio emalı və videonun başqa formata ixracı.
AVAudioEngine emal qrafında qovşaqları (nodes) birləşdirərək real vaxtda audio emal etməyə imkan verir: giriş qovşağı (mikrofon) → effektlər → çıxış qovşağı (dinamik). Aşağıdakı nümunədə səsə reverb əlavə olunur.
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// Reverb konfiqurasiyası
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// Qoşulma: mikrofon -> reverb -> dinamik
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
AVAudioEngine üç qovşaqdan ibarət qraf yaradır: giriş (mikrofon), effekt (böyük zal preseti ilə reverb) və çıxış (dinamik). engine.start() işə salındıqdan sonra mikrofondan gələn səs real vaxtda effektlə emal olunur və cihazın qulaqlıq və ya dinamikinə ötürülür. Emal gecikməsi bütün müasir Apple cihazlarında 10 ms-dən azdır.
AVAudioEngine-in əlavə imkanı — AVAudioUnitEQ və AVAudioUnitMixer vasitəsilə səs analizidir. Tərtibatçı istənilən audio axınına ekvalayzer, kompressor və limiter əlavə edə bilər. Musiqi tətbiqləri üçün AVFoundation MIDI fayllarını oxutmaq üçün AVAudioSequencer və nitq sintezi üçün AVSpeechSynthesizer təmin edir. Bütün komponentlər vahid audio qrafında işləyir, bu da Apple cihazlarında tutma və emal arasında 5 ms-dən az gecikmə verir.
AVFoundation ilə işləyərkən sistem icazələrini nəzərə almaq vacibdir: kameraya giriş üçün Info.plist-də NSCameraUsageDescription, mikrofon üçün NSMicrophoneUsageDescription tələb olunur. AVFoundation cihaza ilk giriş cəhdində avtomatik olaraq sistem icazə dialoqunu göstərir. İstifadəçinin imtinası AVCaptureDevice.authorizationStatus() vasitəsilə emal olunur ki, bu da kameranın əlçatmazlığı barədə düzgün mesaj göstərməyə və parametrlərə keçməyi təklif etməyə imkan verir.
AVFoundation layihənin Capabilities bölməsində Audio Background Mode vasitəsilə fonda audio oxutmanı dəstəkləyir. Aktivasiya üçün UIBackgroundModes Info.plist-də audio qeydini əlavə etmək və AVAudioSession-u .playback kateqoriyası ilə konfiqurasiya etmək kifayətdir. Fonda video standart olaraq oxudulmur, lakin iPad-də kiçildilmiş tətbiqdə videonun davam etdirilməsi üçün AVPlayer-dan pictureInPicture rejimi ilə istifadə etmək olar. PiP rejiminin işarəsi AVPictureInPictureController və protokol deleqatı vasitəsilə konfiqurasiya olunur.
Tez-tez verilən suallar
iOS 4+ əsas oxutma və tutma üçün. iOS 8+ AVAudioEngine üçün. iOS 17+ HDR rejimində AVAssetWriter üçün. Freymvorkun cari versiyası bütün iPhone, iPad və Mac cihazlarında dəstəklənir.
Bəli, AVPlayer HLS (HTTP Live Streaming) — Apple-ın əsas striminq protokolunu dəstəkləyir. Media serverə göndərmək üçün URLSession üzərində xüsusi protokolla AVAssetWriter istifadə edin.
AVFoundation — media ilə iş üçün aşağı səviyyəli freymvorkdur. AVKit — AVFoundation üzərində hazır UI komponentləri təmin edən əlavədir: AVPlayerViewController, AVPictureInPictureController və AVPipView.
Bəli, iOS 11-dən etibarən AVFoundation oxutma üçün FLAC (Free Lossless Audio Codec) dəstəkləyir. ALAC (Apple Lossless) iOS 4-dən dəstəklənir. Hər iki kodek AVAudioPlayer və AVPlayer vasitəsilə işləyir.
ReplayKit-dən RPScreenRecorder vasitəsilə, o daxildə AVFoundation istifadə edir. iOS 9-dan etibarən ekran yazma RPScreenRecorder.shared().startRecording() ilə əlavə mikrofon seçimi ilə mümkündür.
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