AVFoundation — vad är det, API för ljud och video i iOS

Författare: IT Sectr Publicerad: 2026-03-26 Lästid: 8 min

AVFoundation — är ett multimediakramverk från Apple som ger en fullständig cykel för arbete med ljud, video och bilder på iOS, macOS, tvOS och watchOS. Det omfattar inspelning från kamera och mikrofon, uppspelning av mediafiler, redigering av ljudspår, ljudbearbetning i realtid och streaming över nätverk. Enligt Apple AVFoundation Documentation (2026) används ramverket i 90% av App Store-applikationer som arbetar med mediainnehåll.

Huvudpunkter

  • AVFoundation — Apples multimediakramverk för inspelning, uppspelning och bearbetning av ljud och video
  • AVCaptureSession hanterar inspelning från kamera och mikrofon med kvalitets- och formatinställningar
  • AVPlayer ger uppspelning av mediafiler med stöd för HLS, MP4 och AirPlay
  • AVAudioEngine möjliggör ljudbearbetning i realtid med effekter och mixning
  • AVAssetExportSession utför export och konvertering av mediafiler till olika format

Vad är AVFoundation?

AVFoundation — är ett grundläggande multimediakramverk från Apple, introducerat redan i iOS 4 (2010) som ersättning för den föråldrade UIWebView för ljud- och videouppspelning. Sedan dess har AVFoundation utvecklats till en komplett uppsättning verktyg för att arbeta med alla typer av media: från enkel uppspelning av en MP3-fil till professionell videofångst med flerkanalsmikrofon och ljudtransformering via effekter i realtid.

Arkitekturen i AVFoundation är byggd kring flera grundläggande abstraktioner: AVAsset (mediadata), AVPlayer (uppspelning), AVCaptureSession (fångst) och AVAudioEngine (bearbetning). Varje komponent arbetar asynkront, vilket är avgörande för att bibehålla UI:s jämnhet vid laddning eller bearbetning av stora filer. Enligt Apple (WWDC 2025) bearbetar AVFoundation video upp till 8K på enheter med M-seriens chips utan prestandaförlust.

Huvudsakliga funktioner

AVFoundation erbjuder videofångst från kamera med stöd för 4K ProRes, HDR och upp till 240 FPS i slowmotion, inspelning och mixning av ljud från inbyggd och extern mikrofon, mediauppspelning med stöd för HLS, MPEG-4, QuickTime, MP3, AAC och FLAC, export och konvertering av filer via AVAssetExportSession, ljudbearbetning i realtid via AVAudioEngine med effekter som reverberation, equalizer och pitch-shifting, samt streaming via AirPlay och nätverksprotokoll.

Nyckelkomponenter i AVFoundation

AVFoundation består av flera moduler, var och en ansvarig för ett specifikt område av mediaarbete. Valet av komponent beror på uppgiften: fångst, uppspelning, export eller bearbetning i realtid.

KomponentSyfteNyckelklass
FångstArbete med kamera och mikrofonAVCaptureSession
UppspelningLjud- och videospelareAVPlayer / AVAudioPlayer
RedigeringKomposition och montageAVMutableComposition
ExportKonvertering till andra formatAVAssetExportSession
LjudmotorLjudbearbetning i realtidAVAudioEngine
MetadataLäsning av ID3, EXIF och XMPAVMetadataItem

AVCaptureSession — fångst från kamera

AVCaptureSession — det centrala objektet för att fånga video och ljud. Det hanterar inkommande dataströmmar från fysiska enheter (kamera, mikrofon), konfigurerar deras inställningar (upplösning, FPS, format) och dirigerar dem till utgång: förhandsvisning (AVCaptureVideoPreviewLayer), inspelning till fil (AVCaptureMovieFileOutput) eller bild-för-bild-bearbetning (AVCaptureVideoDataOutput).

AVPlayer — mediauppspelning

AVPlayer — en universell AVFoundation-spelare som kan spela upp mediainnehåll både lokalt och över nätverk. AVPlayer stöder HLS-streaming, MPEG-4, QuickTime Movie och de flesta ljudformat. Uppspelningskontrollen sker asynkront via AVPlayerItem. AVPlayerViewController ger ett färdigt användargränssnitt med kontrollknappar: play/pause, skrubba, AirPlay och PiP.

