AVFoundation — az Apple multimédiás keretrendszere, amely a teljes munkafolyamatot biztosítja audióval, videóval és képekkel iOS, macOS, tvOS és watchOS rendszereken. Lefedi a kamerával és mikrofonnal történő rögzítést, médiafájlok lejátszását, hangsávok szerkesztését, valós idejű hangfeldolgozást és hálózati streaminget. A Apple AVFoundation Documentation (2026) szerint a keretrendszert az App Store mediális tartalommal dolgozó alkalmazásainak 90%-a használja.
Főbb pontok
AVFoundation — az Apple alapvető multimédiás keretrendszere, amelyet iOS 4-ben (2010) vezettek be az elavult UIWebView helyettesítésére audió és videó lejátszáshoz. Azóta az AVFoundation teljes értékű eszközkészletté fejlődött bármilyen médiatípussal való munkához: az egyszerű MP3 fájl lejátszásától a professzionális videórögzítésig többcsatornás mikrofonnal és valós idejű effektekkel történő hangátalakításig.
Az AVFoundation architektúrája néhány alapvető absztrakció köré épül: AVAsset (médiaadatok), AVPlayer (lejátszás), AVCaptureSession (rögzítés) és AVAudioEngine (feldolgozás). Minden komponens aszinkron módon működik, ami kritikus fontosságú a felület simaságának megőrzéséhez nagy fájlok betöltése vagy feldolgozása során. Az Apple (WWDC 2025) szerint az AVFoundation akár 8K videót is feldolgoz az M-sorozatú chipekkel rendelkező eszközökön teljesítményveszteség nélkül.
AVFoundation biztosítja a videórögzítést a kameráról 4K ProRes, HDR és akár 240 FPS támogatással lassított felvételben, audió rögzítését és keverését a beépített és külső mikrofonokról, média lejátszását HLS, MPEG-4, QuickTime, MP3, AAC és FLAC támogatással, fájlok exportálását és konvertálását AVAssetExportSession segítségével, valós idejű hangfeldolgozást AVAudioEngine-on keresztül reverberációs, hangszínszabályzó és pitch-shifting effektekkel, valamint streaminget AirPlay-en és hálózati protokollokon keresztül.
AVFoundation több modulból áll, amelyek mindegyike a médiahasználat egy adott területéért felelős. Az összetevő kiválasztása a feladattól függ: rögzítés, lejátszás, exportálás vagy valós idejű feldolgozás.
| Összetevő | Rendeltetés | Kulcsosztály |
|---|---|---|
| Rögzítés | Munka kamerával és mikrofonnal | AVCaptureSession |
| Lejátszás | Audió és videó lejátszó | AVPlayer / AVAudioPlayer |
| Szerkesztés | Kompozíció és montázs | AVMutableComposition |
| Exportálás | Konvertálás más formátumokba | AVAssetExportSession |
| Hangmotor | Valós idejű hangfeldolgozás | AVAudioEngine |
| Metaadatok | ID3, EXIF és XMP olvasása | AVMetadataItem |
AVCaptureSession — a videó és audió rögzítés központi objektuma. Kezeli a fizikai eszközöktől (kamera, mikrofon) érkező adatfolyamokat, beállítja azok konfigurációját (felbontás, FPS, formátum), és a kimenetre irányítja: előnézet (AVCaptureVideoPreviewLayer), fájlba rögzítés (AVCaptureMovieFileOutput) vagy képkockánkénti feldolgozás (AVCaptureVideoDataOutput).
AVPlayer — egy univerzális AVFoundation lejátszó, amely képes médiatartalmat mind helyileg, mind hálózatról lejátszani. Az AVPlayer támogatja a HLS streamelést, MPEG-4, QuickTime Movie és a legtöbb audióformátumot. A lejátszás vezérlése aszinkron módon történik az AVPlayerItem segítségével. AVPlayerViewController kész felhasználói felületet biztosít vezérlőelemekkel: play/pause, tekerés, AirPlay és PiP.
A videó és audió rögzítése — az AVFoundation egyik legkeresettebb képessége. A rögzítési munkamenet beállítása több lépést foglal magában: AVCaptureSession létrehozása, bemenetek hozzáadása (kamera, mikrofon), kimenetek beállítása és a munkamenet elindítása.
Vizsgáljuk meg az AVCaptureSession lépésről lépésre történő beállítását videó rögzítéséhez az iPhone hátsó kamerájáról és egyidejű hangrögzítéshez a mikrofonról. A folyamat négy lépésből áll Swiftben.
import AVFoundation
// 1. Munkamenet létrehozása és konfigurálása
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. Kamerabemenet hozzáadása
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. Kimenet hozzáadása rögzítéshez
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. Munkamenet elindítása
session.startRunning()
A Swift kód létrehoz egy AVCaptureSession-t Full HD előbeállítással, csatlakoztatja a hátsó kamerát videóforrásként, és hozzáad egy kimenetet a fájlba rögzítéshez. A session.startRunning() elindítása után a kamera megkezdi a képkockák küldését az előnézetbe és a kimeneti fájlba. A rögzítés leállítása az output.stopRecording() segítségével történik, a galériába mentés lehetőségével.
Csak audió (videó nélküli) rögzítéséhez az AVCaptureSession-hez csak a mikrofon kerül hozzáadásra az AVCaptureDevice.default(.audio) segítségével. A kimenet AVAudioFileOutput vagy AVCaptureAudioDataOutput a valós idejű hangfeldolgozáshoz. Az AVFoundation támogatja a többcsatornás rögzítést: akár 8 audiocsatornát iPad Pro-n és akár 2-t iPhone-on, ami lehetővé teszi sztereó hang rögzítését külső mikrofonokról Lightning, USB-C vagy Bluetooth csatlakozón keresztül. A bemeneti jel forrásának kiválasztása az AVAudioSession.sharedInstance().setPreferredInput segítségével történik, ami kritikus a külső headsetekkel és Bluetooth-mikrofonokkal dolgozó alkalmazások számára.
AVFoundation két fő módot kínál a média lejátszására: AVPlayer videóhoz és AVAudioPlayer audióhoz. Vizsgáljuk meg egy távoli HLS adatfolyam lejátszásának példáját AVPlayer segítségével.
A kód létrehoz egy AVPlayer-t, betölti a HLS adatfolyamot egy URL-ről, és elindítja a lejátszást csökkentett hangerőszinttel. Az AVPlayerItem kezeli a betöltés és pufferelés állapotát, a KVO megfigyelés pedig lehetővé teszi a hibák kezelését.
import AVFoundation
import AVKit
// 1. AVPlayer létrehozása HLS adatfolyammal
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. Lejátszás
player.play()
// 3. Lejátszó megjelenítése
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. Állapot figyelése
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
A kód létrehoz egy AVPlayer-t HLS URL-lel, beállítja a hangerőt 70%-ra, és elindítja a lejátszást. Az AVPlayerViewController beépített felhasználói felületet biztosít vezérlőelemekkel, AirPlay-jel és kép a képben móddal. A lejátszó állapota KVO-n keresztül követhető annak kezelésére, amikor a HLS adatfolyam ideiglenesen nem elérhető.
Audió lejátszásához videófelület nélkül az AVAudioPlayer használatos — egy könnyű lejátszó, amely nem igényel AVPlayerItem-et. Az AVAudioPlayer támogatja az MP3, AAC, ALAC, FLAC, WAV és AIFF audióformátumokat, play(), pause() és stop() metódusokat biztosít, valamint AVAudioPlayerDelegate protokollt a lejátszás befejezésének és dekódolási hibáinak követéséhez. Az AVAudioPlayer ideális háttérzene, podcastok és hangeffektek lejátszásához játékokban iOS és macOS rendszereken.
Vizsgáljunk meg még két jellemző forgatókönyvet az AVFoundation-nal való munkához: audió feldolgozása AVAudioEngine segítségével és videó exportálása más formátumba.
AVAudioEngine lehetővé teszi a valós idejű audiófeldolgozást csomópontok (nodes) összekapcsolásával egy feldolgozási gráfban: bemeneti csomópont (mikrofon) → effektek → kimeneti csomópont (hangszóró). Az alábbi példában reverberáció kerül hozzáadásra a hanghoz.
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// Reverberáció beállítása
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// Csatlakozás: mikrofon -> reverberáció -> hangszóró
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
Az AVAudioEngine egy három csomópontból álló gráfot hoz létre: bemenet (mikrofon), effekt (reverberáció nagyterem előbeállítással) és kimenet (hangszóró). Az engine.start() után a mikrofon hangja valós időben kerül feldolgozásra az effekt által, és a fejhallgatóra vagy a készülék hangszórójára kerül. A feldolgozási késleltetés kevesebb mint 10 ms minden modern Apple-eszközön.
Az AVAudioEngine további képessége — hanganalízis AVAudioUnitEQ és AVAudioUnitMixer segítségével. A fejlesztő hangszínszabályzót, kompresszort és limitert adhat bármely audió adatfolyamhoz. Zenei alkalmazásokhoz az AVFoundation AVAudioSequencer-t biztosít MIDI fájlok lejátszásához és AVSpeechSynthesizer-t beszédszintézishez. Minden összetevő egyetlen audió gráfban működik, ami kevesebb mint 5 ms késleltetést biztosít a rögzítés és feldolgozás között Apple-eszközökön.
Az AVFoundation-nal való munka során fontos figyelembe venni a rendszerengedélyeket: a kamera eléréséhez NSCameraUsageDescription szükséges az Info.plist-ben, a mikrofonhoz — NSMicrophoneUsageDescription. Az AVFoundation automatikusan megjeleníti a rendszer engedélykérési párbeszédablakát az eszköz első elérési kísérletekor. A felhasználó elutasítását az AVCaptureDevice.authorizationStatus() kezeli, ami lehetővé teszi a kamera elérhetetlenségéről szóló üzenet helyes megjelenítését a beállításokba való navigálás javaslatával.
Az AVFoundation támogatja a háttérben történő audió lejátszást az Audio Background Mode segítségével a projekt Capabilities részében. Az aktiváláshoz elegendő egy audio bejegyzés hozzáadása az UIBackgroundModes Info.plist-ben és az AVAudioSession beállítása .playback kategóriával. A videó alapértelmezés szerint nem játszódik le a háttérben, de az AVPlayer használható pictureInPicture móddal a videó további megjelenítéséhez a kicsinyített alkalmazásban iPad-en. A PiP mód ikonja az AVPictureInPictureController és a protokoll delegate segítségével konfigurálható.
Gyakran ismételt kérdések
iOS 4+ alapvető lejátszáshoz és rögzítéshez. iOS 8+ AVAudioEngine-hoz. iOS 17+ AVAssetWriter-hez HDR módban. A keretrendszer aktuális verziója minden iPhone, iPad és Mac készüléken támogatott.
Igen, az AVPlayer támogatja a HLS-t (HTTP Live Streaming) — az Apple fő streaming protokollját. Média szerverre küldéséhez használja az AVAssetWriter-t egyéni protokollal az URLSession tetején.
AVFoundation — egy alacsony szintű keretrendszer médiahasználathoz. AVKit — egy réteg az AVFoundation felett, amely kész felhasználói felület összetevőket biztosít: AVPlayerViewController, AVPictureInPictureController és AVPipView.
Igen, iOS 11-től az AVFoundation támogatja a FLAC (Free Lossless Audio Codec) formátumot lejátszáshoz. Az ALAC (Apple Lossless) iOS 4-től támogatott. Mindkét kodek működik az AVAudioPlayer és AVPlayer segítségével.
Az RPScreenRecorder segítségével a ReplayKit-ből, amely belsőleg AVFoundation-t használ. iOS 9-től a képernyőrögzítés elérhető az RPScreenRecorder.shared().startRecording() segítségével opcionális mikrofonnal.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is