AVFoundation — 개념, iOS 오디오 및 비디오 API

저자: IT Sectr 게시일: 2026-03-26 읽는 시간: 8 분

AVFoundation은 iOS, macOS, tvOS 및 watchOS에서 오디오, 비디오 및 이미지 작업을 위한 완전한 워크플로를 제공하는 Apple의 멀티미디어 프레임워크입니다. 카메라 및 마이크 캡처, 미디어 파일 재생, 오디오 트랙 편집, 실시간 사운드 처리 및 네트워크 스트리밍을 포괄합니다. Apple AVFoundation Documentation (2026)에 따르면, 이 프레임워크는 미디어 콘텐츠를 다루는 App Store 애플리케이션의 90%에서 사용됩니다.

핵심 사항

  • AVFoundation — 오디오 및 비디오 캡처, 재생 및 처리를 위한 Apple의 멀티미디어 프레임워크
  • AVCaptureSession은 품질 및 형식 설정으로 카메라 및 마이크 캡처를 관리
  • AVPlayer는 HLS, MP4 및 AirPlay를 지원하는 미디어 파일 재생 제공
  • AVAudioEngine은 효과 및 믹싱으로 실시간 오디오 처리 지원
  • AVAssetExportSession은 미디어 파일을 다양한 형식으로 내보내고 변환

AVFoundation이란?

AVFoundation은 오디오 및 비디오 재생을 위해 더 이상 사용되지 않는 UIWebView를 대체하기 위해 iOS 4(2010)에서 도입된 Apple의 기본 멀티미디어 프레임워크입니다. 그 이후로 AVFoundation은 간단한 MP3 파일 재생부터 다채널 마이크를 사용한 전문 비디오 캡처 및 실시간 효과를 통한 사운드 변환에 이르기까지 모든 유형의 미디어 작업을 위한 본격적인 도구 세트로 발전했습니다.

AVFoundation의 아키텍처는 AVAsset(미디어 데이터), AVPlayer(재생), AVCaptureSession(캡처), AVAudioEngine(처리)의 몇 가지 기본 추상화를 기반으로 구축되었습니다. 각 구성 요소는 비동기적으로 작동하여 대용량 파일을 로드하거나 처리하는 동안 UI의 부드러움을 유지하는 데 중요합니다. Apple(WWDC 2025)에 따르면 AVFoundation은 M 시리즈 칩이 장착된 기기에서 성능 저하 없이 최대 8K 비디오를 처리합니다.

주요 기능

AVFoundation은 4K ProRes, HDR 및 슬로우 모션에서 최대 240FPS를 지원하는 카메라 비디오 캡처, 내장 및 외장 마이크의 오디오 녹음 및 믹싱, HLS, MPEG-4, QuickTime, MP3, AAC 및 FLAC을 지원하는 미디어 재생, AVAssetExportSession을 통한 파일 내보내기 및 변환, 리버브, 이퀄라이저 및 피치 시프팅 효과를 사용한 AVAudioEngine을 통한 실시간 오디오 처리, AirPlay 및 네트워크 프로토콜을 통한 스트리밍을 제공합니다.

AVFoundation의 주요 구성 요소

AVFoundation은 여러 모듈로 구성되며, 각 모듈은 미디어 작업의 특정 영역을 담당합니다. 구성 요소 선택은 작업(캡처, 재생, 내보내기 또는 실시간 처리)에 따라 달라집니다.

구성 요소목적주요 클래스
캡처카메라 및 마이크 작업AVCaptureSession
재생오디오 및 비디오 플레이어AVPlayer / AVAudioPlayer
편집합성 및 편집AVMutableComposition
내보내기다른 형식으로 변환AVAssetExportSession
오디오 엔진실시간 사운드 처리AVAudioEngine
메타데이터ID3, EXIF 및 XMP 읽기AVMetadataItem

AVCaptureSession — 카메라 캡처

AVCaptureSession은 비디오 및 오디오 캡처를 위한 중앙 객체입니다. 물리적 장치(카메라, 마이크)에서 들어오는 데이터 스트림을 관리하고, 설정(해상도, FPS, 형식)을 구성하며, 출력(미리보기(AVCaptureVideoPreviewLayer), 파일 녹화(AVCaptureMovieFileOutput) 또는 프레임별 처리(AVCaptureVideoDataOutput))으로 전달합니다.

AVPlayer — 미디어 재생

