AVFoundation — це мультимедійний фреймворк Apple, який забезпечує повний цикл роботи з аудіо, відео та зображеннями на iOS, macOS, tvOS та watchOS. Він охоплює захоплення з камери та мікрофона, відтворення медіафайлів, редагування аудіодоріжок, обробку звуку в реальному часі та потокове передавання через мережу. Згідно з Apple AVFoundation Documentation (2026), фреймворк використовується в 90% додатків App Store, що працюють із медіаконтентом.
Головне
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 складається з кількох модулів, кожен з яких відповідає за конкретну область роботи з медіа. Вибір компонента залежить від завдання: захоплення, відтворення, експорт або обробка в реальному часі.
| Компонент | Призначення | Ключовий клас |
|---|---|---|
| Захоплення | Робота з камерою та мікрофоном | AVCaptureSession |
| Відтворення | Аудіо та відео плеєр | AVPlayer / AVAudioPlayer |
| Редагування | Композиція та монтаж | AVMutableComposition |
| Експорт | Конвертація в інші формати | AVAssetExportSession |
| Аудіо-двигун | Обробка звуку в реальному часі | AVAudioEngine |
| Метадані | Читання ID3, EXIF та XMP | AVMetadataItem |
AVCaptureSession — центральний об'єкт для захоплення відео та аудіо. Він керує вхідними потоками даних від фізичних пристроїв (камера, мікрофон), налаштовує їхню конфігурацію (роздільна здатність, FPS, формат) та спрямовує на вихід: попередній перегляд (AVCaptureVideoPreviewLayer), запис у файл (AVCaptureMovieFileOutput) або покадрова обробка (AVCaptureVideoDataOutput).
AVPlayer — універсальний програвач AVFoundation, здатний відтворювати медіаконтент як локально, так і з мережі. AVPlayer підтримує HLS-потокове передавання, MPEG-4, QuickTime Movie та більшість аудіоформатів. Керування відтворенням здійснюється асинхронно через AVPlayerItem. AVPlayerViewController надає готовий інтерфейс з елементами керування: відтворення/пауза, перемотування, AirPlay та PiP.
Захоплення відео та аудіо — одна з найбільш затребуваних можливостей AVFoundation. Налаштування сесії захоплення включає кілька кроків: створення AVCaptureSession, додавання входів (камера, мікрофон), налаштування виходів та запуск сесії.
Розглянемо покрокове налаштування AVCaptureSession для захоплення відео з задньої камери iPhone та одночасного запису звуку з мікрофона. Процес складається з чотирьох кроків на 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-потік за URL та запускає відтворення зі зниженим рівнем гучності. AVPlayerItem керує станом завантаження та буферизації, а KVO-спостереження за статусом дозволяє обробляти помилки.
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 дозволяє обробляти аудіо в реальному часі, з'єднуючи вузли (nodes) у граф обробки: вхідний вузол (мікрофон) → ефекти → вихідний вузол (динамік). У прикладі нижче додається реверберація до голосу.
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 4+ для базового відтворення та захоплення. iOS 8+ для AVAudioEngine. iOS 17+ для AVAssetWriter в HDR-режимі. Актуальна версія фреймворку підтримується на всіх пристроях iPhone, iPad та Mac.
Так, AVPlayer підтримує HLS (HTTP Live Streaming) — основний протокол Apple для потокового передавання. Для відправки медіа на сервер використовуйте AVAssetWriter з користувацьким протоколом поверх URLSession.
AVFoundation — це низькорівневий фреймворк для роботи з медіа. AVKit — надбудова над AVFoundation, що надає готові компоненти інтерфейсу: AVPlayerViewController, AVPictureInPictureController та AVPipView.
Так, з iOS 11 AVFoundation підтримує FLAC (Free Lossless Audio Codec) для відтворення. ALAC (Apple Lossless) підтримується з iOS 4. Обидва кодеки працюють через AVAudioPlayer та AVPlayer.
Через RPScreenRecorder з ReplayKit, який використовує AVFoundation всередині. Починаючи з iOS 9, запис екрана доступний через RPScreenRecorder.shared().startRecording() з опціональним мікрофоном.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також