AVFoundation — какво е това, API за аудио и видео в iOS

Автор: IT Sectr Публикувано: 2026-03-26 Време за четене: 8 мин

AVFoundation — е мултимедийна рамка на Apple, която осигурява пълен цикъл на работа с аудио, видео и изображения на iOS, macOS, tvOS и watchOS. Тя обхваща заснемане от камера и микрофон, възпроизвеждане на медийни файлове, редактиране на аудио писти, обработка на звук в реално време и стрийминг по мрежа. Според Apple AVFoundation Documentation (2026), рамката се използва в 90% от приложенията на App Store, които работят с медийно съдържание.

Основни точки

  • AVFoundation — мултимедийна рамка на Apple за заснемане, възпроизвеждане и обработка на аудио и видео
  • AVCaptureSession управлява заснемане от камера и микрофон с настройка на качество и формат
  • AVPlayer осигурява възпроизвеждане на медийни файлове с поддръжка на HLS, MP4 и AirPlay
  • AVAudioEngine позволява обработка на аудио в реално време с ефекти и миксиране
  • AVAssetExportSession извършва експорт и конвертиране на медийни файлове в различни формати

Какво е AVFoundation?

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

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 поддържа многоканално заснемане: до 8 аудио канала на iPad Pro и до 2 на 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 с 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

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() звукът от микрофона се обработва от ефекта в реално време и се извежда към слушалките или високоговорителя на устройството. Забавянето на обработката е по-малко от 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 се поддържа AVFoundation?

iOS 4+ за основно възпроизвеждане и заснемане. iOS 8+ за AVAudioEngine. iOS 17+ за AVAssetWriter в HDR режим. Актуалната версия на рамката се поддържа на всички устройства iPhone, iPad и Mac.

Може ли AVFoundation да се използва за стрийминг?

Да, AVPlayer поддържа HLS (HTTP Live Streaming) — основният протокол на Apple за стрийминг. За изпращане на медия към сървър използвайте 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 — основна мултимедийна рамка на Apple за заснемане, възпроизвеждане и обработка на аудио/видео
  • AVCaptureSession управлява камера и микрофон с настройка на резолюция до 8K и 240 FPS
  • AVPlayer осигурява възпроизвеждане на локални и HLS потоци с AirPlay и PiP
  • AVAudioEngine обработва аудио в реално време чрез граф от възли с ефекти
  • AVAssetExportSession конвертира медийни файлове между формати с поддръжка на HDR
  • AVKit предоставя готов потребителски интерфейс за плейър и управление на режим картина в картина
  • Рамката се използва в 90% от iOS приложенията, работещи с медийно съдържание

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също