Авторизация
Забыли пароль?
Сброс пароля
Вернуться к авторизации

Управление цифровыми приборами c трансляцией видеоискателя

16 декабря ‘25

Заказчик: NDA

Разработано мобильное приложение для управление приборами, галереей файлов прибора и мобильного устройства, установлено стабильное воспроизведение RTSP-видеопотока и связь через BLE / Wi-Fi. Реализована возможность управления парком устройств и их обновлением.

Агентство-исполнитель кейса

flaton

Мы разрабатываем IoT проекты для бизнеса и стартапов.

1. Вводная задача от заказчика, проблематика, цели

Клиент — многопрофильный холдинг, специализирующийся на разработке, производстве и дистрибуции высокотехнологичного оборудования. В портфель компании входят собственные бренды тепловизионных приборов, стрелкового оборудования, инфраструктурных решений для «умного города», а также e-commerce-платформа специализированной техники.

Компания работает на рынке более 10 лет, обладает собственной производственной базой в Москве, инжиниринговыми командами и сильной технологической экспертизой.

Холдинг активно участвует в отраслевых выставках и мероприятиях, а также инвестирует в создание собственных брендов с высокой степенью локализации и технической поддержки.

Задача

Клиент обратился с запросом на разработку мобильного приложения для удалённого управления прибором и отображения видеопотока с него.

Приложение должно работать в условиях беспроводного взаимодействия с прибором, используя BLE для передачи команд и Wi-Fi для потоковой передачи видео. Ключевыми требованиями были стабильная передача RTSP-видеопотока с минимальной задержкой, возможность удалённого изменения настроек прибора и управление медиафайлами как на смартфоне, так и на приборе.

Онбординг

2. Описание реализации кейса и творческого пути по поиску оптимального решения

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

1.Проектирование

Клиенту необходим был полный цикл разработки: дизайн, аналитика и разработка. С нашей стороны участвовала команда из семи человек: дизайнер, аналитик, два Flutter-разработчика, один backend-разработчик, менеджер проекта и тестировщик.

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

Также мы провели техническую аналитику функционала по реализации подключения к прибору по BLE и Wi-Fi для передачи данных без интернет соединения. Со своей стороны мы анализировали подходящие плееры, которые можно использовать для отображения стрима с прибора в приложении, на Flutter, чтобы можно было с помощью параметров плеера контролировать задержку видеострима, так как основное требование заказчика было, чтобы задержка была не более 150 миллисекунд.

В итоге после анализа мы выбрали ijk плеер, так как он позволяет с помощью внутренних разнообразных настроек контролировать воспроизведение и параметры задержки видеопотока.

2.Разработка

Функционал приложения включал в себя реализацию функционала:

  • Протокол видеопередачи и управления
  • Запись видеострима приложением и возможность делать скриншоты
  • Подключение к прибору по BLE
  • Автоматическое подключение к точке доступа прибора
  • Управление общими настройками прибора через приложение
  • Обновление прибора
  • Галерея, возможность скачивать медиафайлы с прибора на мобильное устройство

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

Пользователь проходит единый, короткий и предсказуемый процесс при первом запуске, вместо получения запросов в разных экранах приложения.

Разделили разрешения по платформам, чтобы убрать лишние шаги:

  • iOS: доступ к галерее, геолокации, Bluetooth и локальной сети — вынесли на один экран с понятными пояснениями, почему это нужно.
  • Android: доступ к галерее/хранилищу для удаления фотографий из галереи телефона и другие критичные разрешения — также на одном экране.

Дополнительно мы реализовали механику обязательности разрешений:

  • Если пользователь не предоставил все необходимые разрешения, он не может перейти к следующему экрану приложения, пока не завершит онбординг. Это гарантирует корректную работу функций приложения.
  • Если в процессе использования приложения пользователь отключает какое-то разрешение в настройках устройства, при следующем запуске приложения автоматически показывается окно онбординга повторно.
  • Для удобства пользователя мы сделали интерактивные переключатели: при нажатии на них откроется системное окно, которое переводит пользователя в настройки устройства, где он может повторно активировать разрешения.

Реализация протокола видеопередачи и управления

