AVFoundation — یک فریمورک چندرسانهای اپل است که چرخه کامل کار با صدا، ویدیو و تصاویر را در iOS، macOS، tvOS و watchOS فراهم میکند. این فریمورک ضبط از دوربین و میکروفن، پخش فایلهای رسانهای، ویرایش مسیرهای صوتی، پردازش صدا در زمان واقعی و استریمینگ از طریق شبکه را پوشش میدهد. به گفته Apple AVFoundation Documentation (2026)، این فریمورک در ۹۰٪ از برنامههای App Store که با محتوای رسانهای کار میکنند استفاده میشود.
نکات کلیدی
AVFoundation — یک فریمورک چندرسانهای بنیادی اپل است که در iOS 4 (2010) به عنوان جایگزینی برای UIWebView قدیمی برای پخش صدا و ویدیو معرفی شد. از آن زمان، AVFoundation به یک مجموعه ابزار کامل برای کار با انواع رسانهها تبدیل شده است: از پخش ساده یک فایل MP3 تا ضبط حرفهای ویدیو با میکروفن چندکاناله و تغییر صدا از طریق افکتهای زمان واقعی.
معماری AVFoundation حول چند انتزاع پایه ساخته شده است: AVAsset (دادههای رسانه)، AVPlayer (پخش)، AVCaptureSession (ضبط) و AVAudioEngine (پردازش). هر مؤلفه به صورت ناهمگام کار میکند که برای حفظ روانی UI در هنگام بارگذاری یا پردازش فایلهای بزرگ حیاتی است. به گفته اپل (WWDC 2025)، AVFoundation ویدیوی 8K را بر روی دستگاههای دارای تراشه سری M بدون افت عملکرد پردازش میکند.
AVFoundation ضبط ویدیو از دوربین با پشتیبانی از 4K ProRes، HDR و تا ۲۴۰ FPS در حرکت آهسته، ضبط و میکس صدا از میکروفن داخلی و خارجی، پخش رسانه با پشتیبانی از HLS، MPEG-4، QuickTime، MP3، AAC و FLAC، خروجی و تبدیل فایلها از طریق AVAssetExportSession، پردازش صدا در زمان واقعی از طریق AVAudioEngine با افکتهای طنین، اکولایزر و تغییر زیروبمی و همچنین استریمینگ از طریق AirPlay و پروتکلهای شبکه را فراهم میکند.
AVFoundation از چندین ماژول تشکیل شده است که هر کدام مسئول حوزه خاصی از کار با رسانه هستند. انتخاب مؤلفه به وظیفه بستگی دارد: ضبط، پخش، خروجی یا پردازش در زمان واقعی.
| مؤلفه | کاربرد | کلاس کلیدی |
|---|---|---|
| ضبط | کار با دوربین و میکروفن | AVCaptureSession |
| پخش | پخشکننده صدا و ویدیو | AVPlayer / AVAudioPlayer |
| ویرایش | ترکیب و مونتاژ | AVMutableComposition |
| خروجی | تبدیل به فرمتهای دیگر | AVAssetExportSession |
| موتور صوتی | پردازش صدا در زمان واقعی | AVAudioEngine |
| فراداده | خواندن ID3، EXIF و XMP | AVMetadataItem |
AVCaptureSession — شیء مرکزی برای ضبط ویدیو و صدا است. این شیء جریانهای داده ورودی از دستگاههای فیزیکی (دوربین، میکروفن) را مدیریت میکند، پیکربندی آنها (رزولوشن، FPS، فرمت) را تنظیم میکند و به خروجی هدایت میکند: پیشنمایش (AVCaptureVideoPreviewLayer)، ضبط در فایل (AVCaptureMovieFileOutput) یا پردازش فریم به فریم (AVCaptureVideoDataOutput).
AVPlayer — یک پخشکننده جهانی AVFoundation است که قادر به پخش محتوای رسانهای هم به صورت محلی و هم از شبکه است. AVPlayer از استریمینگ HLS، MPEG-4، QuickTime Movie و اکثر فرمتهای صوتی پشتیبانی میکند. کنترل پخش به صورت ناهمگام از طریق AVPlayerItem انجام میشود. AVPlayerViewController یک رابط کاربری آماده با عناصر کنترلی play/pause، جستجو، AirPlay و PiP فراهم میکند.
ضبط ویدیو و صدا — یکی از پرکاربردترین قابلیتهای AVFoundation است. پیکربندی جلسه ضبط شامل چند مرحله است: ایجاد AVCaptureSession، اضافه کردن ورودیها (دوربین، میکروفن)، تنظیم خروجیها و راهاندازی جلسه.
بیایید پیکربندی گامبهگام AVCaptureSession را برای ضبط ویدیو از دوربین پشتی iPhone و ضبط همزمان صدا از میکروفن بررسی کنیم. فرآیند شامل چهار مرحله در Swift است.
import AVFoundation
// 1. ایجاد و پیکربندی جلسه
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. افزودن ورودی دوربین
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. افزودن خروجی برای ضبط
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. راهاندازی جلسه
session.startRunning()
کد Swift یک AVCaptureSession با پریست Full HD ایجاد میکند، دوربین پشتی را به عنوان منبع ویدیو متصل میکند و خروجی برای ضبط در فایل اضافه میکند. پس از راهاندازی session.startRunning()، دوربین شروع به ارسال فریمها به پیشنمایش و فایل خروجی میکند. توقف ضبط از طریق output.stopRecording() با امکان ذخیره در گالری انجام میشود.
برای ضبط فقط صدا (بدون ویدیو)، در AVCaptureSession فقط میکروفن از طریق AVCaptureDevice.default(.audio) اضافه میشود. خروجی AVAudioFileOutput یا AVCaptureAudioDataOutput برای پردازش صدا در زمان واقعی است. AVFoundation از ضبط چندکاناله پشتیبانی میکند: تا ۸ کانال صوتی در iPad Pro و تا ۲ کانال در iPhone، که امکان ضبط صدای استریو از میکروفنهای خارجی از طریق رابط Lightning، USB-C یا Bluetooth را فراهم میکند. انتخاب منبع سیگنال ورودی از طریق AVAudioSession.sharedInstance().setPreferredInput انجام میشود که برای برنامههای کار با هدستهای خارجی و میکروفنهای Bluetooth حیاتی است.
AVFoundation دو روش اصلی برای پخش رسانه فراهم میکند: AVPlayer برای ویدیو و AVAudioPlayer برای صدا. بیایید مثال پخش یک جریان HLS راه دور را از طریق AVPlayer بررسی کنیم.
کد یک AVPlayer ایجاد میکند، جریان HLS را از URL بارگذاری میکند و پخش را با سطح صدای کاهشیافته شروع میکند. AVPlayerItem وضعیت بارگذاری و بافرینگ را مدیریت میکند و مشاهده KVO وضعیت امکان پردازش خطاها را فراهم میکند.
import AVFoundation
import AVKit
// 1. ایجاد AVPlayer با جریان HLS
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. پخش
player.play()
// 3. نمایش پخشکننده
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. نظارت بر وضعیت
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
کد یک AVPlayer با URL HLS ایجاد میکند، صدا را روی ۷۰٪ تنظیم میکند و پخش را شروع میکند. AVPlayerViewController یک رابط کاربری داخلی با عناصر کنترلی، AirPlay و حالت تصویر در تصویر فراهم میکند. وضعیت پخشکننده از طریق KVO برای مدیریت مواردی که جریان HLS به طور موقت در دسترس نیست، ردیابی میشود.
برای پخش صدا بدون رابط ویدیویی از AVAudioPlayer استفاده میشود — یک پخشکننده سبک که به AVPlayerItem نیاز ندارد. AVAudioPlayer از فرمتهای صوتی MP3، AAC، ALAC، FLAC، WAV و AIFF پشتیبانی میکند، متدهای play()، pause() و stop() و همچنین پروتکل AVAudioPlayerDelegate را برای ردیابی پایان پخش و خطاهای رمزگشایی فراهم میکند. AVAudioPlayer برای پخش پسزمینه موسیقی، پادکستها و افکتهای صوتی در بازیها در iOS و macOS ایدهآل است.
بیایید دو سناریوی مشخص دیگر از کار با AVFoundation را بررسی کنیم: پردازش صدا از طریق AVAudioEngine و خروجی ویدیو به فرمت دیگر.
AVAudioEngine امکان پردازش صدا در زمان واقعی را با اتصال گرهها (nodes) در یک گراف پردازشی فراهم میکند: گره ورودی (میکروفن) → افکتها → گره خروجی (بلندگو). در مثال زیر، طنین به صدا اضافه میشود.
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// تنظیم طنین
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// اتصال: میکروفن -> طنین -> بلندگو
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
AVAudioEngine یک گراف از سه گره ایجاد میکند: ورودی (میکروفن)، افکت (طنین با پریست سالن بزرگ) و خروجی (بلندگو). پس از engine.start()، صدا از میکروفن در زمان واقعی توسط افکت پردازش میشود و به هدفون یا بلندگوی دستگاه خروجی میشود. تأخیر پردازش در تمام دستگاههای مدرن اپل کمتر از ۱۰ میلیثانیه است.
قابلیت اضافی AVAudioEngine — تحلیل صدا از طریق AVAudioUnitEQ و AVAudioUnitMixer است. توسعهدهنده میتواند اکولایزر، کمپرسور و لیمیتر را به هر جریان صوتی اضافه کند. برای برنامههای موسیقی، AVFoundation AVAudioSequencer را برای پخش فایلهای MIDI و AVSpeechSynthesizer را برای سنتز گفتار فراهم میکند. همه مؤلفهها در یک گراف صوتی واحد کار میکنند که تأخیر بین ضبط و پردازش کمتر از ۵ میلیثانیه در دستگاههای اپل ایجاد میکند.
هنگام کار با AVFoundation مهم است که مجوزهای سیستم را در نظر بگیرید: برای دسترسی به دوربین NSCameraUsageDescription در Info.plist و برای میکروفن NSMicrophoneUsageDescription مورد نیاز است. AVFoundation به طور خودکار کادر محاورهای درخواست مجوز را در اولین تلاش برای دسترسی به دستگاه نشان میدهد. رد درخواست توسط کاربر از طریق AVCaptureDevice.authorizationStatus() مدیریت میشود که امکان نمایش صحیح پیام عدم دسترسی به دوربین با پیشنهاد رفتن به تنظیمات را فراهم میکند.
AVFoundation از پخش پسزمینه صدا از طریق Audio Background Mode در Capabilities پروژه پشتیبانی میکند. برای فعالسازی، کافی است رکورد audio را در UIBackgroundModes Info.plist اضافه کنید و AVAudioSession را با رده .playback پیکربندی کنید. ویدیو در پسزمینه به طور پیشفرض پخش نمیشود، اما میتوانید از AVPlayer با حالت pictureInPicture برای ادامه نمایش ویدیو در برنامه کوچکشده در iPad استفاده کنید. آیکون حالت PiP از طریق AVPictureInPictureController به همراه پروتکل delegate پیکربندی میشود.
سؤالات متداول
iOS 4+ برای پخش و ضبط پایه. iOS 8+ برای AVAudioEngine. iOS 17+ برای AVAssetWriter در حالت HDR. نسخه فعلی فریمورک در تمام دستگاههای iPhone، iPad و Mac پشتیبانی میشود.
بله، AVPlayer از HLS (HTTP Live Streaming) — پروتکل اصلی اپل برای استریمینگ پشتیبانی میکند. برای ارسال رسانه به سرور از AVAssetWriter با پروتکل سفارشی روی URLSession استفاده کنید.
AVFoundation — یک فریمورک سطح پایین برای کار با رسانه است. AVKit — لایهای بر روی AVFoundation است که مؤلفههای آماده UI را فراهم میکند: AVPlayerViewController، AVPictureInPictureController و AVPipView.
بله، از iOS 11 AVFoundation از FLAC (Free Lossless Audio Codec) برای پخش پشتیبانی میکند. ALAC (Apple Lossless) از iOS 4 پشتیبانی میشود. هر دو کدک از طریق AVAudioPlayer و AVPlayer کار میکنند.
از طریق RPScreenRecorder از ReplayKit که در داخل از AVFoundation استفاده میکند. از iOS 9، ضبط صفحه از طریق RPScreenRecorder.shared().startRecording() با میکروفن اختیاری در دسترس است.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید