Skip to content

Repository files navigation

VLStream Cloud

VLStream Cloud

AI-Driven Open-Source Video IoT and Intelligent Stream Management Platform

简体中文 | English

GitHub Stars MIT License Java 8 Spring Boot 2.7.11 Vue 3.3

Quick StartKey FeaturesSystem ScreenshotsApplication ScenariosArchitectureTechnology StackDeploymentHelp


Important

Online environment: https://vlstream.oortcloudsmart.com:2443/bus/vls-ui/login Default account: admin / Codex@123456 This is the current online environment. Change the default password immediately after the first sign-in.


📖 Project Description

VLStream Cloud is an open-source Video IoT platform for device and stream management, intelligent video analysis, algorithm lifecycle management, monitoring, and alerting. It combines a Vue-based management console with a Spring Boot multi-module backend and provides workflow, permission, scheduling, object storage, and operational support for enterprise video applications.

Important

Connect only devices and video streams that you are authorized to access. Make sure your deployment and use of intelligent analysis comply with applicable privacy, security, and data-protection requirements.


✨ Key Features

Feature Description
Video Device Management Device registration, grouping, tagging, health monitoring, connection tests, PTZ control, and stream discovery
Multi-Protocol Playback Web video playback and low-latency streaming capabilities for common Video IoT scenarios
Intelligent Analysis Analysis requests, real-time task monitoring, result management, and event governance
Algorithm Lifecycle Algorithm warehouse, training tasks, annotations, model management, Hi3519DV500 OM conversion, and device deployment
Workflow Automation Flowable-based process definition, deployment, tasks, and approval workflows
Enterprise Permissions Sa-Token authentication, RBAC, data permissions, user management, and role management
Platform Services Scheduled jobs, object storage, SMS integration, monitoring, and XXL-Job support
Visual Operations Vue 3 management console with dashboards, GIS views, reusable CRUD components, and video layouts

Single-Node GPU Training Scheduler

Algorithm training supports an exclusive single-GPU queue on one physical GPU server. A Docker container is created when a training job starts. Jobs wait automatically while the GPU is busy, and the container is removed when training finishes while job records, logs, and model artifacts are retained. See Single-Node GPU Training Scheduler.


Hi3519DV500 Model Deployment

VLStream delivers trained models to devices through MQTT. Hardware connection, model delivery, event reporting, media upload, status receipts, and integration acceptance follow the VLS Platform and Camera Unified Communication Protocol.

Configure these environment variables:

VLSTREAM_MQTT_HOST=127.0.0.1
VLSTREAM_MQTT_PORT=1883
VLSTREAM_MQTT_USERNAME=vlstream
VLSTREAM_MQTT_PASSWORD=replace-me
VLSTREAM_MODEL_PUBLIC_BASE_URL=https://vlstream.example.com
VLSTREAM_MODEL_DOWNLOAD_SIGNING_SECRET=replace-with-a-long-random-secret

VLSTREAM_MODEL_PUBLIC_BASE_URL must be the backend address reachable by the devices, not the browser-facing frontend address. Model download URLs use short-lived HMAC signatures. Generate and inject a unique random signing secret for each environment; never commit the real secret to Git.


🖥️ System Screenshots

Active safety event management
Active Safety Event Management
Event feedback and workflow
Event Feedback & Workflow
Work order management
Work Order Management
Visual workflow designer
Visual Workflow Designer
Algorithm training management
Algorithm Training Management
Algorithm training console
Algorithm Training Console

Click any screenshot to view it at full resolution.


🌐 Application Scenarios

Chemical production safety
Chemical Production Safety
Smart water conservancy
Smart Water Conservancy
Wastewater treatment
Wastewater Treatment
Smart construction site
Smart Construction Site
Smart community
Smart Community
Gas station safety supervision
Gas Station Safety
Smart kitchen
Smart Kitchen
Smart campus
Smart Campus
Smart city management
Smart City Management

🧰 Technology Stack

Backend

