Разберем ключевые компоненты AVFoundation для работы с камерой: от подключения устройств до преобразования сырых данных в готовое изображение. Поймем разницу между AVCapturePhoto, CGImage и SwiftUI Image
🧩 Основные компоненты:
🔸 Input: устройство, которое может передавать видео, фото или аудио. Например задняя камера, фронтальная камера или встроенный микрофон.
🔸 Output: фактический вывод устройства. Это может быть фото или видео сохраненные на диске. Либо обработанный вами объект. Например: обнаруженные лица, отсканированные штрихкоды или примененные фильтры.
🔸 Preview: вывод изображения с камеры.
🔸 Stream: непрерывный поток кадров. Обычно вы снимаете один кадр как фотографию или серию кадров как видео. Хотя современные камеры часто объединяют кадры из-за слабого освещения, уменьшения шума и т. д. Поток также доступен для предварительного просмотра.
🔸 Session: объект, предоставляющий интерфейс для добавления/удаления входов и выходов, а также настройки конфигурации сеанса. Позволяет начинать и завершать сеанс.
⚠️ Важные нюансы:
🔸 Захват фото: асинхронный: метод capturePhoto не возвращает фото сразу — камере нужно время на фокусировку, экспозицию и, возможно, вспышку.
🔸 Разное качество: фото захватываются в максимальном разрешении, а превью — в низком для плавности.
🗃 Типичный поток данных:
Камера -> AVCapturePhoto -> Декодирование -> CGImage -> Image (SwiftUI) -> отображение на экране
Либо сохранение в Фото -> PHAsset (ссылка на медиатеке).
💎 Ключевые различия форматов:
🔹 AVCapturePhoto: сырые данные с камеры (ещё не отображенные).
🔹 PHAsset: ссылка на фото/видео в медиатеке (не содержит пиксели).
🔹 CGImage: растровое изображение (можно рисовать).
🔹 Image (SwiftUI): view для отображения.
💻 Тестирование:
🔹 На iOS-симуляторе камера не работает, поэтому лучше тестировать на реальном устройстве.
🔹 На macOS можно тестировать через встроенную камеру Mac.
💡 Вывод:
AVFoundation — мощный, но сложный фреймворк. Главное — понять роль каждого компонента и их взаимодействие.
➡️ Подписаться на канал
Мобильный трудоголик