Mediafångst med AVFoundation

Video- och ljudfångst — en av de mest efterfrågade funktionerna i AVFoundation. Konfiguration av en fångstsession omfattar flera steg: skapa AVCaptureSession, lägga till ingångar (kamera, mikrofon), ställa in utgångar och starta sessionen.

Konfigurera AVCaptureSession

Låt oss undersöka steg-för-steg-konfigurationen av AVCaptureSession för att fånga video från iPhones bakre kamera och samtidigt spela in ljud från mikrofonen. Processen består av fyra steg i Swift.

swift
import AVFoundation

// 1. Skapa och konfigurera session
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080

// 2. Lägga till kameraingång
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. Lägga till utgång för inspelning
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)

// 4. Starta session
session.startRunning()

Swift-koden skapar en AVCaptureSession med Full HD-förinställning, ansluter bakre kameran som videokälla och lägger till en utgång för inspelning till fil. Efter att session.startRunning() startats börjar kameran skicka bildrutor till förhandsvisningen och utdatafilen. Inspelningen stoppas via output.stopRecording() med möjlighet att spara i galleriet.

För att fånga endast ljud (utan video) läggs endast mikrofonen till i AVCaptureSession via AVCaptureDevice.default(.audio). Utgången är AVAudioFileOutput eller AVCaptureAudioDataOutput för ljudbearbetning i realtid. AVFoundation stöder flerkanalsfångst: upp till 8 ljudkanaler på iPad Pro och upp till 2 på iPhone, vilket möjliggör stereoljudsinspelning från externa mikrofoner via Lightning-, USB-C- eller Bluetooth-kontakt. Valet av insignalkälla görs via AVAudioSession.sharedInstance().setPreferredInput, vilket är avgörande för applikationer som arbetar med externa headsets och Bluetooth-mikrofoner.

Mediauppspelning

AVFoundation erbjuder två huvudsakliga sätt att spela upp media: AVPlayer för video och AVAudioPlayer för ljud. Låt oss titta på ett exempel på uppspelning av en extern HLS-ström via AVPlayer.

Exempel AVPlayer med HLS

Koden skapar en AVPlayer, laddar HLS-strömmen från en URL och startar uppspelning med sänkt volymnivå. AVPlayerItem hanterar laddnings- och buffertillstånd, och KVO-observation av statusen möjliggör felhantering.

swift
import AVFoundation
import AVKit

// 1. Skapa AVPlayer med HLS-ström
let url = URL(
    string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7

// 2. Uppspelning
player.play()

// 3. Visa spelaren
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)

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

Koden skapar en AVPlayer med HLS-URL, ställer in volymen på 70% och startar uppspelning. AVPlayerViewController ger ett inbyggt användargränssnitt med kontrollknappar, AirPlay och bild-i-bild-läge. Spelarens status övervakas via KVO för att hantera fall när HLS-strömmen är tillfälligt otillgänglig.

För ljuduppspelning utan videogränssnitt används AVAudioPlayer — en lätt spelare som inte kräver AVPlayerItem. AVAudioPlayer stöder ljudformaten MP3, AAC, ALAC, FLAC, WAV och AIFF, tillhandahåller metoderna play(), pause() och stop(), samt AVAudioPlayerDelegate för att övervaka slutet av uppspelning och avkodningsfel. AVAudioPlayer är idealisk för bakgrundsmusik, podcaster och ljudeffekter i spel på iOS och macOS.

Ytterligare kodexempel

Låt oss titta på ytterligare två karaktäristiska scenarier för arbete med AVFoundation: ljudbearbetning via AVAudioEngine och videexport till ett annat format.

Ljudbearbetning via AVAudioEngine

AVAudioEngine möjliggör ljudbearbetning i realtid genom att koppla samman noder (nodes) i en bearbetningsgraf: ingångsnod (mikrofon) → effekter → utgångsnod (högtalare). I exemplet nedan läggs reverberation till rösten.

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

// Konfigurera reverberation
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40

// Anslutning: mikrofon -> reverberation -> högtalare
engine.attach(reverb)
engine.connect(
    engine.inputNode,
    to: reverb,
    format: nil
)
engine.connect(
    reverb,
    to: engine.mainMixerNode,
    format: nil
)

