Перейти к содержимому
обсудить проект
NDA

мобильное приложение для управления цифровыми приборами

Стабильное воспроизведение 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

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

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

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

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

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

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

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

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

Онбординг

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

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

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

Экран приложения, 3

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

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

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

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

Экран приложения, 4

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

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

Аналогично реализована функция скриншота:

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

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

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

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

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

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

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

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

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

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

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

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

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

Экран приложения, 6

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

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

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

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

Экран приложения, 7

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

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

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

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

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

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

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

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

  • Выбор плеера для RTSP и минимизация задержки
  • Стабильное подключение по Bluetooth
  • Работа с Wi-Fi без доступа к интернету
  • Сохранение и отображение медиафайлов
  • Синхронизация данных между прибором и приложением

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

Экран приложения, 9

Результаты

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

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

«Благодарим команду flaton за разработку мобильного приложения. Получился стабильный и удобный инструмент для работы с приборами, который учитывает наши требования к видеопотоку, управлению настройками и медиафайлам».

Михаил И., руководитель проекта