Видеонаблюдение в мобильном приложении — технически самая тяжёлая часть умного дома. Стриминг с IP-камер в реальном времени, надёжная детекция движения с push-уведомлениями, просмотр архива записей, организация P2P-соединения без выделенного IP — каждый из этих пунктов требует нетривиальных инженерных решений. За годы мы реализовали свыше 20 проектов: от квартирных домофонов на Raspberry Pi до комплексных систем безопасности с десятками камер. Наш опыт включает интеграцию с камерами Hikvision, Dahua, Reolink и другими моделями, работу с различными протоколами (RTSP, HLS, WebRTC) и сетями любой сложности — от простого домашнего NAT до корпоративных VPN. Это позволяет гарантировать стабильную работу приложения даже при нестабильном мобильном интернете и в сложных NAT-сценариях, где прямое соединение невозможно. Рассмотрим ключевые технические аспекты, которые определяют качество и производительность приложения для умного дома.
Какой протокол выбрать для видеострима?
Три основных протокола для IP-камер: RTSP, HLS и WebRTC. В таблице ниже — ключевые отличия.
| Протокол | Задержка | Использование | Нативная поддержка на мобильных |
|---|---|---|---|
| RTSP | 300–800 ms | Прямой стрим с камеры | Нет, требуется библиотека (VLC, media_kit) |
| HLS | 3–15 s | Просмотр архива, ретрансляция | Да, в браузерах и AVPlayer |
| WebRTC | < 500 ms | Live-просмотр, двусторонняя связь | Да, через специальные SDK |
RTSP — стандарт для большинства NVR/DVR и IP-камер (Hikvision, Dahua, Reolink). Низкая задержка, но нет нативной поддержки. На Flutter используем flutter_vlc_player или media_kit, на React Native — react-native-vlc-media-player. HLS работает везде, но задержка 3–15 секунд. Сервер (FFmpeg, MediaMTX) берёт RTSP-поток камеры и отдаёт HLS. Идеально для архива, приемлемо для live с мониторингом, неприемлемо для двусторонней связи. WebRTC — минимальная задержка, P2P без сервера-посредника. Используем для intercom и baby monitor. На Flutter: flutter_webrtc, на React Native: react-native-webrtc. Требует STUN/TURN серверы — coturn self-hosted или Twilio/Cloudflare.
Почему WebRTC лучше для live-просмотра?
HTTP Live Streaming даёт задержку от 3 секунд — это слишком много для домофона или наблюдения в реальном времени. WebRTC обеспечивает <500 ms, что критично для сценариев, где нужно реагировать мгновенно. Кроме того, WebRTC поддерживает двустороннюю аудиосвязь без дополнительных протоколов. Для большинства home security приложений оптимальная связка: WebRTC для live + HLS для архива.
P2P и NAT traversal
Пользователь смотрит камеру дома, находясь в роуминге. Камера за NAT роутера без белого IP. Варианты:
| Метод | Работоспособность | Задержка/стоимость | Сложность |
|---|---|---|---|
| UPnP/Port Forwarding | Зависит от пользователя | Нулевая | Высокая (пользователь) |
| TURN relay | 100% | Ретрансляция, задержка +50ms | Средняя (сервер) |
| Hole punching (ICE через STUN) | 75–85% | STUN-сервер бесплатен | Низкая (клиент+сервер) |
| Туннели (WireGuard/Tailscale) | 99% | VPN-сервер | Средняя (настройка) |
UPnP/Port Forwarding — пользователь должен сам настроить, нереалистично для потребительского продукта. TURN relay — все данные идут через relay-сервер. Работает всегда, но дорого и добавляет задержку. Hole punching (ICE через STUN) — прямое P2P соединение через обмен внешними IP/портами. Работает в ~75–85% случаев с Symmetric NAT. coturn как STUN бесплатен. Туннели (WireGuard, ZeroTier, Tailscale) — устройства в домашней сети подключены к VPN-мешу. Мобильное приложение подключается к тому же мешу. Tailscale SDK для мобильных есть официальный. Самый надёжный вариант, требует настройки на стороне роутера/сервера.
Реальный проект: квартирный домофон-камера на Raspberry Pi + WebRTC + coturn. Hole punching работал в 80% случаев, для остальных TURN relay. Средняя задержка видео в P2P режиме — 180–250ms. Экономия на relay-трафике составила до 90% (при типовом объёме трафика стоимость relay через Twilio — около $0.10 за гигабайт).
Как реализовать motion detection уведомления?
Детальная схема работы motion detection
Детекция движения на стороне камеры: большинство IP-камер отправляют HTTP webhook или MQTT при срабатывании. Принимаем на бэкенде → FCM/APNs push с content-available: 1. На iOS: UNNotificationServiceExtension для добавления превью-изображения. Камера вместе с webhook отправляет URL снимка — extension скачивает и прикрепляет к notification. На Android: BigPictureStyle через Firebase Messaging. Детекция через ML на клиенте — не делаем, убивает батарею.
Запись и архив
Локальная запись на SD-карту камеры → просмотр через архив в приложении. NVR API (Hikvision ISAPI, Blue Iris API) для навигации. Timeline архива — горизонтальная полоса времени с метками движения. На Flutter: кастомный CustomPainter с Canvas.drawRect для каждого сегмента. Облачное хранение: загружаем фрагменты движения на S3/GCS с TTL-политикой 7–30 дней. Средняя стоимость облачного хранения для 30-дневного архива с 10 камерами — около 1 000 рублей в месяц.
Что входит в работу
- Проектирование архитектуры приложения с учётом масштабирования
- Разработка модулей стриминга, уведомлений и архива
- Интеграция с облачными сервисами (S3, Firebase)
- Тестирование на реальных камерах и сетевых сценариях
- Документация по API и деплою
- Поддержка после запуска (2 недели гарантийного сопровождения)
Процесс разработки и сроки
- Аналитика и выбор протоколов — обсуждаем типы камер, ожидаемую задержку, сценарии использования.
- Проектирование — рисуем архитектуру, определяем стек (Flutter/React Native, coturn, FFmpeg).
- Разработка — реализуем стриминг, P2P, уведомления, архив.
- Тестирование — проверка на разных моделях камер и типах NAT.
- Деплой и документация — развёртывание серверов, публикация в App Store/Google Play.
Базовая версия (одна камера, RTSP/HLS, уведомления) — 5–7 недель. Полнофункциональное решение (мультикамерный вид, WebRTC, архив, двусторонняя связь) — 3–5 месяцев. Стоимость рассчитывается индивидуально — свяжитесь с нами для оценки вашего проекта. Получите консультацию по выбору архитектуры и срокам реализации.







