AVFoundation — این چیست، API صدا و ویدیو در iOS

نویسنده: IT Sectr منتشر شده: 2026-03-26 زمان مطالعه: 8 دقیقه

AVFoundation — یک فریمورک چندرسانه‌ای اپل است که چرخه کامل کار با صدا، ویدیو و تصاویر را در iOS، macOS، tvOS و watchOS فراهم می‌کند. این فریمورک ضبط از دوربین و میکروفن، پخش فایل‌های رسانه‌ای، ویرایش مسیرهای صوتی، پردازش صدا در زمان واقعی و استریمینگ از طریق شبکه را پوشش می‌دهد. به گفته Apple AVFoundation Documentation (2026)، این فریمورک در ۹۰٪ از برنامه‌های App Store که با محتوای رسانه‌ای کار می‌کنند استفاده می‌شود.

نکات کلیدی

  • AVFoundation — فریمورک چندرسانه‌ای اپل برای ضبط، پخش و پردازش صدا و ویدیو
  • AVCaptureSession ضبط از دوربین و میکروفن را با تنظیم کیفیت و فرمت مدیریت می‌کند
  • AVPlayer پخش فایل‌های رسانه‌ای را با پشتیبانی از HLS، MP4 و AirPlay فراهم می‌کند
  • AVAudioEngine پردازش صدا در زمان واقعی با افکت‌ها و میکس را امکان‌پذیر می‌سازد
  • AVAssetExportSession خروجی و تبدیل فایل‌های رسانه‌ای به فرمت‌های مختلف را انجام می‌دهد

AVFoundation چیست؟

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

AVFoundation از چندین ماژول تشکیل شده است که هر کدام مسئول حوزه خاصی از کار با رسانه هستند. انتخاب مؤلفه به وظیفه بستگی دارد: ضبط، پخش، خروجی یا پردازش در زمان واقعی.

مؤلفهکاربردکلاس کلیدی
ضبطکار با دوربین و میکروفنAVCaptureSession
پخشپخش‌کننده صدا و ویدیوAVPlayer / AVAudioPlayer
ویرایشترکیب و مونتاژAVMutableComposition
خروجیتبدیل به فرمت‌های دیگرAVAssetExportSession
موتور صوتیپردازش صدا در زمان واقعیAVAudioEngine
فرادادهخواندن ID3، EXIF و XMPAVMetadataItem

AVCaptureSession — ضبط از دوربین

AVCaptureSession — شیء مرکزی برای ضبط ویدیو و صدا است. این شیء جریان‌های داده ورودی از دستگاه‌های فیزیکی (دوربین، میکروفن) را مدیریت می‌کند، پیکربندی آنها (رزولوشن، FPS، فرمت) را تنظیم می‌کند و به خروجی هدایت می‌کند: پیش‌نمایش (AVCaptureVideoPreviewLayer)، ضبط در فایل (AVCaptureMovieFileOutput) یا پردازش فریم به فریم (AVCaptureVideoDataOutput).

AVPlayer — پخش رسانه

AVPlayer — یک پخش‌کننده جهانی AVFoundation است که قادر به پخش محتوای رسانه‌ای هم به صورت محلی و هم از شبکه است. AVPlayer از استریمینگ HLS، MPEG-4، QuickTime Movie و اکثر فرمت‌های صوتی پشتیبانی می‌کند. کنترل پخش به صورت ناهمگام از طریق AVPlayerItem انجام می‌شود. AVPlayerViewController یک رابط کاربری آماده با عناصر کنترلی play/pause، جستجو، AirPlay و PiP فراهم می‌کند.

ضبط رسانه با AVFoundation

ضبط ویدیو و صدا — یکی از پرکاربردترین قابلیت‌های AVFoundation است. پیکربندی جلسه ضبط شامل چند مرحله است: ایجاد AVCaptureSession، اضافه کردن ورودی‌ها (دوربین، میکروفن)، تنظیم خروجی‌ها و راه‌اندازی جلسه.

