Gate Video Stream
Используйте этот сервис, когда приложению нужны HLS-плейлисты для исторических записей или on-demand live control для Entrance Observer. web-app должен общаться только с graphql-router и gate-video-stream и не должен знать приватные URL Jetson.
Сейчас gate-video-stream отвечает за:
- загрузку и HLS-воспроизведение сохраненного видео у входа
- серверную генерацию тепловых карт летка из траекторий Entrance Observer
- GraphQL lifecycle live-сессии через
startEntranceLiveStream,keepEntranceLiveStreamAlive,stopEntranceLiveStreamиentranceLiveStreamSession - device-facing polling/status/event endpoints для
entrance-observer - выдачу service-owned placeholder playback/publisher endpoints для live MVP
- опциональную передачу live-сессии обратно в stored clip flow через существующий путь
uploadGateVideo
Для REST-клиентов, таких как entrance-observer:
Текущий контракт live-control MVP:
- Браузерные клиенты запускают, продлевают, читают и останавливают live-сессии через GraphQL, а не через REST.
entrance-observerотправляет heartbeat/status черезPOST /api/entrance-live/device/status.entrance-observerопрашиваетPOST /api/entrance-live/device/poll, чтобы получать ожидающие командыSTART_STREAMиSTOP_STREAM.- Запрос poll одновременно обновляет heartbeat устройства, потому что несет актуальные
cameraStatus,publisherStateи опциональный payload с диагностикой. - Устройство подтверждает обработку команды через
POST /api/entrance-live/device/command-ack. - Устройство сообщает о переходах жизненного цикла через
POST /api/entrance-live/device/event, включаяDEVICE_ONLINE,STREAM_STARTING,STREAM_ACTIVE,STREAM_FAILEDиSTREAM_STOPPED. entrance-observerзагружает отслеживаемые траектории пчёл черезPOST /api/entrance-heatmaps/trajectories;gate-video-streamагрегирует их в суточные тепловые карты и сохраняет рядом с видео-активами.- Браузерные клиенты получают список сохранённых тепловых карт через GraphQL-запрос
entranceHeatmaps(boxIds, date, limit)черезgraphql-router. - Событие
DEVICE_ONLINEобновляет присутствие устройства и status payload, но само по себе не переводит сессию вSTARTINGилиACTIVE.
Для browser clients используйте GraphQL через graphql-router, а не прямые URL устройства.