AVFoundation — що це таке, API аудіо та відео в iOS

Автор: IT Sectr Опубліковано: 2026-03-26 Час читання: 8 хв

AVFoundation — це мультимедійний фреймворк Apple, який забезпечує повний цикл роботи з аудіо, відео та зображеннями на iOS, macOS, tvOS та watchOS. Він охоплює захоплення з камери та мікрофона, відтворення медіафайлів, редагування аудіодоріжок, обробку звуку в реальному часі та потокове передавання через мережу. Згідно з Apple AVFoundation Documentation (2026), фреймворк використовується в 90% додатків App Store, що працюють із медіаконтентом.

Головне

  • AVFoundation — мультимедійний фреймворк Apple для захоплення, відтворення та обробки аудіо та відео
  • AVCaptureSession керує захопленням з камери та мікрофона з налаштуванням якості та формату
  • AVPlayer забезпечує відтворення медіафайлів з підтримкою HLS, MP4 та AirPlay
  • AVAudioEngine дозволяє обробляти аудіо в реальному часі з ефектами та мікшуванням
  • AVAssetExportSession виконує експорт та конвертацію медіафайлів у різні формати

Що таке AVFoundation?

AVFoundation — це фундаментальний мультимедійний фреймворк Apple, представлений ще в iOS 4 (2010) як заміна застарілому UIWebView для відтворення аудіо та відео. З того часу AVFoundation еволюціонував у повноцінний набір інструментів для роботи з будь-якими типами медіа: від простого відтворення MP3-файлу до професійного захоплення відео з багатоканального мікрофона та трансформації звуку через ефекти реального часу.

Архітектура AVFoundation побудована навколо кількох базових абстракцій: AVAsset (медіадані), AVPlayer (відтворення), AVCaptureSession (захоплення) та AVAudioEngine (обробка). Кожен компонент працює асинхронно, що критично важливо для збереження плавності інтерфейсу під час завантаження або обробки великих файлів. За даними Apple (WWDC 2025), AVFoundation обробляє до 8K-відео на пристроях з M-серією чіпів без втрати продуктивності.

Основні можливості

AVFoundation забезпечує захоплення відео з камери з підтримкою 4K ProRes, HDR та до 240 FPS у сповільненій зйомці, запис та мікшування аудіо з вбудованого та зовнішнього мікрофонів, відтворення медіа з підтримкою HLS, MPEG-4, QuickTime, MP3, AAC та FLAC, експорт та конвертацію файлів через AVAssetExportSession, обробку звуку в реальному часі через AVAudioEngine з ефектами реверберації, еквалайзера та зміни висоти тону, а також потокове передавання через AirPlay та мережеві протоколи.

Ключові компоненти AVFoundation

AVFoundation складається з кількох модулів, кожен з яких відповідає за конкретну область роботи з медіа. Вибір компонента залежить від завдання: захоплення, відтворення, експорт або обробка в реальному часі.

КомпонентПризначенняКлючовий клас
ЗахопленняРобота з камерою та мікрофономAVCaptureSession
ВідтворенняАудіо та відео плеєрAVPlayer / AVAudioPlayer
РедагуванняКомпозиція та монтажAVMutableComposition
ЕкспортКонвертація в інші форматиAVAssetExportSession
Аудіо-двигунОбробка звуку в реальному часіAVAudioEngine
МетаданіЧитання ID3, EXIF та XMPAVMetadataItem

AVCaptureSession — захоплення з камери

AVCaptureSession — центральний об'єкт для захоплення відео та аудіо. Він керує вхідними потоками даних від фізичних пристроїв (камера, мікрофон), налаштовує їхню конфігурацію (роздільна здатність, FPS, формат) та спрямовує на вихід: попередній перегляд (AVCaptureVideoPreviewLayer), запис у файл (AVCaptureMovieFileOutput) або покадрова обробка (AVCaptureVideoDataOutput).

