🎥 Video streaming via API

🎥 Видеостриминг через API

🎯 Назначение

Позволяет аппаратным устройствам захватывать и передавать видео с летка улья в облако для удалённого мониторинга и AI-анализа.

🎭 Пользовательская история

  • Как пчеловод с собственным оборудованием или ограниченными вычислительными ресурсами,
  • я хочу стримить видео с летка улья в облако,
  • чтобы использовать облачный AI-анализ и удалённый мониторинг без мощной обработки на устройстве.

🚀 Ключевые преимущества

  • Гибкость оборудования: Raspberry Pi, кастомные ПК или Jetson Nano
  • Облачная обработка: AI-анализ в облаке для устройств без GPU
  • Удалённый доступ: просмотр live и архивных потоков откуда угодно
  • Простая интеграция: аутентификация по API-токену и простая настройка

🔧 Технический обзор

Система загрузки видео (src/uploader.py) захватывает обработанные видеофрагменты с оверлеями детекции и загружает их на video.gratheon.com через GraphQL-мутации. Используется multipart/form-data с видеофайлами и метаданными детекции, пакетная загрузка с bearer token.

📋 Критерии приёмки

  • Захват видео с USB-камеры через OpenCV (CAP_V4L2/CAP_AVFOUNDATION)
  • Кодирование видео кодеками AVC1/MP4V для совместимости
  • Загрузка видеофрагментов с оверлеями детекции через GraphQL API
  • Файл метаданных детекции вместе с видео
  • Аутентификация bearer token (переменная окружения API_TOKEN)
  • Настраиваемая длина видеофрагмента (VIDEO_CHUNK_LENGTH_SEC)
  • Обработка сетевых сбоев через асинхронную загрузку в потоках

🚫 Вне области

  • Live-стриминг в реальном времени (пакетная загрузка обработанных фрагментов)
  • Аудиостриминг (только видео)
  • Двусторонняя связь в реальном времени
  • Управление хранением сверх стандартных политик retention

🏗️ Подход к реализации

  • Кодирование видео: OpenCV VideoWriter с кодеками AVC1/MP4V
  • Протокол загрузки: GraphQL-мутация через HTTPS POST с multipart/form-data
  • Аутентификация: bearer token в заголовке Authorization
  • Потоки: асинхронная загрузка без блокировки захвата видео
  • Интеграция: привязка к SECTION_ID (ID корпуса) и метаданным временной метки
  • Обработка ошибок: корректный fallback, если API-учётные данные не настроены

📊 Метрики успеха

  • Кодирование видео с совместимостью кодеков (AVC1 основной, MP4V fallback)
  • Успешные GraphQL-загрузки на endpoint video.gratheon.com
  • Асинхронная обработка в потоках без блокировки видеопайплайна
  • Корректное multipart-кодирование с файлами метаданных детекции
  • Аутентификация bearer token и привязка к ID корпуса

🔗 Связанные функции

📚 Ресурсы и ссылки

💬 Заметки

Фактическая реализация использует GraphQL-мутации для загрузки видео с метаданными детекции. Позволяет переносить обработку в облако для устройств без достаточных локальных вычислительных ресурсов.