Category Technology
Runtime Java 8
Framework Spring Boot 2.7.11, RuoYi-Flowable-Plus 0.8.3
Persistence MyBatis-Plus 3.5.3.1
Authentication Sa-Token 1.34.0
Workflow Flowable 6.8.0
Cache and Locking Redis, Redisson 3.20.1, Lock4j
API Documentation Springdoc OpenAPI, Knife4j
Build Maven 3.6+

Frontend

Category Technology
Framework Vue 3.3, Vue Router 4
Build Tool Vite 4.4
UI Element Plus 2.3, Avue 3.7
State Management Pinia 2.1
Video hls.js, xgplayer
GIS Leaflet 1.9
HTTP Axios 1.4

🏗️ Architecture and Project Structure

VLStream Cloud's core business architecture is organized into three categories:

  • Hardware: IPC, BOX, and NVR devices. The lifecycle covers production provisioning, installation and protocol access, platform operations, and device transfer.
  • Platform servers: VLS owns AI events, model delivery, and platform business; WVP is the sole video-device center for VLStream and other protocols, device state, and video control; ZLMediaKit provides the media server behind WVP; MQTT, MySQL, Redis, and MinIO provide messaging, persistence, cache, and object storage.
  • Client: VLStream-ui provides platform operations, while the WVP UI provides video preview, playback, PTZ, and channel management.

The complete lifecycle sequence diagram and dependency inventory are maintained in Core Business and Technical Architecture.

sequenceDiagram
    autonumber
    participant P as Production Provisioning
    participant H as Hardware<br/>IPC / BOX / NVR
    participant C as Client<br/>VLStream-ui / WVP UI
    participant V as VLS Server
    participant M as MQTT Broker<br/>EMQX
    participant W as WVP Server
    participant Z as ZLMediaKit
    participant D as MySQL / Redis
    participant O as MinIO / S3

    rect rgb(255, 248, 235)
        Note over P,H: 1. Production provisioning
        P->>H: Write device ID, secret, MQTT address and base configuration
        H->>M: Connect with pre-provisioned identity
        M-->>V: Forward device identity and online message
        V->>D: Persist identity and status
    end

    rect rgb(239, 246, 255)
        Note over C,H: 2. Initialization, installation and video access
        C->>V: Initialize or register device
        V->>M: Publish initialization and control configuration
        M->>H: MQTT configuration/control message
        alt GB28181 / SIP
            H->>W: SIP registration, heartbeat and catalog
            C->>W: Preview or playback request
            W->>H: SIP INVITE / playback control
            H->>Z: RTP media
        else RTSP / ONVIF
            C->>W: Discovery, pull or device control
            W->>H: ONVIF / RTSP request
            H->>Z: RTSP / RTP media
        end
        W->>Z: REST API, Hook and stream coordination
        Z-->>C: WebRTC / HTTP-FLV / HLS / RTSP playback
    end

    rect rgb(240, 253, 244)
        Note over C,H: 3. Platform operations and hardware interaction
        C->>V: Device management, user binding and status query
        H->>M: Heartbeat, event, status and model receipt
        M-->>V: Forward hardware message
        V->>D: Persist business state and event result
        C->>V: Send control or model task
        V->>M: Publish command or model task
        M->>H: MQTT command
        H-->>M: Execution receipt
        M-->>V: Forward result
        V->>O: Store or read event media and model artifacts
    end

    rect rgb(254, 242, 242)
        Note over C,H: 4. Device transfer
        C->>V: Unbind or transfer device
        V->>M: Clear binding and reset device
        M->>H: Reset to pending-binding state
        H-->>M: Reset receipt
        M-->>V: Forward receipt
        V->>D: Clean up user-device relationship
    end
Loading

Runtime Server Dependencies

The following versions are taken from the current release Compose or project configuration. A version marked not pinned must be fixed in the formal deployment manifest before production release.