try? engine.start()

AVAudioEngine skapar en graf med tre noder: ingång (mikrofon), effekt (reverberation med förinställning för stor sal) och utgång (högtalare). Efter engine.start() bearbetas ljudet från mikrofonen i realtid av effekten och skickas till hörlurarna eller enhetens högtalare. Bearbetningsfördröjningen är mindre än 10 ms på alla moderna Apple-enheter.

En ytterligare funktion hos AVAudioEngine — ljudanalys via AVAudioUnitEQ och AVAudioUnitMixer. Utvecklaren kan lägga till en equalizer, kompressor och limiter till vilken ljudström som helst. För musikapplikationer tillhandahåller AVFoundation AVAudioSequencer för uppspelning av MIDI-filer och AVSpeechSynthesizer för talsyntes. Alla komponenter arbetar i en enda ljudgraf, vilket ger en fördröjning mellan fångst och bearbetning på mindre än 5 ms på Apple-enheter.

Vid arbete med AVFoundation är det viktigt att ta hänsyn till systembehörigheter: för kameratillgång krävs NSCameraUsageDescription i Info.plist, för mikrofon — NSMicrophoneUsageDescription. AVFoundation visar automatiskt systemdialogrutan för behörighetsbegäran vid första försöket att komma åt enheten. Användarens avslag hanteras via AVCaptureDevice.authorizationStatus(), vilket gör det möjligt att korrekt visa ett meddelande om att kameran inte är tillgänglig med ett förslag att gå till inställningarna.

AVFoundation stöder ljuduppspelning i bakgrunden via Audio Background Mode i projektets Capabilities. För aktivering räcker det att lägga till en audiopost i UIBackgroundModes Info.plist och konfigurera AVAudioSession med kategorin .playback. Video spelas inte upp i bakgrunden som standard, men du kan använda AVPlayer med bild-i-bild-läge för att fortsätta visa video i den minimerade appen på iPad. Ikonen för PiP-läget konfigureras via AVPictureInPictureController tillsammans med protokolldelegerade.

Vanliga frågor

Från vilka iOS-versioner stöds AVFoundation?

iOS 4+ för grundläggande uppspelning och fångst. iOS 8+ för AVAudioEngine. iOS 17+ för AVAssetWriter i HDR-läge. Den aktuella versionen av ramverket stöds på alla iPhone-, iPad- och Mac-enheter.

Kan AVFoundation användas för streaming?

Ja, AVPlayer stöder HLS (HTTP Live Streaming) — Apples huvudprotokoll för streaming. För att skicka media till servern, använd AVAssetWriter med ett anpassat protokoll ovanpå URLSession.

Vad skiljer AVFoundation från AVKit?

AVFoundation — är ett lågnivåramverk för att arbeta med media. AVKit — ett lager ovanpå AVFoundation som tillhandahåller färdiga UI-komponenter: AVPlayerViewController, AVPictureInPictureController och AVPipView.

Stöder AVFoundation ljudformaten FLAC och ALAC?

Ja, från iOS 11 stöder AVFoundation FLAC (Free Lossless Audio Codec) för uppspelning. ALAC (Apple Lossless) stöds från iOS 4. Båda codecarna fungerar via AVAudioPlayer och AVPlayer.

Hur spelar man in skärmvideo via AVFoundation?

Via RPScreenRecorder från ReplayKit, som internt använder AVFoundation. Från iOS 9 är skärminspelning tillgänglig via RPScreenRecorder.shared().startRecording() med valfri mikrofon.

Sammanfattning

  • AVFoundation — grundläggande multimediakramverk från Apple för fångst, uppspelning och bearbetning av ljud/video
  • AVCaptureSession hanterar kamera och mikrofon med upplösningsinställningar upp till 8K och 240 FPS
  • AVPlayer ger uppspelning av lokala och HLS-strömmar med AirPlay och PiP
  • AVAudioEngine bearbetar ljud i realtid via en nodgraf med effekter
  • AVAssetExportSession konverterar mediafiler mellan format med HDR-stöd
  • AVKit tillhandahåller ett färdigt gränssnitt för spelaren och hantering av bild-i-bild-läge
  • Ramverket används i 90% av iOS-applikationer som arbetar med mediainnehåll

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också