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 са ефектима реверберације, еквилајзера и pitch-shifting-а, као и стримовање преко 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 пружа готови UI са контролним елементима: 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 пружа уграђени UI са контролним елементима, 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 пружа готови UI за плејер и управљање режимом слика у слици
  • Оквир се користи у 90% iOS апликација које раде са медијским садржајем

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође