AVFoundation — co to jest, API audio i wideo w iOS

Autor: IT Sectr Opublikowano: 2026-03-26 Czas czytania: 8 min

AVFoundation — to multimedialny framework Apple, który zapewnia pełny cykl pracy z audio, wideo i obrazami na iOS, macOS, tvOS i watchOS. Obejmuje przechwytywanie z kamery i mikrofonu, odtwarzanie plików multimedialnych, edycję ścieżek audio, przetwarzanie dźwięku w czasie rzeczywistym i strumieniowanie przez sieć. Według Apple AVFoundation Documentation (2026), framework jest używany w 90% aplikacji App Store pracujących z treściami multimedialnymi.

Najważniejsze

  • AVFoundation — multimedialny framework Apple do przechwytywania, odtwarzania i przetwarzania audio i wideo
  • AVCaptureSession zarządza przechwytywaniem z kamery i mikrofonu z ustawieniami jakości i formatu
  • AVPlayer zapewnia odtwarzanie plików multimedialnych z obsługą HLS, MP4 i AirPlay
  • AVAudioEngine umożliwia przetwarzanie audio w czasie rzeczywistym z efektami i miksowaniem
  • AVAssetExportSession wykonuje eksport i konwersję plików multimedialnych do różnych formatów

Czym jest AVFoundation?

AVFoundation — to fundamentalny multimedialny framework Apple, wprowadzony już w iOS 4 (2010) jako zamiennik przestarzałego UIWebView do odtwarzania audio i wideo. Od tego czasu AVFoundation ewoluował w pełnoprawny zestaw narzędzi do pracy z dowolnymi typami multimediów: od prostego odtwarzania pliku MP3 po profesjonalne przechwytywanie wideo z wielokanałowego mikrofonu i transformację dźwięku przez efekty czasu rzeczywistego.

Architektura AVFoundation zbudowana jest wokół kilku podstawowych abstrakcji: AVAsset (dane multimedialne), AVPlayer (odtwarzanie), AVCaptureSession (przechwytywanie) i AVAudioEngine (przetwarzanie). Każdy komponent działa asynchronicznie, co jest krytyczne dla zachowania płynności UI podczas ładowania lub przetwarzania dużych plików. Według Apple (WWDC 2025), AVFoundation przetwarza do 8K wideo na urządzeniach z serią chipów M bez utraty wydajności.

Główne możliwości

AVFoundation zapewnia przechwytywanie wideo z kamery z obsługą 4K ProRes, HDR i do 240 FPS w zwolnionym tempie, nagrywanie i miksowanie audio z wbudowanego i zewnętrznego mikrofonów, odtwarzanie multimediów z obsługą HLS, MPEG-4, QuickTime, MP3, AAC i FLAC, eksport i konwersję plików przez AVAssetExportSession, przetwarzanie dźwięku w czasie rzeczywistym przez AVAudioEngine z efektami pogłosu, korektora i zmiany wysokości dźwięku, a także strumieniowanie przez AirPlay i protokoły sieciowe.

Kluczowe komponenty AVFoundation

AVFoundation składa się z kilku modułów, z których każdy odpowiada za konkretny obszar pracy z multimediami. Wybór komponentu zależy od zadania: przechwytywanie, odtwarzanie, eksport lub przetwarzanie w czasie rzeczywistym.

KomponentPrzeznaczenieKluczowa klasa
PrzechwytywaniePraca z kamerą i mikrofonemAVCaptureSession
OdtwarzanieOdtwarzacz audio i wideoAVPlayer / AVAudioPlayer
EdycjaKompozycja i montażAVMutableComposition
EksportKonwersja do innych formatówAVAssetExportSession
Silnik audioPrzetwarzanie dźwięku w czasie rzeczywistymAVAudioEngine
MetadaneOdczyt ID3, EXIF i XMPAVMetadataItem

AVCaptureSession — przechwytywanie z kamery

AVCaptureSession — centralny obiekt do przechwytywania wideo i audio. Zarządza przychodzącymi strumieniami danych z fizycznych urządzeń (kamera, mikrofon), konfiguruje ich ustawienia (rozdzielczość, FPS, format) i kieruje na wyjście: podgląd (AVCaptureVideoPreviewLayer), zapis do pliku (AVCaptureMovieFileOutput) lub przetwarzanie klatka po klatce (AVCaptureVideoDataOutput).

AVPlayer — odtwarzanie multimediów

AVPlayer — uniwersalny odtwarzacz AVFoundation, zdolny do odtwarzania treści multimedialnych zarówno lokalnie, jak i z sieci. AVPlayer obsługuje strumieniowanie HLS, MPEG-4, QuickTime Movie i większość formatów audio. Sterowanie odtwarzaniem odbywa się asynchronicznie przez AVPlayerItem. AVPlayerViewController zapewnia gotowy interfejs użytkownika z elementami sterowania: play/pause, przewijanie, AirPlay i PiP.

Przechwytywanie multimediów za pomocą AVFoundation

Przechwytywanie wideo i audio — jedna z najczęściej używanych możliwości AVFoundation. Konfiguracja sesji przechwytywania obejmuje kilka kroków: utworzenie AVCaptureSession, dodanie wejść (kamera, mikrofon), ustawienie wyjść i uruchomienie sesji.

Konfiguracja AVCaptureSession

Rozważmy konfigurację krok po kroku AVCaptureSession do przechwytywania wideo z tylnej kamery iPhone i jednoczesnego nagrywania dźwięku z mikrofonu. Proces składa się z czterech kroków w Swift.

swift
import AVFoundation

// 1. Tworzenie i konfiguracja sesji
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080

// 2. Dodawanie wejścia kamery
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. Dodawanie wyjścia do nagrywania
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)

// 4. Uruchomienie sesji
session.startRunning()

Kod Swift tworzy AVCaptureSession z presetem Full HD, podłącza tylną kamerę jako źródło wideo i dodaje wyjście do zapisu w pliku. Po uruchomieniu session.startRunning() kamera zaczyna przesyłać klatki na podgląd i do pliku wyjściowego. Zatrzymanie nagrywania wykonuje się przez output.stopRecording() z możliwością zapisu do galerii.

Do przechwytywania tylko audio (bez wideo) w AVCaptureSession dodaje się tylko mikrofon przez AVCaptureDevice.default(.audio). Wyjściem jest AVAudioFileOutput lub AVCaptureAudioDataOutput do przetwarzania dźwięku w czasie rzeczywistym. AVFoundation obsługuje przechwytywanie wielokanałowe: do 8 kanałów audio na iPad Pro i do 2 na iPhone, co pozwala nagrywać dźwięk stereo z zewnętrznych mikrofonów przez złącze Lightning, USB-C lub Bluetooth. Wybór źródła sygnału wejściowego wykonuje się przez AVAudioSession.sharedInstance().setPreferredInput, co jest kluczowe dla aplikacji pracujących z zewnętrznymi słuchawkami i mikrofonami Bluetooth.

Odtwarzanie multimediów

AVFoundation zapewnia dwa główne sposoby odtwarzania multimediów: AVPlayer dla wideo i AVAudioPlayer dla audio. Rozważmy przykład odtwarzania zdalnego strumienia HLS przez AVPlayer.

Przykład AVPlayer z HLS

Kod tworzy AVPlayer, ładuje strumień HLS po URL i uruchamia odtwarzanie z obniżonym poziomem głośności. AVPlayerItem zarządza stanem ładowania i buforowania, a obserwacja KVO statusu pozwala obsługiwać błędy.

swift
import AVFoundation
import AVKit

// 1. Tworzenie AVPlayer z strumieniem HLS
let url = URL(
    string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7

// 2. Odtwarzanie
player.play()

// 3. Wyświetlanie odtwarzacza
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)

// 4. Monitorowanie statusu
player.currentItem?.addObserver(
    self,
    forKeyPath: "status",
    options: .new,
    context: nil
)

Kod tworzy AVPlayer z URL HLS, ustawia głośność na 70% i uruchamia odtwarzanie. AVPlayerViewController zapewnia wbudowany interfejs z elementami sterowania, AirPlay i trybem obraz w obrazie. Status odtwarzacza jest śledzony przez KVO w celu obsługi przypadków, gdy strumień HLS jest tymczasowo niedostępny.

Do odtwarzania audio bez interfejsu wideo używa się AVAudioPlayer — lekkiego odtwarzacza, który nie wymaga AVPlayerItem. AVAudioPlayer obsługuje formaty audio MP3, AAC, ALAC, FLAC, WAV i AIFF, udostępnia metody play(), pause() i stop(), a także delegata AVAudioPlayerDelegate do śledzenia zakończenia odtwarzania i błędów dekodowania. AVAudioPlayer jest idealny do odtwarzania muzyki w tle, podcastów i efektów dźwiękowych w grach na iOS i macOS.

Dodatkowe przykłady kodu

Rozważmy jeszcze dwa charakterystyczne scenariusze pracy z AVFoundation: przetwarzanie audio przez AVAudioEngine i eksport wideo do innego formatu.

Przetwarzanie audio przez AVAudioEngine

AVAudioEngine umożliwia przetwarzanie audio w czasie rzeczywistym, łącząc węzły (nodes) w graf przetwarzania: węzeł wejściowy (mikrofon) → efekty → węzeł wyjściowy (głośnik). W poniższym przykładzie dodawany jest pogłos do głosu.

swift
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()

// Konfiguracja pogłosu
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40

