Авторизация
Сброс пароля
Управление цифровыми приборами c трансляцией видеоискателя
Заказчик: NDA

Разработано мобильное приложение для управление приборами, галереей файлов прибора и мобильного устройства, установлено стабильное воспроизведение RTSP-видеопотока и связь через BLE / Wi-Fi. Реализована возможность управления парком устройств и их обновлением.
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. Заключение
Разработали мобильное приложение.