Name Purpose Version License
VLStream Server (VLS) Device registration, user binding, events, model tasks, and platform APIs Maven 0.8.3; Spring Boot 2.7.11; release image 1.1.2 MIT
WVP Server Required unified video-device center for VLStream, GB28181/SIP, ONVIF, RTSP, preview, playback, PTZ, and video control 3.8.9; Spring Boot 2.7.18 MIT
ZLMediaKit RTP ingest, media management, REST/Hook, and playback output Not pinned in WVP/VLStream repositories MIT
MQTT Broker / EMQX Device messaging, heartbeat, events, commands, and model receipts 5.4; external service in release Compose Apache-2.0
MySQL Business database 8.4.10-oraclelinux9 GPLv2 or commercial license
Redis Cache, sessions, online state, and runtime state 7.4.9-alpine RSALv2 or SSPLv1
MinIO / S3 Event media, model files, and object storage RELEASE.2025-09-07T16-13-09Z AGPLv3 or commercial license

Nginx or an equivalent gateway is normally required for frontend static files and reverse proxying. WebRTC Streamer v0.8.16 is optional for the VLS direct RTSP-to-WebRTC path; FFmpeg is an optional WVP/ZLMediaKit pull and conversion helper, not another standalone media platform.

Repository layers

The backend paths in the following table are relative to VLStream-Cloud-Backend-Server/vls-stream/.

Layer Main paths Responsibility
Operator client VLStream-Web/VLStream-ui/ Dashboards, device and stream management, AI operations, workflow, and system administration
Device client sdk/ Native camera-side RTSP/WebRTC streaming, AI inference, event reporting, and model updates
Application services ruoyi-admin/, ruoyi-vlstream/ API entry point and VLStream domain services
Platform services ruoyi-common/, ruoyi-framework/, ruoyi-system/, ruoyi-flowable/, ruoyi-job/, ruoyi-oss/, ruoyi-sms/, ruoyi-extend/ Shared infrastructure, authentication, permissions, workflows, jobs, storage, messaging, and monitoring
Operations and documentation deploy/, docs/, backend deploy/ and script/ Container deployment, database initialization, migration support, protocols, and operational documentation

Top-level layout

VLStream-Cloud/
├── VLStream-Cloud-Backend-Server/
│   └── vls-stream/                  # Java 8 / Spring Boot Maven reactor
│       ├── ruoyi-admin/             # Executable application and REST APIs
│       ├── ruoyi-vlstream/          # Devices, streams, AI, events, and models
│       ├── ruoyi-system/            # Users, roles, permissions, and system services
│       ├── ruoyi-framework/         # Web, security, and framework configuration
│       ├── ruoyi-flowable/          # Workflow and approval services
│       ├── ruoyi-common/            # Shared models, utilities, and base components
│       ├── ruoyi-generator/         # Code generation
│       ├── ruoyi-job/               # Scheduled jobs
│       ├── ruoyi-oss/               # Object storage integration
│       ├── ruoyi-sms/               # SMS integration
│       ├── ruoyi-extend/            # Monitoring and XXL-Job services
│       ├── ruoyi-demo/              # Examples and integration tests
│       ├── deploy/                  # Backend deployment resources
│       └── script/                  # Database and Docker scripts
├── VLStream-Web/
│   └── VLStream-ui/                 # Vue 3 management console
├── sdk/                             # Hi3519DV500 native camera business SDK
├── deploy/                          # Repository-level deployment assets
├── docs/                            # Repository-level documentation
├── assets/                          # Screenshots and application imagery
├── tools/                           # Development and validation tools
├── LICENSE
├── README.md                        # English documentation (default)
└── README.zh-CN.md                  # Simplified Chinese documentation

Device SDK (sdk/)

The sdk/ directory is the camera-side native component, not a Maven or npm module. It exports the business source used to build the rtsp_streamer executable for the Hi3519DV500 board and depends on the original HiSilicon MPP/ACL SDK, the cross toolchain, and an external WebRTC Streamer SDK.

