Документация проекта
Сервер видеоаналитики на Rust
Назначение
RustVideoAnalyticsServer реализует тот же REST-контракт /api/v1/*, что C++20- и Python-серверы. JavaScript Viewer и общий набор контрактных тестов работают без изменения пользовательского сценария.
Технологический стек
- Rust и Cargo;
- Axum и Tokio для REST API и асинхронной оркестрации;
- Serde для конфигурации и JSON;
- sqlx для PostgreSQL;
- FFmpeg для RTSP, HLS и MP4;
- ONNX Runtime для двух контуров YOLO.
Владение и многопоточность
Кадр передаётся как общий неизменяемый объект. Ownership, Arc, Send и Sync делают границы владения явными. Tokio обслуживает REST и асинхронные операции, а вычислительные этапы работают в отдельных потоках ОС.
FFmpeg→Последний кадр→Motion / Tracking→Два YOLO→Координатор→HLS / PostgreSQL
Однослотовая передача последних значений ограничивает backpressure: медленный inference не создаёт растущую очередь устаревших кадров. Захват, координатор и вывод отделены от ресурсоёмких потоков YOLO.
Реализовано
- RTSP и видеофайлы с восстановлением;
- Motion и Tracking на Rust без OpenCV;
- два режима YOLO;
- JPEG, HLS и H.264/MP4;
- PostgreSQL, Bearer-аутентификация, роли, камеры и PTZ;
- совместимость с общей конфигурацией и тестами.
Сервер проверен на RTSP-камере 2304×1296 с YOLO-моделью ONNX.