В приложении реализована поддержка RTSP-видеопотока и управление прибором в реальном времени. Для воспроизведения потока был выбран плеер fijkplayer (форк ijkplayer), который интегрирован в Flutter и обеспечивает высокую стабильность работы с RTSP, а также низкую задержку. Передача видеопотока осуществляется по Wi-Fi напрямую с прибора в приложение, при этом используется кодек H.264 и транспортный протокол TCP для повышения устойчивости соединения.

Для минимизации задержки (latency) выполнена тонкая настройка параметров ffmpeg и fijkplayer:

  • оптимизирована глубина буферизации кадров,
  • настроено быстрое переключение между ключевыми кадрами,
  • снижена задержка обработки видеопотока за счёт корректировки внутренних таймаутов и параметров воспроизведения.

Помимо воспроизведения видео реализован функционал управления прибором через протокол обмена данными. Приложение отправляет команды устройству по беспроводному каналу, что позволяет:

  • изменять настройки прибора (режимы работы, параметры видеопотока, качество и частоту кадров);
  • инициировать действия на приборе, включая запись видеопотока и создание скриншотов;
  • получать уведомления и статусы от устройства в реальном времени;
  • передавать дополнительные данные, например геолокацию, если прибор её поддерживает.

Архитектура решения построена так, что видеопоток и управляющие команды обрабатываются независимо, что исключает взаимное влияние и обеспечивает стабильное воспроизведение даже при активной передаче данных. Такой подход позволил добиться плавного отображения видео, быстрого отклика на команды и минимальной задержки между действиями пользователя и реакцией прибора.

Запись видеострима приложением и возможность делать скриншоты

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

Для записи и сохранения файлов на смартфон используется встроенная интеграция плеера fijkplayer и библиотеки ffmpeg, что позволяет обрабатывать кадры напрямую из RTSP-потока без прерывания воспроизведения. При старте записи приложение создаёт локальный медиафайл и сохраняет его в специально созданную папку, связанную с активным прибором.

Аналогично реализована функция скриншота: из текущего кадра видеопотока формируется изображение, которое сохраняется в локальное хранилище. Все созданные файлы автоматически отображаются в галерее приложения и параллельно становятся доступны в системной галерее смартфона.

Дополнительно реализован второй сценарий — управление записью и скриншотами на приборе. При выборе соответствующей команды приложение отправляет управляющий запрос на устройство (по BLE или Wi-Fi, в зависимости от конфигурации), после чего сам прибор выполняет запись видеопотока или делает скриншот. Полученные файлы сохраняются непосредственно на приборе и отображаются в галерее приложения как доступные для просмотра или скачивания.

При необходимости пользователь может загрузить их в память смартфона одним действием.

Также предусмотрена интеграция с системой управления файлами: пользователь может удалять записи и скриншоты либо только с телефона, либо только с прибора, либо одновременно в обоих хранилищах.

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

Подключение к прибору по BLE

В приложении реализовано подключение к приборам по Bluetooth Low Energy (BLE) с использованием библиотеки flutter_blue_plus. При первом сопряжении на Android используется пин-код, который прибор передаёт в приложение по BLE, после чего приложение автоматически подставляет его при подключении, что упрощает процесс и исключает необходимость ручного ввода пользователем.

После успешного подключения приложение получает от прибора важную информацию:

  • сведения об устройстве (модель, идентификатор, серийный номер);
  • текущую версию прошивки;
  • уведомления от прибора (события, статусы);
  • доступ к настройкам устройства и их изменению;
  • возможность передачи геолокации с мобильного устройства на прибор.

Подключённые приборы отображаются в списке активных устройств.

В настройках доступна функция разрыва BLE-соединения: после отключения прибор перемещается в список сопряжённых устройств в истории и может быть переподключён вручную в любой момент. Также реализована функция автоматического подключения: пользователь выбирает одно устройство по умолчанию, и при его доступности для BLE соединения приложение подключается к нему без участия пользователя.

Кроме того, реализована поддержка множественного подключения к нескольким приборам одновременно. Для этого настроено управление параллельными BLE-сессиями с отдельной обработкой уведомлений, данных и статусов соединения для каждого устройства. В случае потери соединения приложение выполняет автоматическую попытку переподключения, при этом корректно обновляя статусы приборов в списках активных и сопряжённых устройств.

