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 (обработка). Каждый компонент работает асинхронно, что критически важно для сохранения плавности UI во время загрузки или обработки больших файлов. По данным 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 предоставляет готовый UI с элементами управления: play/pause, scrubbing, 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 предоставляет встроенный UI с элементами управления, 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, предоставляющая готовые UI-компоненты: 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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также