AVPlayer — відтворення медіа

AVPlayer — універсальний програвач AVFoundation, здатний відтворювати медіаконтент як локально, так і з мережі. AVPlayer підтримує HLS-потокове передавання, MPEG-4, QuickTime Movie та більшість аудіоформатів. Керування відтворенням здійснюється асинхронно через AVPlayerItem. AVPlayerViewController надає готовий інтерфейс з елементами керування: відтворення/пауза, перемотування, AirPlay та PiP.

Захоплення медіа за допомогою AVFoundation

Захоплення відео та аудіо — одна з найбільш затребуваних можливостей AVFoundation. Налаштування сесії захоплення включає кілька кроків: створення AVCaptureSession, додавання входів (камера, мікрофон), налаштування виходів та запуск сесії.

Налаштування AVCaptureSession

Розглянемо покрокове налаштування AVCaptureSession для захоплення відео з задньої камери iPhone та одночасного запису звуку з мікрофона. Процес складається з чотирьох кроків на Swift.

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-код створює AVCaptureSession з пресетом Full HD, підключає задню камеру як джерело відео та додає вихід для запису у файл. Після session.startRunning() камера починає передавати кадри на попередній перегляд та у вихідний файл. Зупинка запису виконується через output.stopRecording() з можливістю збереження в галерею.

Для захоплення тільки аудіо (без відео) до AVCaptureSession додається лише мікрофон через AVCaptureDevice.default(.audio). Виходом служить AVAudioFileOutput або AVCaptureAudioDataOutput для обробки звуку в реальному часі. AVFoundation підтримує багатоканальне захоплення: до 8 аудіоканалів на iPad Pro та до 2 на iPhone, що дозволяє записувати стереозвук із зовнішніх мікрофонів через роз'єм Lightning, USB-C або Bluetooth. Вибір джерела вхідного сигналу виконується через AVAudioSession.sharedInstance().setPreferredInput, що критично для додатків, які працюють із зовнішніми гарнітурами та Bluetooth-мікрофонами.

Відтворення медіа

AVFoundation надає два основних способи відтворення медіа: AVPlayer для відео та AVAudioPlayer для аудіо. Розглянемо приклад відтворення віддаленого HLS-потоку через AVPlayer.

Приклад AVPlayer з HLS

Код створює AVPlayer, завантажує HLS-потік за URL та запускає відтворення зі зниженим рівнем гучності. AVPlayerItem керує станом завантаження та буферизації, а KVO-спостереження за статусом дозволяє обробляти помилки.

swift
import AVFoundation
import AVKit

// 1. Створення AVPlayer з HLS-потоком
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
)

Код створює AVPlayer з HLS URL, встановлює гучність на 70% та запускає відтворення. AVPlayerViewController надає вбудований інтерфейс з елементами керування, AirPlay та режимом «картинка в картинці». Статус плеєра відстежується через KVO для обробки випадків, коли HLS-потік тимчасово недоступний.

Для відтворення аудіо без відеоінтерфейсу використовується AVAudioPlayer — легкий програвач, що не потребує AVPlayerItem. AVAudioPlayer підтримує аудіоформати MP3, AAC, ALAC, FLAC, WAV та AIFF, надає методи play(), pause() та stop(), а також делегат AVAudioPlayerDelegate для відстеження завершення відтворення та помилок декодування. AVAudioPlayer ідеальний для фонового відтворення музики, подкастів та звукових ефектів в іграх на iOS та macOS.

Додаткові приклади коду

Розглянемо ще два характерних сценарії роботи з AVFoundation: обробка аудіо через AVAudioEngine та експорт відео в інший формат.

Обробка аудіо через AVAudioEngine

AVAudioEngine дозволяє обробляти аудіо в реальному часі, з'єднуючи вузли (nodes) у граф обробки: вхідний вузол (мікрофон) → ефекти → вихідний вузол (динамік). У прикладі нижче додається реверберація до голосу.

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() звук з мікрофона обробляється ефектом у реальному часі та виводиться на навушники або динамік пристрою. Затримка обробки становить менше 10 мс на всіх сучасних пристроях Apple.