AVPlayer는 로컬 및 네트워크 모두에서 미디어 콘텐츠를 재생할 수 있는 범용 AVFoundation 플레이어입니다. AVPlayer는 HLS 스트리밍, MPEG-4, QuickTime Movie 및 대부분의 오디오 형식을 지원합니다. 재생 제어는 AVPlayerItem을 통해 비동기적으로 처리됩니다. AVPlayerViewController는 재생/일시정지, 스크러빙, AirPlay 및 PiP 컨트롤을 갖춘 기성 UI를 제공합니다.

AVFoundation으로 미디어 캡처

비디오 및 오디오 캡처는 AVFoundation의 가장 수요가 많은 기능 중 하나입니다. 캡처 세션 설정에는 AVCaptureSession 생성, 입력(카메라, 마이크) 추가, 출력 구성 및 세션 시작의 여러 단계가 포함됩니다.

AVCaptureSession 설정

iPhone 후면 카메라에서 비디오를 캡처하고 동시에 마이크에서 사운드를 녹음하기 위한 AVCaptureSession의 단계별 설정을 살펴보겠습니다. 프로세스는 Swift의 4단계로 구성됩니다.

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 코드는 Full HD 프리셋으로 AVCaptureSession을 생성하고, 후면 카메라를 비디오 소스로 연결하며, 파일 녹화를 위한 출력을 추가합니다. session.startRunning() 후에 카메라는 미리보기 및 출력 파일에 프레임을 전송하기 시작합니다. 녹화는 output.stopRecording()을 통해 중지되며 갤러리에 저장하는 옵션이 있습니다.

오디오 전용 캡처(비디오 없음)의 경우 AVCaptureDevice.default(.audio)를 통해 마이크만 AVCaptureSession에 추가됩니다. 출력은 실시간 사운드 처리를 위한 AVAudioFileOutput 또는 AVCaptureAudioDataOutput입니다. AVFoundation은 다중 채널 캡처를 지원합니다: iPad Pro에서 최대 8개 오디오 채널, iPhone에서 최대 2개 채널로 Lightning, USB-C 또는 Bluetooth를 통해 외부 마이크의 스테레오 녹음이 가능합니다. 입력 소스 선택은 AVAudioSession.sharedInstance().setPreferredInput을 통해 이루어지며, 이는 외부 헤드셋 및 Bluetooth 마이크로 작업하는 애플리케이션에 중요합니다.

미디어 재생

AVFoundation은 미디어 재생을 위한 두 가지 주요 방법을 제공합니다: 비디오용 AVPlayer와 오디오용 AVAudioPlayer입니다. AVPlayer를 사용하여 원격 HLS 스트림을 재생하는 예를 살펴보겠습니다.

HLS를 사용한 AVPlayer 예제

코드는 AVPlayer를 생성하고, URL에서 HLS 스트림을 로드하며, 낮은 볼륨 수준으로 재생을 시작합니다. AVPlayerItem은 로딩 및 버퍼링 상태를 관리하고, 상태에 대한 KVO 관찰을 통해 오류를 처리할 수 있습니다.

swift
import AVFoundation
import AVKit

// 1. HLS 스트림으로 AVPlayer 생성
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
)

코드는 HLS URL로 AVPlayer를 생성하고, 볼륨을 70%로 설정하며 재생을 시작합니다. AVPlayerViewController는 컨트롤, AirPlay 및 PIP(화면 속 화면) 모드를 갖춘 내장 UI를 제공합니다. 플레이어 상태는 KVO를 통해 모니터링되어 HLS 스트림을 일시적으로 사용할 수 없는 경우를 처리합니다.

비디오 인터페이스 없이 오디오 재생을 위해 AVAudioPlayer가 사용됩니다 — AVPlayerItem이 필요하지 않은 경량 플레이어입니다. AVAudioPlayer는 MP3, AAC, ALAC, FLAC, WAV 및 AIFF 오디오 형식을 지원하고, play(), pause() 및 stop() 메서드와 재생 완료 및 디코딩 오류 추적을 위한 AVAudioPlayerDelegate를 제공합니다. AVAudioPlayer는 iOS 및 macOS에서 백그라운드 음악 재생, 팟캐스트 및 게임의 사운드 효과에 이상적입니다.

추가 코드 예제

AVFoundation으로 작업하는 두 가지 더 일반적인 시나리오를 살펴보겠습니다: AVAudioEngine을 통한 오디오 처리 및 다른 형식으로의 비디오 내보내기입니다.

AVAudioEngine을 통한 오디오 처리

AVAudioEngine은 처리 그래프에서 노드를 연결하여 실시간 오디오 처리를 가능하게 합니다: 입력 노드(마이크) → 효과 → 출력 노드(스피커). 아래 예제에서는 음성에 리버브를 추가합니다.

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() 후에 마이크의 오디오는 실시간으로 효과에 의해 처리되어 기기의 헤드폰 또는 스피커로 출력됩니다. 모든 최신 Apple 기기에서 처리 지연 시간은 10ms 미만입니다.

