🎥 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-мутации для загрузки видео с метаданными детекции. Позволяет переносить обработку в облако для устройств без достаточных локальных вычислительных ресурсов.