AVFoundation — е мултимедийна рамка на Apple, която осигурява пълен цикъл на работа с аудио, видео и изображения на iOS, macOS, tvOS и watchOS. Тя обхваща заснемане от камера и микрофон, възпроизвеждане на медийни файлове, редактиране на аудио писти, обработка на звук в реално време и стрийминг по мрежа. Според Apple AVFoundation Documentation (2026), рамката се използва в 90% от приложенията на App Store, които работят с медийно съдържание.
Основни точки
AVFoundation — е основна мултимедийна рамка на Apple, представена още в iOS 4 (2010) като замяна на остарелия UIWebView за възпроизвеждане на аудио и видео. Оттогава AVFoundation еволюира в пълен набор от инструменти за работа с всякакви видове медия: от просто възпроизвеждане на MP3 файл до професионално заснемане на видео с многоканален микрофон и трансформация на звук чрез ефекти в реално време.
Архитектурата на AVFoundation е изградена около няколко основни абстракции: AVAsset (медийни данни), AVPlayer (възпроизвеждане), AVCaptureSession (заснемане) и AVAudioEngine (обработка). Всеки компонент работи асинхронно, което е критично за поддържане на плавността на UI по време на зареждане или обработка на големи файлове. Според Apple (WWDC 2025), AVFoundation обработва видео до 8K на устройства с M серия чипове без загуба на производителност.
AVFoundation осигурява заснемане на видео от камера с поддръжка на 4K ProRes, HDR и до 240 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 поддържа многоканално заснемане: до 8 аудио канала на iPad Pro и до 2 на 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 с HLS URL, задава силата на звука на 70% и стартира възпроизвеждане. 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() звукът от микрофона се обработва от ефекта в реално време и се извежда към слушалките или високоговорителя на устройството. Забавянето на обработката е по-малко от 10 ms на всички съвременни Apple устройства.
Допълнителна възможност на AVAudioEngine — анализ на звук чрез AVAudioUnitEQ и AVAudioUnitMixer. Разработчикът може да добави еквалайзер, компресор и лимитер към всеки аудио поток. За музикални приложения AVFoundation предоставя AVAudioSequencer за възпроизвеждане на MIDI файлове и AVSpeechSynthesizer за синтез на реч. Всички компоненти работят в единен аудио граф, което дава забавяне между заснемане и обработка по-малко от 5 ms на Apple устройства.
При работа с AVFoundation е важно да се вземат предвид системните разрешения: за достъп до камера се изисква NSCameraUsageDescription в Info.plist, за микрофон — NSMicrophoneUsageDescription. AVFoundation автоматично показва системния диалог за искане на разрешение при първия опит за достъп до устройството. Отказът на потребителя се обработва чрез AVCaptureDevice.authorizationStatus(), което позволява правилно показване на съобщение за недостъпност на камерата с предложение за преминаване към настройките.
AVFoundation поддържа фоново възпроизвеждане на аудио чрез Audio Background Mode в Capabilities на проекта. За активиране е достатъчно да се добави запис audio в UIBackgroundModes Info.plist и да се конфигурира AVAudioSession с категория .playback. Видеото на фона не се възпроизвежда по подразбиране, но можете да използвате AVPlayer с режим pictureInPicture за продължаване на показването на видео в минимизираното приложение на iPad. Иконата на режима PiP се конфигурира чрез AVPictureInPictureController заедно с делегат на протокола.
Често задавани въпроси
iOS 4+ за основно възпроизвеждане и заснемане. iOS 8+ за AVAudioEngine. iOS 17+ за AVAssetWriter в HDR режим. Актуалната версия на рамката се поддържа на всички устройства iPhone, iPad и Mac.
Да, AVPlayer поддържа HLS (HTTP Live Streaming) — основният протокол на Apple за стрийминг. За изпращане на медия към сървър използвайте 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 създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също