kunlang_video/docs/project-management.md
2026-05-09 13:12:38 +08:00

5.6 KiB

Vehicle Video Service Project Management

Project Summary

This project packages the vehicle video stack as a single deployable service bundle.

Main components:

  • vehicle_video_service: C++ service for camera capture, RTMP push, MQTT heartbeats, live URL replies, record query, and record playback replies.
  • Bundled SRS source: external/srs-server-5.0-r3.
  • SRS live instance: low-latency live playback through RTMP to WebRTC/WHEP.
  • SRS record instance: DVR segment recording and HTTP file serving.
  • Built-in web configuration page: http://<device-ip>:18080.

Default install path:

/opt/vehicle-video-service

Default record path:

/media/record

Current Services

Installed systemd services:

vehicle-video-srs-live.service
vehicle-video-srs-record.service
vehicle-video-service.service

Legacy services to remove on old devices:

srs-live.service
srs-record.service
video_manager.service

Removal command:

sudo systemctl disable --now srs-live.service srs-record.service video_manager.service
sudo rm -f /etc/systemd/system/srs-live.service
sudo rm -f /etc/systemd/system/srs-record.service
sudo rm -f /etc/systemd/system/video_manager.service
sudo systemctl daemon-reload
sudo systemctl reset-failed

Build And Package

Build everything:

./scripts/build_all.sh

Build only SRS:

./scripts/build_srs.sh

Build only video service:

./scripts/build_video.sh

Package release:

./scripts/package_release.sh

Release artifact:

dist/vehicle-video-service-aarch64.tar.gz

SRS is built out-of-tree into:

build/srs/objs/srs

Install / Upgrade

Recommended clean install from package:

mkdir -p /tmp/vvs-install
cd /tmp/vvs-install
tar -xzf ~/kunlang_video/dist/vehicle-video-service-aarch64.tar.gz
cd vehicle-video-service-aarch64
sudo ./install.sh

If extracting in dist/, old extracted files may be owned by root. Remove them with:

cd ~/kunlang_video/dist
sudo rm -rf vehicle-video-service-aarch64
tar -xzf vehicle-video-service-aarch64.tar.gz
cd vehicle-video-service-aarch64
sudo ./install.sh

For first install, install.sh enables and starts services. For upgrade installs, restart services after install:

sudo systemctl restart vehicle-video-srs-live.service vehicle-video-srs-record.service vehicle-video-service.service

Web Configuration

Default URL:

http://<device-ip>:18080

Default login:

admin / admin123

Current web page capabilities:

  • Edit MQTT settings.
  • Edit camera channels: enabled, name, device node, bitrate, width, height, fps.
  • Enable or disable live stream push.
  • Enable or disable record stream push.
  • Edit SRS root, record config path, app name, public network interface.
  • Edit record path, DVR segment duration, retention days, disk cleanup threshold.
  • Edit live and record SRS ports.
  • Show runtime status as a channel table:
    • channel
    • device node
    • enabled/disabled
    • device exists/missing
    • running/stopped
    • reason
    • playback URL

Saving config writes:

/opt/vehicle-video-service/bin/config.json
/opt/vehicle-video-service/srs/conf/live.conf
/opt/vehicle-video-service/srs/conf/record.conf

Runtime changes require service restart in the current version.

Important Config Fields

SRS and record:

  • srs.root: SRS runtime root directory.
  • srs.record_config: SRS record config read by RecordManager.
  • srs.stream_app: RTMP app name, default camera.
  • srs.live_enabled: whether to push live stream branch.
  • srs.record_enabled: whether to push record stream branch.
  • srs.record_path: DVR mp4 root directory.
  • srs.dvr_duration_sec: DVR file segment duration.
  • srs.retention_days: record retention days.
  • srs.usage_threshold: disk cleanup threshold, for example 0.9.
  • srs.public_interface: network interface used to generate playback URLs.

Ports:

  • live_rtmp_port: RTMP ingest port for live SRS.
  • live_http_api_port: SRS HTTP API / WHEP playback port.
  • live_http_server_port: SRS static HTTP / HTTP-FLV port.
  • live_rtc_port: WebRTC UDP media port.
  • record_rtmp_port: RTMP ingest port for record SRS.
  • record_http_api_port: HTTP API port for record SRS.
  • record_http_server_port: HTTP port used for record playback files.

Verification Commands

Service state:

systemctl status vehicle-video-srs-live.service
systemctl status vehicle-video-srs-record.service
systemctl status vehicle-video-service.service

Ports:

ss -lntup | grep -E ':(1935|2935|1985|2985|8080|2980|8000|18080)\b'

Logs:

journalctl -u vehicle-video-service.service -f
journalctl -u vehicle-video-srs-live.service -f
journalctl -u vehicle-video-srs-record.service -f

Package content:

tar -tzf dist/vehicle-video-service-aarch64.tar.gz | head

Current Known Notes

  • main is ahead of origin/main; remember to push when ready.
  • Web config save does not hot-reload video pipelines yet.
  • SRS config changes require service restart.
  • dist/vehicle-video-service-aarch64/ can contain root-owned files if install was run directly from that extracted directory.
  • external/srs-server-5.0-r3/trunk/objs/ is intentionally ignored.

Backlog

  • Add hot restart for a single camera channel.
  • Add one-click restart buttons in the web page.
  • Add port conflict checks before saving config.
  • Add record path permission checks before saving config.
  • Add GStreamer plugin check display.
  • Add config backup and restore from the web page.
  • Add safer credential handling for web login and MQTT password.
  • Add live preview/playback links per channel in the web UI.