При разработке мобильного приложения для видеонаблюдения под IP-камеры ключевая проблема — выбор протокола видеопотока: RTSP для локальных, HLS/DASH для облачных, WebRTC для минимальной задержки. Неправильный выбор приводит к рассинхронизации звука, высокому потреблению трафика или неработающим push-уведомлениям. Мы разберём каждый протокол и покажем, как их реализовать на iOS и Android, включая motion detection и запись видео.
Мобильное приложение для видеонаблюдения — это сложная интеграция сетевых протоколов, камер и мобильных возможностей. От корректной настройки RTSP-потоков зависит, увидит ли пользователь изображение в реальном времени. Наша команда имеет 7-летний опыт в этой области и более 50 реализованных проектов. Стек технологий включает ExoPlayer, VLCKit, FFmpegKit, а также интеграцию ONVIF и собственные решения для обнаружения камер. Закажите консультацию, чтобы получить решение под ваши камеры.
Как выбрать протокол для видеопотока?
| Протокол | Задержка | Поддержка на мобильных | Применение |
|---|---|---|---|
| RTSP | <1 с | ExoPlayer (Android), VLCKit/iOS | Локальные камеры |
| HLS | 5-30 с | Нативный AVPlayer | Облачные камеры |
| WebRTC | <500 мс | Библиотеки WebRTC | Требуется минимальная задержка |
Для локальных камер чаще всего выбираем RTSP — он даёт низкую задержку и совместимость с большинством камер. Но его реализация на мобильных требует дополнительных библиотек.
RTSP: декодирование видео на мобильном
RTSP-поток с камеры — это H.264/H.265 видео, завёрнутое в RTP-пакеты. Нативного RTSP-плеера ни в iOS, ни в Android нет. Варианты:
Android: ExoPlayer с расширением extension-rtsp (начиная с Media3 1.0). До этого — только VLC for Android SDK (libvlc-android). ExoPlayer Media3 с RTSP работает корректно для большинства камер на H.264, но на H.265 с некоторыми RTSP-серверами даёт SOURCE_ERROR из-за нестандартных SDP-атрибутов.
iOS: AVPlayer не поддерживает RTSP. Пути: VLCKit (работает, но бинарник ~20 МБ), FFmpegKit с нативной компиляцией FFmpeg (тяжелее, но максимально гибко), либо собственный RTSP-клиент на RTP/UDP через Network.framework. Последний вариант трудоёмкий, но даёт полный контроль над буферизацией и задержкой.
| Библиотека | Платформа | Поддержка RTSP | Размер | Лицензия |
|---|---|---|---|---|
| ExoPlayer Media3 | Android | Да (расширение) | ~2 МБ | Apache 2.0 |
| VLCKit | iOS | Да | ~20 МБ | LGPL |
| FFmpegKit | iOS/Android | Да (сборка) | ~30 МБ | LGPL/GPL |
Почему ONVIF — стандарт для IP-камер?
ONVIF — международный стандарт для IP-камер (Hikvision, Dahua, Axis, Reolink). Профиль S определяет GetStreamUri, GetSnapshotUri, PTZ-управление. WS-Discovery для обнаружения устройств в локальной сети. Согласно ONVIF Profile S, GetStreamUri возвращает RTSP URL для каждой камеры.
Пример WS-Discovery на Android (Kotlin)
// Android: WS-Discovery multicast class ONVIFDiscovery { private val MULTICAST_ADDRESS = "239.255.255.250" private val MULTICAST_PORT = 3702 suspend fun discoverDevices(timeout: Long = 3000): List<ONVIFDevice> { val socket = MulticastSocket(MULTICAST_PORT) socket.joinGroup(InetAddress.getByName(MULTICAST_ADDRESS)) socket.soTimeout = timeout.toInt() val probeMessage = buildWSDiscoveryProbe() val packet = DatagramPacket( probeMessage.toByteArray(), probeMessage.length, InetAddress.getByName(MULTICAST_ADDRESS), MULTICAST_PORT ) socket.send(packet) val devices = mutableListOf<ONVIFDevice>() val buffer = ByteArray(4096) try { while (true) { val response = DatagramPacket(buffer, buffer.size) socket.receive(response) parseWSDiscoveryResponse(String(response.data, 0, response.length)) ?.let { devices.add(it) } } } catch (e: SocketTimeoutException) { /* нормальное завершение */ } socket.close() return devices } } Для получения RTSP URL: SOAP-запрос GetStreamUri с авторизацией WS-Security (Digest auth). Библиотека onvif4java упрощает, но часто отстаёт от актуальных прошивок камер — проще написать SOAP-клиент на Retrofit с кастомным конвертером.
Многокамерный просмотр
Сетка из 4 или 9 камер одновременно — тяжёлая задача. Каждый RTSP-поток требует отдельного декодера. На Android с 9 камерами Full HD рискуем исчерпать аппаратные декодеры (их обычно 4-8 на чипе); остальные уходят на программный декодер с просадкой FPS до 5-10 кадров.
Решение: для сетки используем MJPEG-снапшоты через ONVIF GetSnapshotUri с обновлением раз в 2-3 секунды вместо полного видеопотока. Полный RTSP включаем только при тапе на камеру — режим полного экрана. Это компромисс между нагрузкой и информативностью.
Запись и история: локальное и облачное хранение
Запись клипов с камеры на телефон: скачиваем через ONVIF GetRecordings или ISAPI (Hikvision). Локально сохраняем в MediaStore (Android 10+) или Photos Library (iOS). Для облачных камер — прямые ссылки на MP4 из облака производителя.
Motion detection: либо аппаратный (в самой камере, события приходят через ONVIF Event Service), либо программный на мобильном через сравнение кадров по YUV разнице между предыдущим и текущим. Аппаратный надёжнее — меньше ложных срабатываний.
Что входит в разработку
- Анализ модельного ряда камер и ONVIF-совместимости
- Выбор протокола и настройка RTSP-потоков
- Разработка многокамерной сетки с MJPEG-снапшотами
- Интеграция записи и motion detection
- Публикация в App Store и Google Play
- Техническая документация и обучение сотрудников
- Поддержка после релиза (опционально)
Пошаговый процесс реализации RTSP-просмотра
- Проверяем, какие протоколы поддерживают ваши камеры (RTSP, ONVIF, HLS).
- Выбираем плеер: для Android — ExoPlayer с RTSP-расширением, для iOS — VLCKit или FFmpegKit.
- Настраиваем буферизацию с минимальной задержкой (цель — не более 500 мс).
- Тестируем на разных камерах и при разных условиях сети.
- Для многокамерных режимов внедряем MJPEG-снапшоты для экономии ресурсов.
Сроки разработки
Разработка мобильного приложения с RTSP-просмотром одной камеры и базовым ONVIF-управлением: 4-5 недель. Многокамерная система с WS-Discovery, PTZ-управлением, историей записей и пуш-алертами по motion: 8-12 недель. Стоимость рассчитывается индивидуально после анализа модельного ряда камер и требований к хранению. Экономия времени на разработку с использованием готовых библиотек составляет до 40% по сравнению с созданием собственного RTSP-клиента. Получите консультацию по вашему проекту — оценим сроки и стоимость.
Наш опыт в разработке приложений для видеонаблюдения — более 7 лет и свыше 50 успешных проектов для камер Hikvision, Dahua, Axis, Reolink. Гарантируем соответствие App Store Review Guidelines (Section 4.2/5.1) и безопасность данных.







