I built RUSEON Core — a self-hosted server for working with RTSP cameras, video streaming, archive recording, and connecting AI pipelines.

The project came out of a work-related task. We needed to stream surveillance cameras to the website of a government organization. The cameras themselves are portable: they are installed with IoT routers and constantly move between different sites. Therefore, a traditional NVR at each site was not suitable — the video infrastructure had to be centralized. The task was simple: receive RTSP and deliver it as HLS (or any format that can be played in a browser without problems). We also needed 24/7 recording with at least two weeks of storage.

For the first three years — Wowza, everything worked well, but with huge resource consumption. Then — Flussonic, which was better, but even now 60 permanently active cameras and 15–20 occasionally active cameras consume around 10 GB of RAM.

At first I looked at MediaMTX, which seemed to be as close as possible to what I needed. But around the streaming layer, there were still many other things needed — UI, archive handling, camera-specific data, monitoring, AI integration.

Instead of forking MediaMTX, I took gortsplib as the foundation and started building my own system on top of it. The pipeline looks roughly like this: RTSP – RUSEON Core – WebRTC/HLS/Recording – gRPC – AI worker – AI Metadata. At the moment there is a web UI, Prometheus metrics, RBAC, camera tags and folders, camera history, traffic accounting, fragmented archive with timeshift, MQTT and gRPC integration.