AVAudioEngine의 추가 기능은 AVAudioUnitEQ 및 AVAudioUnitMixer를 통한 사운드 분석입니다. 개발자는 모든 오디오 스트림에 이퀄라이저, 압축기 및 리미터를 추가할 수 있습니다. 음악 애플리케이션을 위해 AVFoundation은 MIDI 파일 재생용 AVAudioSequencer와 음성 합성용 AVSpeechSynthesizer를 제공합니다. 모든 구성 요소는 단일 오디오 그래프에서 작동하여 Apple 기기에서 캡처와 처리 사이에 5ms 미만의 지연 시간을 제공합니다.

AVFoundation으로 작업할 때 시스템 권한을 고려하는 것이 중요합니다: 카메라 액세스에는 Info.plist의 NSCameraUsageDescription이 필요하고, 마이크에는 NSMicrophoneUsageDescription이 필요합니다. AVFoundation은 기기에 처음 액세스하려고 할 때 자동으로 시스템 권한 대화상자를 표시합니다. 사용자 거부는 AVCaptureDevice.authorizationStatus()를 통해 처리되어 설정으로 이동하라는 제안과 함께 카메라를 사용할 수 없다는 적절한 메시지를 표시할 수 있습니다.

AVFoundation은 프로젝트 Capabilities의 Audio Background Mode를 통해 백그라운드 오디오 재생을 지원합니다. 활성화하려면 UIBackgroundModes Info.plist에 audio 항목을 추가하고 AVAudioSession을 .playback 카테고리로 구성하기만 하면 됩니다. 비디오는 기본적으로 백그라운드에서 재생되지 않지만, iPad에서 최소화된 앱에서 비디오 재생을 계속하기 위해 PIP 모드와 함께 AVPlayer를 사용할 수 있습니다. PiP 모드 아이콘은 프로토콜 델리게이트와 함께 AVPictureInPictureController를 통해 구성됩니다.

자주 묻는 질문

AVFoundation은 어떤 iOS 버전부터 지원되나요?

iOS 4+ 기본 재생 및 캡처용. iOS 8+ AVAudioEngine용. iOS 17+ HDR 모드의 AVAssetWriter용. 프레임워크의 현재 버전은 모든 iPhone, iPad 및 Mac 기기에서 지원됩니다.

AVFoundation을 스트리밍에 사용할 수 있나요?

, AVPlayer는 Apple의 기본 스트리밍 프로토콜인 HLS(HTTP Live Streaming)를 지원합니다. 서버로 미디어를 보내려면 URLSession 위에 사용자 정의 프로토콜과 함께 AVAssetWriter를 사용하세요.

AVFoundation과 AVKit의 차이점은 무엇인가요?

AVFoundation은 미디어 작업을 위한 저수준 프레임워크입니다. AVKit은 AVFoundation 위의 레이어로 AVPlayerViewController, AVPictureInPictureController 및 AVPipView와 같은 기성 UI 구성 요소를 제공합니다.

AVFoundation은 FLAC 및 ALAC 오디오 형식을 지원하나요?

, iOS 11부터 AVFoundation은 재생용 FLAC(Free Lossless Audio Codec)을 지원합니다. ALAC(Apple Lossless)은 iOS 4부터 지원됩니다. 두 코덱 모두 AVAudioPlayer 및 AVPlayer를 통해 작동합니다.

AVFoundation으로 화면 비디오를 녹화하려면 어떻게 하나요?

ReplayKit의 RPScreenRecorder를 통해 내부적으로 AVFoundation을 사용합니다. iOS 9부터 선택적 마이크와 함께 RPScreenRecorder.shared().startRecording()을 통해 화면 녹화를 사용할 수 있습니다.

요약

  • AVFoundation — 오디오/비디오 캡처, 재생 및 처리를 위한 Apple의 기본 멀티미디어 프레임워크
  • AVCaptureSession은 최대 8K, 240FPS의 해상도 설정으로 카메라 및 마이크 관리
  • AVPlayer는 AirPlay 및 PiP로 로컬 및 HLS 스트림 재생 제공
  • AVAudioEngine은 효과가 있는 노드 그래프를 통해 실시간 오디오 처리
  • AVAssetExportSession은 HDR 지원으로 미디어 파일 형식 간 변환
  • AVKit은 플레이어 및 PIP 모드 관리를 위한 기성 UI 제공
  • 이 프레임워크는 미디어 콘텐츠를 다루는 90%의 iOS 애플리케이션에서 사용

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기