Разберем ключевые компоненты
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 - мощный, но сложный фреймворк. Главное - понять роль каждого компонента и их взаимодействие.Разберем ключевые компоненты
AVFoundation для работы с камерой: от подключения устройств до преобразования сырых данных в готовое изображение. Поймем разницу между
AVCapturePhoto,
CGImage и
SwiftUI Image.