Такой подход обеспечивает стабильное взаимодействие с несколькими приборами, гибкое управление подключениями и быстрый доступ к информации и настройкам устройства.

Автоматическое подключение к точке доступа прибора

В приложении реализован функционал автоматического подключения к Wi-Fi точке доступа прибора для обеспечения передачи видеопотока и обмена медиафайлами. Подключение выполняется в двух ключевых сценариях:

  • при переходе на экран просмотра видеотрансляции и при открытии галереи
  • в папке конкретного прибора для доступа к фото и видео.

Для работы с Wi-Fi используется библиотека wifi_iot, которая обеспечивает автоматическое управление подключениями. При первом сопряжении прибора с приложением логин и пароль от его Wi-Fi-точки передаются по BLE и сохраняются в приложении. Эти данные используются для всех последующих подключений, что позволяет пользователю не вводить их вручную. Когда приложение определяет, что требуется доступ к видеопотоку или медиафайлам, оно автоматически инициирует подключение к точке доступа прибора с помощью wifi_iot и переключает передачу данных на локальную сеть устройства.

Реализована проверка состояния Wi-Fi перед подключением. Если модуль Wi-Fi на смартфоне отключён — как через системную шторку, так и в настройках — приложение выводит уведомление с инструкцией о необходимости включить Wi-Fi, чтобы продолжить работу. После успешного подключения приложение автоматически начинает получать RTSP-видеопоток и передавать/загружать медиафайлы.

Благодаря использованию wifi_iot и интеграции с BLE, процесс полностью автоматизирован и не требует дополнительных действий со стороны пользователя. Это обеспечивает быстрый доступ к видеотрансляции и контенту галереи, стабильное соединение и удобство работы с прибором.

Дополнительно реализована система обработки разрывов соединения, учитывающая различные сценарии работы BLE и Wi-Fi:

1. Если прибор подключен только по BLE:

  • Приложение автоматически пытается переподключиться без дополнительного запроса к пользователю.
  • Если переподключение не удалось, пользователю отображается сообщение «Связь с прибором потеряна» и предлагаются два варианта действий: «Переподключиться» или «Закрыть».

2. При одновременной работе BLE и Wi-Fi:

  • Если разорвано соединение по BLE, но Wi-Fi остаётся активным — применяется сценарий из пункта 1.
  • Если разорвано соединение по Wi-Fi, приложение отображает окно подключения к Wi-Fi в разделах “Галерея “и “Видеотрансляция”. Если в текущем контексте Wi-Fi не требуется, ошибка не отображается.
  • Если разорваны оба соединения (BLE и Wi-Fi), пользователю показывается единое сообщение «Связь с прибором потеряна» с возможностью «Переподключиться» или «Закрыть», после чего приложение действует по сценарию из пункта 1.

Если переподключиться не удаётся, пользователь автоматически переводится с экрана просмотра видеотрансляции на экран со списком активных устройств. При этом, если соединение по BLE разорвано, устройство удаляется из списка активных и становится доступным только после следующего успешного сопряжения.

Управление общими настройками прибора через приложение

В приложении реализован раздел «Настройки прибора», который позволяет пользователю управлять основными параметрами устройства и отправлять команды на прибор в реальном времени. Через этот раздел доступны действия по конфигурации устройства, такие как настройка дальномера, изменение яркости интерфейса, установка даты и времени прибора и другие общие параметры.

Кроме этого, на экране просмотра видеотрансляции реализован доступ к настройкам потока: пользователь может регулировать зум, яркость, контрастность и включать или отключать оверлей поверх видео.

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

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

Галерея, возможность скачивать медиафайлы с прибора на мобильное устройство

В приложении реализована собственная галерея медиафайлов, построенная с учётом работы с несколькими приборами. Для каждого сопряжённого устройства создаётся отдельная папка, в которой структурировано хранятся фото и видео, полученные как с прибора, так и созданные приложением. Такая организация обеспечивает удобную навигацию и быстрый доступ к медиафайлам по конкретному прибору.

Все медиафайлы, созданные на смартфоне (скриншоты или записи видеопотока), автоматически сохраняются в локальной памяти устройства и одновременно становятся доступны в двух местах:

  • 1. В галерее приложения, в разделе соответствующего прибора.
  • 2. В системной галерее смартфона — приложение создаёт собственную папку прибора в хранилище устройства, что позволяет просматривать файлы в стандартных приложениях для фото и видео.

Приложение также поддерживает работу с файлами, хранящимися на самом приборе. Если фото или видео находятся только на устройстве, они всё равно отображаются в галерее приложения, и пользователь может скачать их на смартфон по запросу. После скачивания файл автоматически появляется в папке соответствующего прибора и синхронизируется с галереей устройства.

Реализовано гибкое управление медиафайлами непосредственно из приложения:

  • удаление файлов только с телефона,
  • удаление только с прибора,
  • полное удаление одновременно на обеих сторонах.

Все медиафайлы, созданные на смартфоне (скриншоты или записи видеопотока), автоматически сохраняются в локальной памяти устройства и одновременно становятся доступны в двух местах:

1. В галерее приложения, в разделе соответствующего прибора.

2. В системной галерее смартфона — приложение создаёт собственную папку прибора в хранилище устройства, что позволяет просматривать файлы в стандартных приложениях для фото и видео.

Приложение также поддерживает работу с файлами, хранящимися на самом приборе. Если фото или видео находятся только на устройстве, они всё равно отображаются в галерее приложения, и пользователь может скачать их на смартфон по запросу. После скачивания файл автоматически появляется в папке соответствующего прибора и синхронизируется с галереей устройства.

Реализовано гибкое управление медиафайлами непосредственно из приложения:

  • удаление файлов только с телефона,
  • удаление только с прибора,
  • полное удаление одновременно на обеих сторонах.

Возникшие трудности

В процессе разработки мобильного приложения для управления прибором и отображения видеопотока команда столкнулась с несколькими ключевыми сложностями:

  • Выбор плеера для RTSP и минимизация задержки

Изначально стояла задача найти подходящий плеер для воспроизведения RTSP-видеопотока с минимальной задержкой. Было протестировано несколько решений, включая нативные и кроссплатформенные плееры, прежде чем был выбран fijkplayer. Дополнительно выполнена тонкая настройка параметров ffmpeg и самого плеера, включая оптимизацию буферизации, работу с ключевыми кадрами и таймаутами, что позволило достичь минимальной задержки при воспроизведении видеопотока.

  • Стабильное подключение по Bluetooth

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

  • Работа с Wi-Fi без доступа к интернету

Подключение к Wi-Fi точке прибора оказалось сложным, так как поведение устройств отличается на iOS и Android, а на Android оно дополнительно зависит от версии прошивки. Для решения проблемы мы использовали библиотеку wifi_iot, которая позволяет управлять подключением к локальной сети прибора напрямую, и реализовали проверку состояния Wi-Fi на устройстве с выводом уведомлений для пользователя о необходимости включить модуль. Это обеспечило стабильное подключение к приборам на различных моделях смартфонов.

  • Сохранение и отображение медиафайлов

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

  • Синхронизация данных между прибором и приложением

При работе с медиафайлами и настройками прибора важным было поддерживать корректную синхронизацию между данными на устройстве и в приложении. Мы реализовали механизм отслеживания состояния файлов на приборе и их отображения в мобильной галерее, с возможностью скачивания, удаления и редактирования медиафайлов в обеих системах.

3. Результаты сотрудничества

В результате разработки было создано мобильное приложение, полностью интегрированное с приборами, обеспечивающее:

  • стабильное воспроизведение видеопотока с минимальной задержкой;
  • удалённое управление настройками прибора и видеопотоком;
  • создание скриншотов и запись видео с автоматическим сохранением в мобильную и системную галерею;
  • удобную работу с медиафайлами, включая скачивание, удаление и синхронизацию с прибором;
  • автоматическое подключение к приборам по BLE и Wi-Fi с обработкой всех возможных сценариев ошибок;
  • возможность обновления прибора через приложение с поддержкой контроля версий, загрузки, установки и отображения прогресса.

4. Заключение

Разработали мобильное приложение.

Агентство-исполнитель кейса

flaton

Мы разрабатываем IoT проекты для бизнеса и стартапов.