// Podłączenie: mikrofon -> pogłos -> głośnik
engine.attach(reverb)
engine.connect(
    engine.inputNode,
    to: reverb,
    format: nil
)
engine.connect(
    reverb,
    to: engine.mainMixerNode,
    format: nil
)

try? engine.start()

AVAudioEngine tworzy graf z trzech węzłów: wejście (mikrofon), efekt (pogłos z presetem dużej sali) i wyjście (głośnik). Po engine.start() dźwięk z mikrofonu jest przetwarzany przez efekt w czasie rzeczywistym i wyprowadzany na słuchawki lub głośnik urządzenia. Opóźnienie przetwarzania wynosi mniej niż 10 ms na wszystkich nowoczesnych urządzeniach Apple.

Dodatkowa możliwość AVAudioEngine — analiza dźwięku przez AVAudioUnitEQ i AVAudioUnitMixer. Deweloper może dodać korektor, kompresor i limiter do dowolnego strumienia audio. Dla aplikacji muzycznych AVFoundation udostępnia AVAudioSequencer do odtwarzania plików MIDI i AVSpeechSynthesizer do syntezy mowy. Wszystkie komponenty działają w jednym grafie audio, co daje opóźnienie między przechwytywaniem a przetwarzaniem poniżej 5 ms na urządzeniach Apple.

Podczas pracy z AVFoundation ważne jest uwzględnienie uprawnień systemowych: do dostępu do kamery wymagane jest NSCameraUsageDescription w Info.plist, do mikrofonu — NSMicrophoneUsageDescription. AVFoundation automatycznie wyświetla systemowe okno dialogowe prośby o pozwolenie przy pierwszej próbie dostępu do urządzenia. Odmowa użytkownika jest obsługiwana przez AVCaptureDevice.authorizationStatus(), co pozwala poprawnie wyświetlić komunikat o niedostępności kamery z propozycją przejścia do ustawień.

AVFoundation obsługuje odtwarzanie audio w tle przez Audio Background Mode w Capabilities projektu. Do aktywacji wystarczy dodać wpis audio w UIBackgroundModes Info.plist i skonfigurować AVAudioSession z kategorią .playback. Wideo w tle nie jest odtwarzane domyślnie, ale można użyć AVPlayer z trybem pictureInPicture do kontynuowania wyświetlania wideo w zminimalizowanej aplikacji na iPad. Ikona trybu PiP jest konfigurowana przez AVPictureInPictureController wraz z delegatem protokołu.

Często zadawane pytania

Od jakich wersji iOS obsługiwany jest AVFoundation?

iOS 4+ do podstawowego odtwarzania i przechwytywania. iOS 8+ dla AVAudioEngine. iOS 17+ dla AVAssetWriter w trybie HDR. Aktualna wersja frameworka jest obsługiwana na wszystkich urządzeniach iPhone, iPad i Mac.

Czy można używać AVFoundation do strumieniowania?

Tak, AVPlayer obsługuje HLS (HTTP Live Streaming) — główny protokół Apple do strumieniowania. Do wysyłania multimediów na serwer użyj AVAssetWriter z własnym protokołem na bazie URLSession.

Czym AVFoundation różni się od AVKit?

AVFoundation — to niskopoziomowy framework do pracy z multimediami. AVKit — nakładka na AVFoundation, udostępniająca gotowe komponenty UI: AVPlayerViewController, AVPictureInPictureController i AVPipView.

Czy AVFoundation obsługuje formaty audio FLAC i ALAC?

Tak, od iOS 11 AVFoundation obsługuje FLAC (Free Lossless Audio Codec) do odtwarzania. ALAC (Apple Lossless) jest obsługiwany od iOS 4. Oba kodeki działają przez AVAudioPlayer i AVPlayer.

Jak nagrać wideo z ekranu przez AVFoundation?

Przez RPScreenRecorder z ReplayKit, który wewnętrznie używa AVFoundation. Od iOS 9 nagrywanie ekranu jest dostępne przez RPScreenRecorder.shared().startRecording() z opcjonalnym mikrofonem.

Podsumowanie

  • AVFoundation — fundamentalny multimedialny framework Apple do przechwytywania, odtwarzania i przetwarzania audio/wideo
  • AVCaptureSession zarządza kamerą i mikrofonem z ustawieniami rozdzielczości do 8K i 240 FPS
  • AVPlayer zapewnia odtwarzanie lokalnych strumieni i HLS z AirPlay i PiP
  • AVAudioEngine przetwarza audio w czasie rzeczywistym przez graf węzłów z efektami
  • AVAssetExportSession konwertuje pliki multimedialne między formatami z obsługą HDR
  • AVKit zapewnia gotowy interfejs dla odtwarzacza i zarządzanie trybem obraz w obrazie
  • Framework jest używany w 90% aplikacji iOS pracujących z treściami multimedialnymi

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również