Area Contents
Media pipeline src/rtsp_streamer.c, rtsp_lib/ — RTSP input, frame handling, and stream orchestration
WebRTC bridge src/webrtc_bridge.c, include/webrtc_bridge.h — WebRTC lifecycle, sessions, codec headers, and keyframe gating
AI runtime src/ai_bridge.cpp, src/ai_acl_adapter.cpp, src/ai_runtime_config.cpp — ACL inference, OM model validation/hot switching, and runtime configuration
Platform integration src/http_reporter.cpp, src/model_receiver.cpp — asynchronous event/JPEG reporting and HTTP model reception
Configuration and examples config/, examples/ — board settings, class labels, and an MQTT model-dispatch example
Dependencies and notes third_party/, docs/, Makefile — external declarations, porting notes, debugging records, and board build rules

The SDK is intentionally kept separate from the server build: the root Maven and frontend commands do not compile it. For prerequisites, original project paths, excluded vendor binaries, and board-side build instructions, see the SDK guide.


🚀 Quick Start

Requirements

Component Requirement
Java JDK 8
Maven 3.6+
Database MySQL 5.7+
Cache Redis
Object Storage MinIO or another S3-compatible service; required for complete annotation support
Messaging MQTT broker; required for device control and model delivery
Training Node Linux GPU server with SSH/SFTP; required for algorithm training
AI Service apaas-ai routed through an APaaS gateway; required for AI text/image features
Frontend Node.js and npm

WebRTC Live-Preview Dependency

Browsers cannot play RTSP directly. Camera live preview uses WebRTC Streamer to convert RTSP to WebRTC. The pinned, validated Docker image for this project is mpromonet/webrtc-streamer:v0.8.16. Keep this exact tag instead of using an untested latest image or an older Windows binary.

To start it independently on a local machine:

docker run -d --name vlstream-webrtc --restart unless-stopped -p 8000:8000 `
  mpromonet/webrtc-streamer:v0.8.16 -H 0.0.0.0:8000 -vvv

Verify the runtime with curl.exe http://127.0.0.1:8000/api/version; it should report v0.8.16/Linux-x86_64. The backend declaration is in ruoyi-admin/src/main/resources/application.yml:

VLSTREAM_WEBRTC_ENABLED=true
VLSTREAM_WEBRTC_RUNTIME_IMAGE=mpromonet/webrtc-streamer:v0.8.16
VLSTREAM_WEBRTC_INTERNAL_URL=http://127.0.0.1:8000
VLSTREAM_WEBRTC_PUBLIC_URL=/bus/webrtc-streamer-server

The release Compose deployment uses the same version through WEBRTC_STREAMER_IMAGE=mpromonet/webrtc-streamer:v0.8.16 in deploy/release/.env. runtime-image is a backend declaration and status value only; the backend does not pull or start Docker containers.

1. Clone the Repository

git clone https://github.com/OortCloudGroup/VLStream-Cloud.git
cd VLStream-Cloud

2. Initialize and Upgrade the Database

CREATE DATABASE vlstream CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
cd VLStream-Cloud-Backend-Server/vls-stream
mysql -u root -p vlstream --execute="source script/sql/mysql/mysql_ry_v0.8.X.sql"

SQL initialization scripts for Oracle, PostgreSQL, and SQL Server are also available under script/sql/. Application schema upgrades are managed by Flyway when the backend starts. Add every new database change as a new, immutable migration under ruoyi-admin/src/main/resources/db/migration/; do not edit a migration that has already run. See DATABASE_MIGRATIONS.md.

3. Configure and Start the Backend

Review the main configuration and the active profile configuration:

  • ruoyi-admin/src/main/resources/application.yml
  • ruoyi-admin/src/main/resources/application-dev.yml
  • ruoyi-admin/src/main/resources/application-prod.yml

The Maven profiles are dev, local, and prod; dev is active by default.

Required Configuration Before Deployment

Do not use repository test addresses or example passwords for a complete deployment. Configure at least the following services before startup:

Configuration Purpose Location
MySQL Business data, training jobs, and delivery jobs application-dev.yml / application-prod.yml
Redis Sessions, cache, and distributed state application-dev.yml / application-prod.yml
WVP Server Required unified video-device center and VLStream device validation VLSTREAM_WVP_INTERNAL_BASE_URL
MinIO Annotation images, datasets, and file uploads Database table sys_oss_config
GPU training server Training, conversion, and model artifacts VLSTREAM_SSH_*, VLSTREAM_TRAINING_*
MQTT broker Device control, model delivery, and receipts VLSTREAM_MQTT_*
Model download entry Device-side HTTP model download VLSTREAM_MODEL_*
GPT/AI service AI text and image generation Frontend APaaS gateway and a separate apaas-ai service

Inject secrets through the deployment environment and never commit real passwords or keys:

MYSQL_HOST=mysql.example.internal
MYSQL_PORT=3306
MYSQL_DB_NAME=vlstream
MYSQL_USERNAME=vlstream
MYSQL_PASSWORD=replace-me

REDIS_HOST=redis.example.internal
REDIS_PORT=6379
REDIS_PASSWORD=replace-me

# WVP is required; this address must be reachable from the VLS backend
VLSTREAM_WVP_INTERNAL_BASE_URL=http://wvp-server:9080
VLSTREAM_NATIVE_DEVICE_LEGACY_ENABLED=false

VLSTREAM_SSH_HOST=gpu.example.internal
VLSTREAM_SSH_PORT=22
VLSTREAM_SSH_USERNAME=vlstream
VLSTREAM_SSH_PASSWORD=replace-me
VLSTREAM_TRAINING_HOST_DATA_DIR=/data/work
VLSTREAM_TRAINING_WORK_DIR=/data/work/ultralytics_yolov8-main/datasets

VLSTREAM_MQTT_HOST=127.0.0.1
VLSTREAM_MQTT_PORT=1883
VLSTREAM_MQTT_USERNAME=vlstream
VLSTREAM_MQTT_PASSWORD=replace-me
VLSTREAM_MQTT_QOS=1

VLSTREAM_MODEL_PUBLIC_BASE_URL=https://vlstream.example.com
VLSTREAM_MODEL_DOWNLOAD_SIGNING_SECRET=replace-with-a-long-random-secret
VLSTREAM_MODEL_DOWNLOAD_URL_TTL_SECONDS=1800
VLSTREAM_MODEL_DISPATCH_MQTT_CLIENT_ID=vls-model-dispatch-backend-01

VLSTREAM_DEVICE_MEDIA_OSS_CONFIG_KEY=vlstream-events
VLSTREAM_DEVICE_MEDIA_UPLOAD_TTL_SECONDS=600
VLSTREAM_DEVICE_MEDIA_MAX_IMAGE_BYTES=10485760
VLSTREAM_DEVICE_MEDIA_ALLOW_UNAUTHENTICATED=false

WVP owns VLStream device registration, heartbeat, video streams, and firmware jobs. VLS keeps the existing hardware-facing HTTP and MQTT contracts and calls WVP internally when issuing media upload URLs or consuming device events. Start WVP before VLS. Keep VLSTREAM_NATIVE_DEVICE_LEGACY_ENABLED=false; the switch exists only to roll back to the legacy VLS device-management implementation.

Each backend instance must use a unique VLSTREAM_MODEL_DISPATCH_MQTT_CLIENT_ID. MQTT topics, ACL rules, and hardware behavior are defined by VLS-Protocol.md.

MinIO and Algorithm Annotation

Annotation uploads use the enabled config_key=minio record in sys_oss_config, not fixed credentials in application.yml. Configure the access key, secret key, bucket, API endpoint, external domain, HTTPS flag, access policy, and enabled status. Persist MinIO data and verify that the backend, browser, and GPU server can all reach the generated object URLs.

For device event images, reuse the MinIO service but configure a separate private OSS entry and bucket (for example config_key=vlstream-events). Devices receive only short-lived, single-object presigned PUT URLs and must never receive MinIO credentials. The unauthenticated upload-grant endpoint is for LAN development only and must remain disabled in production. Apply db/2026-07-29-vls-device-event-media.sql before enabling MQTT event ingestion.

GPT/AI Service

The frontend calls apaas-ai through the configured APaaS gateway:

{APaaS gateway prefix}/apaas-ai/api/v1/text_completion
{APaaS gateway prefix}/apaas-ai/api/v1/text_img

Configure the provider base URL, API key, model names, timeout, retries, and network access in the separate apaas-ai service. That service is not included in this repository.

mvn -ntp -Pdev clean package
mvn -ntp -Pdev -pl ruoyi-admin spring-boot:run

After startup:

  • Knife4j: http://localhost:8080/doc.html
  • Swagger UI: http://localhost:8080/swagger-ui.html

Note

The backend parent POM references internal Maven repositories. Dependency resolution may require access to the project network or a compatible mirror in your Maven settings.xml.

4. Start the Frontend

Open a new terminal from the repository root:

cd VLStream-Web/VLStream-ui
npm install
npm run dev

For local development, configure:

VITE_DEV_PROXY_TARGET=http://127.0.0.1:8080
VITE_APAAS_PROXY_TARGET=http://apaas-gateway.example.internal:21410

Use npm run build to create a production frontend bundle.

Post-Startup Acceptance

  1. Verify /actuator/health and MySQL/Redis connectivity.
  2. Upload an image and open the returned MinIO URL.
  3. Create an annotation job and save annotation results.
  4. Verify that an AI text request reaches apaas-ai.
  5. Complete MQTT and model-delivery checks defined in VLS-Protocol.md.
  6. Run one training job and verify scheduling, logs, and model artifacts.

🔌 API Preview

Device Management

Method Path Description
GET /vlsDeviceInfo/page Query devices with pagination
GET /vlsDeviceInfo/{id} Query a device by ID
POST /vlsDeviceInfo Add a device
PUT /vlsDeviceInfo/{id} Update a device
DELETE /vlsDeviceInfo/{id} Delete a device
GET /vlsDeviceInfo/statistics Retrieve device statistics

Standard API responses use the shared R<T> structure:

{
  "code": 200,
  "msg": "Operation successful",
  "data": {}
}

Use the generated OpenAPI documentation for the complete and current API list.


🐳 Deployment

Download the deployment package from GitHub Releases, extract it, copy the environment template, and start the bundled services:

Copy-Item .env.example .env
docker compose up -d

Stop the services with:

docker compose down

Tip

The package includes MySQL, Redis, MinIO, WebRTC-streamer, the backend, and the frontend. Existing external infrastructure is also supported. See the deployment guide for configuration and upgrade instructions.


📚 Documentation

Resource Link
Frontend Guide VLStream-Web/README.md
Frontend Guide (Chinese) VLStream-Web/README-cn.md
Device SDK Guide sdk/README.md
Core Business and Technical Architecture architecture/vlstream-core-business-technical-architecture.md
Backend Environment Variables ENVIRONMENT_VARIABLES.md
Deployment Guide deploy/release/README.md
Database Migrations DATABASE_MIGRATIONS.md
VLS Device Protocol VLS-Protocol.md
VLS Protocol Specification (English) VLS-Protocol-EN.docx
VLS Protocol Specification (Chinese) VLS-Protocol.docx
API Documentation Start the backend and open Knife4j or Swagger UI

🤝 Help and Support

Contributions are welcome. You can report bugs, propose features, improve the documentation, or submit pull requests.


📄 License

VLStream Cloud is released under the MIT License.


Thank you for using VLStream Cloud

If this project helps you, consider giving it a ⭐ on GitHub.

Project HomepageIssue TrackerGitHub Repository

Built with ❤️ by OortCloud

About

VLStream Cloud is an intelligent video stream management system developed based on SpringBoot + MyBatis Plus + MySQL technology stack, providing backend API services for device management, algorithm management, intelligent analysis, monitoring and alerting functions.

Topics

Resources

Stars

9 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages