AVFoundation — iOS, macOS, tvOS va watchOS'da audio, video va tasvirlar bilan to'liq ishlash siklini ta'minlaydigan Apple multimedia freymvorkidir. U kamera va mikrofondan olish, media fayllarni ijro etish, audio treklarni tahrirlash, real vaqtda tovushni qayta ishlash va tarmoq orqali striminqni o'z ichiga oladi. Apple AVFoundation Documentation (2026) ma'lumotiga ko'ra, freymvork media kontenti bilan ishlaydigan App Store ilovalarining 90% ida qo'llaniladi.
Asosiy ma'lumotlar
AVFoundation — bu Apple tomonidan iOS 4 (2010) da audio va videoni ijro etish uchun eskirgan UIWebView o'rniga taqdim etilgan asosiy multimedia freymvorkidir. O'shandan beri AVFoundation oddiy MP3 faylni ijro etishdan tortib, ko'p kanalli mikrofon bilan professional video olish va real vaqt effektlari orqali tovushni o'zgartirishgacha bo'lgan har qanday media turlari bilan ishlash uchun to'liq vositalar to'plamiga aylandi.
AVFoundation arxitekturasi bir nechta asosiy abstraksiyalar atrofida qurilgan: AVAsset (media ma'lumotlar), AVPlayer (ijro), AVCaptureSession (olish) va AVAudioEngine (qayta ishlash). Har bir komponent asinxron ishlaydi, bu katta fayllarni yuklash yoki qayta ishlash vaqtida UI silliqligini saqlash uchun muhimdir. Apple (WWDC 2025) ma'lumotiga ko'ra, AVFoundation M seriyali chipli qurilmalarda 8K videoni samaradorlikni yo'qotmasdan qayta ishlaydi.
AVFoundation 4K ProRes, HDR va sekin harakatda 240 FPS gacha qo'llab-quvvatlash bilan kameradan video olish, ichki va tashqi mikrofonlardan audio yozish va aralashtirish, HLS, MPEG-4, QuickTime, MP3, AAC va FLAC qo'llab-quvvatlashi bilan media ijro etish, AVAssetExportSession orqali fayllarni eksport va konvertatsiya qilish, AVAudioEngine bilan reverberatsiya, ekvalayzer va pitch-shifting effektlari orqali real vaqtda tovushni qayta ishlash, shuningdek AirPlay va tarmoq protokollari orqali striminqni ta'minlaydi.
AVFoundation bir nechta modullardan iborat bo'lib, ularning har biri media bilan ishlashning ma'lum bir sohasiga javob beradi. Komponentni tanlash vazifaga bog'liq: olish, ijro etish, eksport yoki real vaqtda qayta ishlash.
| Komponent | Vazifasi | Asosiy sinf |
|---|---|---|
| Olish | Kamera va mikrofon bilan ishlash | AVCaptureSession |
| Ijro etish | Audio va video pleyer | AVPlayer / AVAudioPlayer |
| Tahrirlash | Kompozitsiya va montaj | AVMutableComposition |
| Eksport | Boshqa formatlarga konvertatsiya | AVAssetExportSession |
| Audio dvigatel | Real vaqtda tovushni qayta ishlash | AVAudioEngine |
| Metama'lumotlar | ID3, EXIF va XMP o'qish | AVMetadataItem |
AVCaptureSession — video va audio olish uchun markaziy ob'yekt. U fizik qurilmalardan (kamera, mikrofon) kiruvchi ma'lumot oqimlarini boshqaradi, ularning konfiguratsiyasini (rezolyutsiya, FPS, format) sozlaydi va chiqishga yo'naltiradi: oldindan ko'rish (AVCaptureVideoPreviewLayer), faylga yozish (AVCaptureMovieFileOutput) yoki kadrma-kadr qayta ishlash (AVCaptureVideoDataOutput).
AVPlayer — ham mahalliy, ham tarmoqdan media kontentini ijro eta oladigan universal AVFoundation pleyeri. AVPlayer HLS striminqi, MPEG-4, QuickTime Movie va aksariyat audio formatlarini qo'llab-quvvatlaydi. Ijro etishni boshqarish AVPlayerItem orqali asinxron amalga oshiriladi. AVPlayerViewController play/pause, aylantirish, AirPlay va PiP kabi boshqaruv elementlari bilan tayyor UI ni ta'minlaydi.
Video va audio olish AVFoundation ning eng ko'p talab qilinadigan imkoniyatlaridan biridir. Olish sessiyasini sozlash bir necha qadamlarni o'z ichiga oladi: AVCaptureSession yaratish, kirishlarni (kamera, mikrofon) qo'shish, chiqishlarni sozlash va sessiyani ishga tushirish.
iPhone'ning orqa kamerasidan video olish va bir vaqtning o'zida mikrofondan tovush yozish uchun AVCaptureSession ni bosqichma-bosqich sozlashni ko'rib chiqaylik. Jarayon Swift'da to'rt qadamdan iborat.
import AVFoundation
// 1. Sessiyani yaratish va sozlash
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. Kamera kirishini qo'shish
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. Yozish chiqishini qo'shish
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. Sessiyani ishga tushirish
session.startRunning()
Swift kodi Full HD preset bilan AVCaptureSession yaratadi, orqa kamerani video manbai sifatida ulaydi va faylga yozish uchun chiqish qo'shadi. session.startRunning() ishga tushirilgandan so'ng, kamera kadrlarni oldindan ko'rish va chiqish fayliga yuborishni boshlaydi. Yozishni to'xtatish output.stopRecording() orqali galereyaga saqlash imkoniyati bilan amalga oshiriladi.
Faqat audio (video holda) olish uchun AVCaptureSession'ga faqat AVCaptureDevice.default(.audio) orqali mikrofon qo'shiladi. Chiqish sifatida AVAudioFileOutput yoki real vaqtda tovushni qayta ishlash uchun AVCaptureAudioDataOutput ishlatiladi. AVFoundation ko'p kanalli olishni qo'llab-quvvatlaydi: iPad Pro'da 8 tagacha audio kanal va iPhone'da 2 kanalgacha, bu Lightning, USB-C yoki Bluetooth orqali tashqi mikrofonlardan stereo tovush yozish imkonini beradi. Kirish signal manbai tanlovi AVAudioSession.sharedInstance().setPreferredInput orqali amalga oshiriladi, bu tashqi naushniklar va Bluetooth mikrofonlari bilan ishlaydigan ilovalar uchun muhimdir.
AVFoundation media ijro etishning ikkita asosiy usulini ta'minlaydi: video uchun AVPlayer va audio uchun AVAudioPlayer. AVPlayer orqali uzoqdagi HLS oqimini ijro etish misolini ko'rib chiqaylik.
Kod AVPlayer yaratadi, URL orqali HLS oqimini yuklaydi va past ovoz balandligida ijro etishni boshlaydi. AVPlayerItem yuklash va buferlash holatini boshqaradi, KVO orqali statusni kuzatish esa xatolarni qayta ishlash imkonini beradi.
import AVFoundation
import AVKit
// 1. HLS oqimi bilan AVPlayer yaratish
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. Ijro etish
player.play()
// 3. Pleyerni ko'rsatish
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. Holatni kuzatish
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
Kod HLS URL bilan AVPlayer yaratadi, tovushni 70% ga sozlaydi va ijroni boshlaydi. AVPlayerViewController boshqaruv elementlari, AirPlay va rasm ichida rasm rejimi bilan o'rnatilgan UI ni ta'minlaydi. Pleyer holati KVO orqali kuzatiladi, HLS oqimi vaqtincha mavjud bo'lmagan holatlarni boshqarish uchun.
Video interfeysisiz audio ijro etish uchun AVAudioPlayer ishlatiladi — AVPlayerItem talab qilmaydigan engil pleyer. AVAudioPlayer MP3, AAC, ALAC, FLAC, WAV va AIFF audio formatlarini qo'llab-quvvatlaydi, play(), pause() va stop() metodlarini, shuningdek ijro etish tugashini va dekodlash xatolarini kuzatish uchun AVAudioPlayerDelegate ni ta'minlaydi. AVAudioPlayer iOS va macOS'da fon musiqasi, podkastlar va o'yinlardagi tovush effektlari uchun idealdir.
AVFoundation bilan ishlashning yana ikkita xarakterli stsenariysini ko'rib chiqaylik: AVAudioEngine orqali audio qayta ishlash va videoni boshqa formatga eksport qilish.
AVAudioEngine qayta ishlash grafigida tugunlarni (nodes) birlashtirib, real vaqtda audio qayta ishlash imkonini beradi: kirish tuguni (mikrofon) → effektlar → chiqish tuguni (dinamik). Quyidagi misolda tovushga reverberatsiya qo'shiladi.
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// Reverberatsiyani sozlash
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// Ulanish: mikrofon -> reverberatsiya -> dinamik
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
AVAudioEngine uch tugundan iborat grafik yaratadi: kirish (mikrofon), effekt (katta zal preseti bilan reverberatsiya) va chiqish (dinamik). engine.start() ishga tushirilgandan so'ng, mikrofondan kelayotgan tovush real vaqtda effekt bilan qayta ishlanadi va qurilmaning naushniklari yoki dinamigiga uzatiladi. Qayta ishlash kechikishi barcha zamonaviy Apple qurilmalarida 10 ms dan kam.
AVAudioEngine ning qo'shimcha imkoniyati — AVAudioUnitEQ va AVAudioUnitMixer orqali tovush tahlili. Dasturchi istalgan audio oqimiga ekvalayzer, kompressor va limiterni qo'shishi mumkin. Musiqa ilovalari uchun AVFoundation MIDI fayllarini ijro etish uchun AVAudioSequencer va nutq sintezi uchun AVSpeechSynthesizer ni ta'minlaydi. Barcha komponentlar yagona audio grafigida ishlaydi, bu Apple qurilmalarida olish va qayta ishlash o'rtasida 5 ms dan kam kechikish beradi.
AVFoundation bilan ishlashda tizim ruxsatnomalarini hisobga olish muhim: kameraga kirish uchun Info.plist'da NSCameraUsageDescription, mikrofon uchun NSMicrophoneUsageDescription talab qilinadi. AVFoundation qurilmaga birinchi kirish urinishida avtomatik ravishda tizim ruxsatnoma dialogini ko'rsatadi. Foydalanuvchining rad etishi AVCaptureDevice.authorizationStatus() orqali qayta ishlanadi, bu kameraning mavjud emasligi haqida to'g'ri xabar ko'rsatish va sozlamalarga o'tishni taklif qilish imkonini beradi.
AVFoundation loyihaning Capabilities qismida Audio Background Mode orqali fonda audio ijro etishni qo'llab-quvvatlaydi. Faollashtirish uchun UIBackgroundModes Info.plist'ga audio yozuvini qo'shish va AVAudioSession'ni .playback kategoriyasi bilan sozlash kifoya. Fonda video standart sifatida ijro etilmaydi, lekin iPad'da kichraytirilgan ilovada videoni davom ettirish uchun AVPlayer'dan pictureInPicture rejimi bilan foydalanish mumkin. PiP rejimi belgisi AVPictureInPictureController va protokol delegati orqali sozlanadi.
Tez-tez so'raladigan savollar
iOS 4+ asosiy ijro va olish uchun. iOS 8+ AVAudioEngine uchun. iOS 17+ HDR rejimida AVAssetWriter uchun. Freymvorkning joriy versiyasi barcha iPhone, iPad va Mac qurilmalarida qo'llab-quvvatlanadi.
Ha, AVPlayer HLS (HTTP Live Streaming) — Apple'ning asosiy striminq protokolini qo'llab-quvvatlaydi. Media serverga yuborish uchun URLSession ustida maxsus protokol bilan AVAssetWriter dan foydalaning.
AVFoundation — media bilan ishlash uchun past darajadagi freymvork. AVKit — AVFoundation ustidagi qatlam bo'lib, tayyor UI komponentlarini ta'minlaydi: AVPlayerViewController, AVPictureInPictureController va AVPipView.
Ha, iOS 11 dan boshlab AVFoundation ijro etish uchun FLAC (Free Lossless Audio Codec) ni qo'llab-quvvatlaydi. ALAC (Apple Lossless) iOS 4 dan qo'llab-quvvatlanadi. Ikkala kodek AVAudioPlayer va AVPlayer orqali ishlaydi.
ReplayKit'dagi RPScreenRecorder orqali, u ichki tarzda AVFoundation'dan foydalanadi. iOS 9 dan boshlab ekran yozish RPScreenRecorder.shared().startRecording() bilan ixtiyoriy mikrofon bilan mavjud.
Xulosa
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.