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

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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