Додаткова можливість AVAudioEngine — аналіз звуку через AVAudioUnitEQ та AVAudioUnitMixer. Розробник може додати еквалайзер, компресор та лімітер до будь-якого аудіопотоку. Для музичних додатків AVFoundation надає AVAudioSequencer для відтворення MIDI-файлів та AVSpeechSynthesizer для синтезу мовлення. Всі компоненти працюють в єдиному аудіографі, що дає затримку між захопленням та обробкою менше 5 мс на пристроях Apple.

При роботі з AVFoundation важливо враховувати системні дозволи: для доступу до камери потрібен NSCameraUsageDescription в Info.plist, для мікрофона — NSMicrophoneUsageDescription. AVFoundation автоматично показує системний діалог запиту дозволу при першій спробі доступу до пристрою. Відмова користувача обробляється через AVCaptureDevice.authorizationStatus(), що дозволяє коректно показати повідомлення про недоступність камери з пропозицією перейти до налаштувань.

AVFoundation підтримує фонове відтворення аудіо через Audio Background Mode в Capabilities проекту. Для активації достатньо додати запис audio в UIBackgroundModes Info.plist та налаштувати AVAudioSession з категорією .playback. Відео у фоновому режимі не відтворюється за замовчуванням, але можна використовувати AVPlayer з режимом pictureInPicture для продовження показу відео в згорнутому додатку на iPad. Піктограма режиму PiP налаштовується через AVPictureInPictureController разом із делегатом протоколу.

Поширені запитання

З яких версій iOS підтримується AVFoundation?

iOS 4+ для базового відтворення та захоплення. iOS 8+ для AVAudioEngine. iOS 17+ для AVAssetWriter в HDR-режимі. Актуальна версія фреймворку підтримується на всіх пристроях iPhone, iPad та Mac.

Чи можна використовувати AVFoundation для потокового передавання?

Так, AVPlayer підтримує HLS (HTTP Live Streaming) — основний протокол Apple для потокового передавання. Для відправки медіа на сервер використовуйте AVAssetWriter з користувацьким протоколом поверх URLSession.

Чим AVFoundation відрізняється від AVKit?

AVFoundation — це низькорівневий фреймворк для роботи з медіа. AVKit — надбудова над AVFoundation, що надає готові компоненти інтерфейсу: AVPlayerViewController, AVPictureInPictureController та AVPipView.

Чи підтримує AVFoundation аудіоформати FLAC та ALAC?

Так, з iOS 11 AVFoundation підтримує FLAC (Free Lossless Audio Codec) для відтворення. ALAC (Apple Lossless) підтримується з iOS 4. Обидва кодеки працюють через AVAudioPlayer та AVPlayer.

Як записати відео з екрана через AVFoundation?

Через RPScreenRecorder з ReplayKit, який використовує AVFoundation всередині. Починаючи з iOS 9, запис екрана доступний через RPScreenRecorder.shared().startRecording() з опціональним мікрофоном.

Підсумки

  • AVFoundation — фундаментальний мультимедійний фреймворк Apple для захоплення, відтворення та обробки аудіо/відео
  • AVCaptureSession керує камерою та мікрофоном з налаштуванням роздільної здатності до 8K та 240 FPS
  • AVPlayer забезпечує відтворення локальних та HLS-потоків з AirPlay та PiP
  • AVAudioEngine обробляє аудіо в реальному часі через граф вузлів з ефектами
  • AVAssetExportSession конвертує медіафайли між форматами з підтримкою HDR
  • AVKit надає готовий інтерфейс для плеєра та керування режимом «картинка в картинці»
  • Фреймворк використовується в 90% iOS-додатків, що працюють із медіаконтентом

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також