پیکربندی AVCaptureSession

بیایید پیکربندی گام‌به‌گام AVCaptureSession را برای ضبط ویدیو از دوربین پشتی iPhone و ضبط همزمان صدا از میکروفن بررسی کنیم. فرآیند شامل چهار مرحله در Swift است.

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

کد یک AVPlayer ایجاد می‌کند، جریان HLS را از URL بارگذاری می‌کند و پخش را با سطح صدای کاهش‌یافته شروع می‌کند. AVPlayerItem وضعیت بارگذاری و بافرینگ را مدیریت می‌کند و مشاهده KVO وضعیت امکان پردازش خطاها را فراهم می‌کند.

swift
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

AVAudioEngine امکان پردازش صدا در زمان واقعی را با اتصال گره‌ها (nodes) در یک گراف پردازشی فراهم می‌کند: گره ورودی (میکروفن) → افکت‌ها → گره خروجی (بلندگو). در مثال زیر، طنین به صدا اضافه می‌شود.

swift
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 پیکربندی می‌شود.

سؤالات متداول

AVFoundation از چه نسخه‌های iOS پشتیبانی می‌کند؟

iOS 4+ برای پخش و ضبط پایه. iOS 8+ برای AVAudioEngine. iOS 17+ برای AVAssetWriter در حالت HDR. نسخه فعلی فریمورک در تمام دستگاه‌های iPhone، iPad و Mac پشتیبانی می‌شود.

آیا می‌توان از AVFoundation برای استریمینگ استفاده کرد؟

بله، AVPlayer از HLS (HTTP Live Streaming) — پروتکل اصلی اپل برای استریمینگ پشتیبانی می‌کند. برای ارسال رسانه به سرور از AVAssetWriter با پروتکل سفارشی روی URLSession استفاده کنید.

تفاوت AVFoundation با AVKit چیست؟

AVFoundation — یک فریمورک سطح پایین برای کار با رسانه است. AVKit — لایه‌ای بر روی AVFoundation است که مؤلفه‌های آماده UI را فراهم می‌کند: AVPlayerViewController، AVPictureInPictureController و AVPipView.

آیا AVFoundation از فرمت‌های صوتی FLAC و ALAC پشتیبانی می‌کند؟

بله، از iOS 11 AVFoundation از FLAC (Free Lossless Audio Codec) برای پخش پشتیبانی می‌کند. ALAC (Apple Lossless) از iOS 4 پشتیبانی می‌شود. هر دو کدک از طریق AVAudioPlayer و AVPlayer کار می‌کنند.

چگونه ویدیوی صفحه را از طریق AVFoundation ضبط کنیم؟

از طریق RPScreenRecorder از ReplayKit که در داخل از AVFoundation استفاده می‌کند. از iOS 9، ضبط صفحه از طریق RPScreenRecorder.shared().startRecording() با میکروفن اختیاری در دسترس است.

خلاصه

  • AVFoundation — فریمورک چندرسانه‌ای بنیادی اپل برای ضبط، پخش و پردازش صدا/ویدیو
  • AVCaptureSession دوربین و میکروفن را با تنظیم رزولوشن تا 8K و 240 FPS مدیریت می‌کند
  • AVPlayer پخش جریان‌های محلی و HLS را با AirPlay و PiP فراهم می‌کند
  • AVAudioEngine صدا را در زمان واقعی از طریق گراف گره‌ها با افکت‌ها پردازش می‌کند
  • AVAssetExportSession فایل‌های رسانه را بین فرمت‌ها با پشتیبانی از HDR تبدیل می‌کند
  • AVKit رابط کاربری آماده برای پخش‌کننده و مدیریت حالت تصویر در تصویر فراهم می‌کند
  • فریمورک در ۹۰٪ از برنامه‌های iOS که با محتوای رسانه‌ای کار می‌کنند استفاده می‌شود

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید