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 са ефектима реверберације, еквилајзера и pitch-shifting-а, као и стримовање преко 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 пружа готови UI са контролним елементима: 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 пружа уграђени UI са контролним елементима, 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође