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

design flutter python ble wi-fi
iot
design, mobile, enterprise, frontend, backend
Вводные данные
Клиент
Клиент — многопрофильный холдинг, специализирующийся на разработке, производстве и дистрибуции высокотехнологичного оборудования. В портфель компании входят собственные бренды тепловизионных приборов, стрелкового оборудования, инфраструктурных решений для «умного города», а также e-commerce-платформа специализированной техники.
Компания работает на рынке более 10 лет, обладает собственной производственной базой в Москве, инжиниринговыми командами и сильной технологической экспертизой.
Холдинг активно участвует в отраслевых выставках и мероприятиях, а также инвестирует в создание собственных брендов с высокой степенью локализации и технической поддержки.
Задача
Клиент обратился с запросом на разработку мобильного приложения для удалённого управления прибором и отображения видеопотока с него.
Приложение должно работать в условиях беспроводного взаимодействия с прибором, используя BLE для передачи команд и Wi-Fi для потоковой передачи видео. Ключевыми требованиями были стабильная передача RTSP-видеопотока с минимальной задержкой, возможность удалённого изменения настроек прибора и управление медиафайлами как на смартфоне, так и на приборе.

Процесс работы
1.Проектирование
Заказчику был необходим полный цикл разработки: дизайн, аналитика
и разработка. С нашей стороны участвовала команда из семи человек: дизайнер, аналитик, два Flutter-разработчика, один backend-разработчик, менеджер проекта и тестировщик.
Работу мы начали с аналитики похожих приложений и дизайна макетов приложения. По прошествии двухнедельной итерации мы созванивались
с заказчиком для демонстрации проделанной работы, обсуждения макетов
и планируемого функционала.
Также мы провели техническую аналитику функционала по реализации подключения к прибору по BLE и Wi-Fi для передачи данных без интернет соединения. Со своей стороны мы анализировали подходящие плееры, которые можно использовать для отображения стрима с прибора в приложении, на Flutter, чтобы можно было с помощью параметров плеера контролировать задержку видеострима, так как основное требование заказчика было, чтобы задержка была не более 150 миллисекунд.
В итоге после анализа мы выбрали ijk плеер, так как он позволяет с помощью внутренних разнообразных настроек контролировать воспроизведение
и параметры задержки видеопотока.
2.Разработка

- Онбординга и системных экранов
- Протокол видеопередачи и управления
- Запись видеострима приложением и возможность делать скриншоты
- Подключение к прибору по BLE
- Автоматическое подключение к точке доступа прибора
- Управление общими настройками прибора через приложение
- Обновление прибора
- Галерея, возможность скачивать медиафайлы с прибора на мобильное устройство
- Раздел “Новости"
Онбординг
В процессе разработки мы проанализировали путь пользователя при первой инициализации приложения и собрали все критичные разрешения в один сценарий онбординга. Пользователь проходит единый, короткий и предсказуемый процесс при первом запуске, вместо получения запросов в разных экранах приложения. Разрешения разделены по платформам:
- iOS: доступ к галерее, геолокации, Bluetooth и локальной сети — вынесли на один экран с понятными пояснениями, почему это нужно.
- Android: доступ к галерее/хранилищу для удаления фотографий из галереи телефона и другие критичные разрешения — также на одном экране.
- Если пользователь не предоставил все необходимые разрешения, он не может перейти к следующему экрану приложения, пока не завершит онбординг. Это гарантирует корректную работу функций приложения.
- Если в процессе использования приложения пользователь отключает какое-то разрешение в настройках устройства, при следующем запуске приложения автоматически показывается окно онбординга повторно.
- Для удобства пользователя мы сделали интерактивные переключатели: при нажатии на них откроется системное окно, которое переводит пользователя в настройки устройства, где он может повторно активировать разрешения.
Реализация протокола видеопередачи и управления

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

В приложении реализован расширенный функционал работы
с медиафайлами, включающий запись видеопотока и создание скриншотов как на стороне смартфона, так и на стороне прибора.
Для записи и сохранения файлов на смартфон используется встроенная интеграция плеера fijkplayer и библиотеки ffmpeg, что позволяет обрабатывать кадры напрямую из RTSP-потока без прерывания воспроизведения. При старте записи приложение создаёт локальный медиафайл и сохраняет его в специально созданную папку, связанную
с активным прибором.
Аналогично реализована функция скриншота:
из текущего кадра видеопотока формируется изображение, которое сохраняется в локальное хранилище. Все созданные файлы автоматически отображаются в галерее приложения и параллельно становятся доступны
в системной галерее смартфона.
Дополнительно реализован второй сценарий — управление записью
и скриншотами на приборе. При выборе соответствующей команды приложение отправляет управляющий запрос на устройство
(по BLE или Wi-Fi, в зависимости от конфигурации), после чего сам прибор выполняет запись видеопотока или делает скриншот. Полученные файлы сохраняются непосредственно на приборе и отображаются в галерее приложения как доступные для просмотра или скачивания.
При необходимости пользователь может загрузить их в память смартфона одним действием.
Также предусмотрена интеграция с системой управления файлами: пользователь может удалять записи и скриншоты либо только с телефона, либо только с прибора, либо одновременно в обоих хранилищах.
Все изменения мгновенно синхронизируются с галереей приложения,
что обеспечивает актуальное отображение данных без необходимости ручного обновления.
Такой подход позволяет пользователю гибко управлять процессом записи
и создания скриншотов, выбирать, где хранить медиафайлы, и быстро получать доступ к ним как внутри приложения, так и в системной галерее смартфона.
Подключение к прибору по BLE
В приложении реализовано подключение к приборам по Bluetooth Low Energy (BLE) с использованием библиотеки flutter_blue_plus. При первом сопряжении на Android используется пин-код, который прибор передаёт
в приложение по BLE, после чего приложение автоматически подставляет
его при подключении, что упрощает процесс и исключает необходимость ручного ввода пользователем.
- сведения об устройстве (модель, идентификатор, серийный номер);
- текущую версию прошивки;
- уведомления от прибора (события, статусы);
- доступ к настройкам устройства и их изменению;
- возможность передачи геолокации с мобильного устройства на прибор.

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

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

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

Медиафайлы, созданные на смартфоне, доступны и в галерее приложения, и в системной галерее устройства. Файлы с прибора можно просмотреть, скачать на телефон или удалить; для каждой операции предусмотрен выбор хранилища, поэтому пользователь управляет файлами отдельно или синхронно на обеих сторонах.
Возникшие трудности
- Выбор плеера для RTSP и минимизация задержки
- Стабильное подключение по Bluetooth
- Работа с Wi-Fi без доступа к интернету
- Сохранение и отображение медиафайлов
- Синхронизация данных между прибором и приложением
Основной технической задачей стало обеспечить минимальную задержку RTSP-видеопотока без потери стабильности. Для этого сравнили доступные плееры, выбрали fijkplayer и настроили параметры буферизации и обработки кадров. Отдельно проработали устойчивую работу Bluetooth и Wi-Fi без доступа к интернету: приложение отслеживает состояние обоих каналов, корректно сообщает о потере связи и выполняет переподключение. Для медиафайлов потребовалась синхронизация локального хранилища, системной галереи и памяти прибора, чтобы изменения сразу отражались в интерфейсе.

Результаты
В результате разработки создано мобильное приложение, полностью интегрированное с приборами и обеспечивающее:
- стабильное воспроизведение видеопотока с минимальной задержкой;
- удалённое управление настройками прибора и видеопотоком;
- создание скриншотов и запись видео с автоматическим сохранением в мобильную и системную галерею;
- удобную работу с медиафайлами, включая скачивание, удаление и синхронизацию с прибором;
- автоматическое подключение к приборам по BLE и Wi-Fi с обработкой всех возможных сценариев ошибок;
- возможность обновления прибора через приложение с поддержкой контроля версий, загрузки, установки и отображения прогресса.
«Благодарим команду flaton за разработку мобильного приложения. Получился стабильный и удобный инструмент для работы с приборами, который учитывает наши требования к видеопотоку, управлению настройками и медиафайлам».
Михаил И., руководитель проекта


