AVFoundation ist das Multimedia-Framework von Apple, das einen vollständigen Workflow für die Arbeit mit Audio, Video und Bildern auf iOS, macOS, tvOS und watchOS bietet. Es umfasst die Aufnahme von Kamera und Mikrofon, die Wiedergabe von Mediendateien, die Bearbeitung von Audiospuren, die Echtzeit-Audioverarbeitung und das Streaming über das Netzwerk. Laut Apple AVFoundation Documentation (2026) wird das Framework in 90 % der App Store-Anwendungen verwendet, die mit Medieninhalten arbeiten.
Wichtige Punkte
AVFoundation ist das grundlegende Multimedia-Framework von Apple, das bereits in iOS 4 (2010) als Ersatz für das veraltete UIWebView zur Audio- und Videowiedergabe eingeführt wurde. Seitdem hat sich AVFoundation zu einem vollwertigen Werkzeugsatz für die Arbeit mit allen Medientypen entwickelt: von der einfachen MP3-Dateiwiedergabe bis zur professionellen Videoaufnahme mit Mehrkanalmikrofon und Klangtransformation durch Echtzeiteffekte.
Die Architektur von AVFoundation basiert auf mehreren grundlegenden Abstraktionen: AVAsset (Mediendaten), AVPlayer (Wiedergabe), AVCaptureSession (Erfassung) und AVAudioEngine (Verarbeitung). Jede Komponente arbeitet asynchron, was für die Aufrechterhaltung der UI-Flüssigkeit während des Ladens oder Verarbeitens großer Dateien entscheidend ist. Laut Apple (WWDC 2025) verarbeitet AVFoundation bis zu 8K-Video auf Geräten mit M-Serie-Chips ohne Leistungseinbußen.
AVFoundation bietet Videoaufnahme von der Kamera mit Unterstützung für 4K ProRes, HDR und bis zu 240 FPS in Zeitlupe, Audioaufnahme und -mischung von integrierten und externen Mikrofonen, Medienwiedergabe mit Unterstützung für HLS, MPEG-4, QuickTime, MP3, AAC und FLAC, Dateiexport und -konvertierung über AVAssetExportSession, Echtzeit-Audioverarbeitung durch AVAudioEngine mit Hall-, Equalizer- und Pitch-Shifting-Effekten sowie Streaming über AirPlay und Netzwerkprotokolle.
AVFoundation besteht aus mehreren Modulen, von denen jedes für einen bestimmten Bereich der Medienarbeit zuständig ist. Die Wahl der Komponente hängt von der Aufgabe ab: Erfassung, Wiedergabe, Export oder Echtzeitverarbeitung.
| Komponente | Zweck | Schlüsselklasse |
|---|---|---|
| Erfassung | Arbeit mit Kamera und Mikrofon | AVCaptureSession |
| Wiedergabe | Audio- und Videoplayer | AVPlayer / AVAudioPlayer |
| Bearbeitung | Komposition und Montage | AVMutableComposition |
| Export | Konvertierung in andere Formate | AVAssetExportSession |
| Audio-Engine | Echtzeit-Audioverarbeitung | AVAudioEngine |
| Metadaten | Lesen von ID3, EXIF und XMP | AVMetadataItem |
AVCaptureSession ist das zentrale Objekt für die Video- und Audioerfassung. Es verwaltet eingehende Datenströme von physischen Geräten (Kamera, Mikrofon), konfiguriert deren Einstellungen (Auflösung, FPS, Format) und leitet sie an die Ausgabe weiter: Vorschau (AVCaptureVideoPreviewLayer), Dateiaufnahme (AVCaptureMovieFileOutput) oder bildweise Verarbeitung (AVCaptureVideoDataOutput).
AVPlayer ist ein universeller AVFoundation-Player, der Medieninhalte sowohl lokal als auch über das Netzwerk abspielen kann. AVPlayer unterstützt HLS-Streaming, MPEG-4, QuickTime Movie und die meisten Audioformate. Die Wiedergabesteuerung erfolgt asynchron über AVPlayerItem. AVPlayerViewController bietet eine fertige Benutzeroberfläche mit Steuerelementen: Play/Pause, Scrubbing, AirPlay und PiP.
Die Video- und Audioerfassung ist eine der gefragtesten Funktionen von AVFoundation. Die Einrichtung einer Erfassungssitzung umfasst mehrere Schritte: Erstellen einer AVCaptureSession, Hinzufügen von Eingängen (Kamera, Mikrofon), Konfigurieren von Ausgängen und Starten der Sitzung.
Wir gehen die schrittweise Einrichtung von AVCaptureSession zur Aufnahme von Video von der Rückkamera des iPhone bei gleichzeitiger Tonaufnahme vom Mikrofon durch. Der Prozess besteht aus vier Schritten in Swift.
import AVFoundation
// 1. Sitzung erstellen und konfigurieren
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. Kamera-Eingang hinzufügen
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. Ausgang für Aufnahme hinzufügen
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. Sitzung starten
session.startRunning()
Der Swift-Code erstellt eine AVCaptureSession mit einem Full-HD-Preset, verbindet die Rückkamera als Videoquelle und fügt einen Ausgang für die Dateiaufnahme hinzu. Nach session.startRunning() beginnt die Kamera, Bilder an die Vorschau und die Ausgabedatei zu senden. Die Aufnahme wird über output.stopRecording() mit der Option zum Speichern in der Galerie gestoppt.
Für die reine Audioerfassung (ohne Video) wird nur das Mikrofon über AVCaptureDevice.default(.audio) zur AVCaptureSession hinzugefügt. Der Ausgang ist AVAudioFileOutput oder AVCaptureAudioDataOutput für die Echtzeit-Audioverarbeitung. AVFoundation unterstützt Mehrkanalerfassung: bis zu 8 Audiokanäle auf dem iPad Pro und bis zu 2 auf dem iPhone, was Stereotonaufnahmen von externen Mikrofonen über Lightning, USB-C oder Bluetooth ermöglicht. Die Auswahl der Eingangsquelle erfolgt über AVAudioSession.sharedInstance().setPreferredInput, was für Anwendungen, die mit externen Headsets und Bluetooth-Mikrofonen arbeiten, entscheidend ist.
AVFoundation bietet zwei Hauptwege zur Medienwiedergabe: AVPlayer für Video und AVAudioPlayer für Audio. Sehen wir uns ein Beispiel für die Wiedergabe eines Remote-HLS-Streams mit AVPlayer an.
Der Code erstellt einen AVPlayer, lädt einen HLS-Stream von einer URL und startet die Wiedergabe mit reduzierter Lautstärke. AVPlayerItem verwaltet den Lade- und Pufferungsstatus, und die KVO-Überwachung des Status ermöglicht die Fehlerbehandlung.
import AVFoundation
import AVKit
// 1. AVPlayer mit HLS-Stream erstellen
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. Wiedergabe
player.play()
// 3. Player anzeigen
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. Status überwachen
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
Der Code erstellt einen AVPlayer mit einer HLS-URL, setzt die Lautstärke auf 70 % und startet die Wiedergabe. AVPlayerViewController bietet eine integrierte Benutzeroberfläche mit Steuerelementen, AirPlay und Bild-in-Bild-Modus. Der Player-Status wird über KVO überwacht, um Fälle zu behandeln, in denen der HLS-Stream vorübergehend nicht verfügbar ist.
Für die Audiowiedergabe ohne Videooberfläche wird AVAudioPlayer verwendet — ein leichter Player, der kein AVPlayerItem benötigt. AVAudioPlayer unterstützt die Audioformate MP3, AAC, ALAC, FLAC, WAV und AIFF, bietet Methoden play(), pause() und stop() sowie den Delegaten AVAudioPlayerDelegate zur Überwachung des Wiedergabeendes und von Decodierungsfehlern. AVAudioPlayer eignet sich ideal für die Hintergrundmusikwiedergabe, Podcasts und Soundeffekte in Spielen auf iOS und macOS.
Sehen wir uns zwei weitere typische Szenarien für die Arbeit mit AVFoundation an: Audioverarbeitung über AVAudioEngine und Videoexport in ein anderes Format.
AVAudioEngine ermöglicht die Echtzeit-Audioverarbeitung durch Verbinden von Knoten in einem Verarbeitungsgraphen: Eingangsknoten (Mikrofon) → Effekte → Ausgangsknoten (Lautsprecher). Im folgenden Beispiel wird der Stimme Hall hinzugefügt.
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// Hall einrichten
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// Verbindung: Mikrofon -> Hall -> Lautsprecher
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
AVAudioEngine erstellt einen Graphen aus drei Knoten: Eingang (Mikrofon), Effekt (Hall mit Voreinstellung großer Saal) und Ausgang (Lautsprecher). Nach engine.start() wird das Mikrofon-Audio in Echtzeit durch den Effekt verarbeitet und an die Kopfhörer oder den Lautsprecher des Geräts ausgegeben. Die Verarbeitungslatenz beträgt auf allen modernen Apple-Geräten unter 10 ms.
Eine zusätzliche Fähigkeit von AVAudioEngine ist die Klanganalyse über AVAudioUnitEQ und AVAudioUnitMixer. Der Entwickler kann jedem Audiostream einen Equalizer, Kompressor und Begrenzer hinzufügen. Für Musik-Anwendungen bietet AVFoundation AVAudioSequencer zur Wiedergabe von MIDI-Dateien und AVSpeechSynthesizer zur Sprachsynthese. Alle Komponenten arbeiten in einem einzigen Audiographen, was auf Apple-Geräten eine Latenz zwischen Erfassung und Verarbeitung von unter 5 ms ermöglicht.
Bei der Arbeit mit AVFoundation sind die Systemberechtigungen zu beachten: Für den Zugriff auf die Kamera ist NSCameraUsageDescription in der Info.plist erforderlich, für das Mikrofon NSMicrophoneUsageDescription. AVFoundation zeigt beim ersten Zugriffsversuch auf ein Gerät automatisch den Systemberechtigungsdialog an. Die Verweigerung durch den Benutzer wird über AVCaptureDevice.authorizationStatus() behandelt, was eine angemessene Meldung über die Nichtverfügbarkeit der Kamera mit dem Vorschlag, zu den Einstellungen zu gehen, ermöglicht.
AVFoundation unterstützt die Hintergrund-Audiowiedergabe über den Audio Background Mode in den Projekt-Capabilities. Zur Aktivierung fügen Sie einfach den Eintrag audio in UIBackgroundModes Info.plist hinzu und konfigurieren AVAudioSession mit der Kategorie .playback. Video wird standardmäßig nicht im Hintergrund abgespielt, aber Sie können AVPlayer mit dem Bild-in-Bild-Modus verwenden, um die Videowiedergabe in einer minimierten App auf dem iPad fortzusetzen. Das PiP-Modus-Symbol wird über AVPictureInPictureController zusammen mit dem Protokoll-Delegaten konfiguriert.
Häufig gestellte Fragen
iOS 4+ für grundlegende Wiedergabe und Erfassung. iOS 8+ für AVAudioEngine. iOS 17+ für AVAssetWriter im HDR-Modus. Die aktuelle Version des Frameworks wird auf allen iPhone-, iPad- und Mac-Geräten unterstützt.
Ja, AVPlayer unterstützt HLS (HTTP Live Streaming) — das primäre Streaming-Protokoll von Apple. Zum Senden von Medien an den Server verwenden Sie AVAssetWriter mit einem benutzerdefinierten Protokoll über URLSession.
AVFoundation ist ein Low-Level-Framework für die Arbeit mit Medien. AVKit ist eine Schicht über AVFoundation, die fertige UI-Komponenten bereitstellt: AVPlayerViewController, AVPictureInPictureController und AVPipView.
Ja, seit iOS 11 unterstützt AVFoundation FLAC (Free Lossless Audio Codec) für die Wiedergabe. ALAC (Apple Lossless) wird seit iOS 4 unterstützt. Beide Codecs funktionieren über AVAudioPlayer und AVPlayer.
Über RPScreenRecorder aus ReplayKit, das intern AVFoundation verwendet. Ab iOS 9 ist die Bildschirmaufnahme über RPScreenRecorder.shared().startRecording() mit optionalem Mikrofon verfügbar.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch