Разработка мультикамерной съемки в мобильном приложении под ключ

При попытке реализовать одновременную запись с фронтальной и задней камеры разработчики сталкиваются с рядом неочевидных проблем: `AVCaptureMultiCamSession` молча возвращает ошибку, если превышен лимит `hardwareCost`, а на Android перечень логических мультикамер ограничен производителем. Без грамотн

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Разработка мультикамерной съемки в мобильном приложении под ключ
Сложный
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

При попытке реализовать одновременную запись с фронтальной и задней камеры разработчики сталкиваются с рядом неочевидных проблем: AVCaptureMultiCamSession молча возвращает ошибку, если превышен лимит hardwareCost, а на Android перечень логических мультикамер ограничен производителем. Без грамотной архитектуры мультикамерная сессия либо не запустится, либо приведёт к падению производительности. В проекте для логистической компании мы столкнулись с необходимостью записи одновременно с водителем (фронтальная камера) и дорогой (задняя). Пришлось учесть аппаратные ограничения и обеспечить graceful degradation для старых устройств.

Почему мультикамерная съемка сложнее, чем кажется?

На iOS AVCaptureMultiCamSession доступен только на устройствах с A12 и новее — это первое, что проверяем через isMultiCamSupported. На старых устройствах делаем graceful degradation: только одна камера или последовательная запись. На Android мультикамерность через Camera2 API требует проверки CameraCharacteristics.LOGICAL_MULTI_CAMERA_SENSOR_TYPE и списка физических камер через getPhysicalCameraIds(). Одновременный захват с двух физических камер доступен с Android 9 (API 28), но реальная поддержка сильно варьируется. Например, Samsung и Pixel работают стабильно, а некоторые MediaTek-устройства имеют ограничения.

Сравнение iOS и Android
Критерий iOS (AVCaptureMultiCamSession) Android (Camera2)
Минимальная версия A12+ (iPhone XS) API 28 (Android 9)
Пиковая нагрузка (1080p/30fps) hardwareCost 0.9–1.0 зависит от SoC
Системная обратная связь systemPressureStateNotification CaptureResult.STATISTICS_SCENE_FLICKER
PiP в реальном времени через AVCaptureVideoDataOutput через ImageReader + OpenGL
Требуется ли проверка? isMultiCamSupported LOGICAL_MULTI_CAMERA + getPhysicalCameraIds()

Как решить проблему перегрева при мультикамерной съемке?

AVCaptureMultiCamSession потребляет значительно больше энергии, чем одиночная сессия. На iPhone 12 mini hardwareCost при двух потоках в 1080/30fps может достигать 1.0 — превышение приведёт к тому, что startRunning() молча вернёт ошибку. Решение: уменьшаем разрешение одной из камер до 720p или снижаем frameRate до 24fps. Подписываемся на systemPressureStateNotification, при уровне .critical снижаем frameRate до 15fps, при .shutdown останавливаем запись. Такой подход эффективнее, чем попытка эмулировать мультикамеру через отдельные сессии — нагрузка на процессор снижается, а стабильность растёт.

Пиковый сценарий: Picture-in-Picture при записи — разработка мультикамерной съемки

Два видеопотока записываются в отдельные файлы. Для финального PiP-видео используем AVMutableComposition: основной поток на весь экран, второй — масштабируем через AVMutableVideoCompositionLayerInstruction.setTransform() в угол. AVVideoCompositionInstruction с двумя layerInstructions собирает итоговый файл.

Как реализовать мультикамерную съемку на iOS?

let session = AVCaptureMultiCamSession() // Задняя камера let backInput = try AVCaptureDeviceInput(device: backCamera) let backOutput = AVCaptureMovieFileOutput() let backConnection = AVCaptureMultiCamSession.Connection( inputPort: backInput.ports[0], output: backOutput) // Фронтальная камера let frontInput = try AVCaptureDeviceInput(device: frontCamera) let frontOutput = AVCaptureMovieFileOutput() session.addInputWithNoConnections(backInput) session.addOutput(backOutput) session.addInputWithNoConnections(frontInput) session.addOutput(frontOutput) session.addConnection(backConnection) 

Важно: hardwareCost и systemPressureCost сессии могут превысить допустимый предел. Уменьшаем разрешение одной из камер до 720p, если hardwareCost > 1.0. Иначе startRunning() завершится с ошибкой без явного сообщения.

Что делать, если устройство не поддерживает мультикамеру?

Если проверка isMultiCamSupported возвращает false, используем альтернативную архитектуру: запись поочерёдно с одной камеры, а затем монтаж. На iOS можно применить AVCaptureSession без мультикамерного режима, на Android — стандартную сессию с одной камерой. Это снижает нагрузку и гарантирует стабильность на старых устройствах. Такой подход мы применяли в проектах для логистических компаний, где требовалась запись одновременно с водителем и дорогой — в итоге получили стабильную работу на 90% устройств.

Реализация на Android (Kotlin)

val cameraManager = getSystemService(CameraManager::class.java) val multiCameraId = cameraManager.cameraIdList.firstOrNull { id -> val chars = cameraManager.getCameraCharacteristics(id) chars.get(REQUEST_AVAILABLE_CAPABILITIES) ?.contains(REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA) == true } 

Открываем CameraDevice, создаём CaptureSession с поверхностями обеих камер. Для CameraX — CameraSelector с физическим ID через CameraSelector.Builder().addCameraFilter().

Сравнение устройств по совместимости

Модель iOS Android Комментарий
iPhone 12 Pro AVCaptureMultiCamSession Стабильно работает
Samsung Galaxy S21 Logical multi-camera Рекомендуется
Xiaomi Mi 11 Logical multi-camera Возможны ограничения
Google Pixel 5 Logical multi-camera Хорошая поддержка

Flutter: когда нужна кросс-платформа

Прямой мультикамерный захват через пакет camera не поддерживается. Решение — MethodChannel + нативная реализация на Swift/Kotlin, которую передаём во Flutter через Texture виджет. Такой подход требует больше времени на разработку, но даёт полный контроль над ресурсами.

Процесс работы

  1. Аналитика: определяем целевые устройства и требования к качеству видео.
  2. Проектирование: выбираем стек (нативный/кросс-платформа) и архитектуру (раздельные потоки или PiP).
  3. Реализация: пишем код с учётом аппаратных ограничений и graceful degradation.
  4. Тестирование: проверяем на реальных устройствах (минимум 5 моделей) в разных условиях освещения и температуры.
  5. Деплой: настраиваем provisioning profiles, загружаем в App Store Connect и Google Play Console.

Сроки и что входит

Срок реализации базовой версии (iOS + Android) — от 3 до 5 дней. PiP-композиция финального видео добавляет ещё 1–2 дня. В стоимость входит:

  • Исходный код с комментариями
  • Документация по интеграции
  • Настройка Code Signing и provisioning profiles
  • Проверка на 5 реальных устройствах
  • Консультация после запуска

Более 5 лет опыта в мобильной разработке и 50+ реализованных проектов с мультикамерной съемкой гарантируют стабильную работу приложения. Получите консультацию по вашему проекту — свяжитесь с нами для технической оценки. Apple Developer Documentation: AVCaptureMultiCamSession