diff --git a/README.md b/README.md new file mode 100644 index 0000000..c5ba6e3 --- /dev/null +++ b/README.md @@ -0,0 +1,91 @@ +# Deltacast SDI Recorder + +Web-based recording suite for Deltacast SDI capture cards. Multi-port recorder with real-time preview, SRT streaming, and SCTE35/104 ad marker injection. + +## Features + +- **Multi-port recording** — Independent recorders for up to 4 SDI ports +- **Codec support** — ProRes, DNxHD, H.264, Uncompressed (MXF output) +- **SRT streaming** — Simultaneous file recording + SRT stream output +- **SCTE35/104 ad markers** — Binary cue injection + webhook triggering +- **Live preview** — Low-latency HLS preview per port (5s latency) +- **Web GUI** — React 18 + TypeScript frontend with real-time status + +## Requirements + +- Deltacast SDI capture card(s) with VideoMaster SDK and FFmpeg plugin installed +- Docker + Docker Compose +- Devices: `/dev/deltacast0` through `/dev/deltacast3` + +## Quick Start + +```bash +git clone https://forge.wilddragon.net/zgaetano/deltacast-sdi-recorder +cd deltacast-sdi-recorder +docker compose up -d +``` + +Access the GUI at: **http://localhost** + +## Configuration + +Copy and edit the backend environment file: + +```bash +cp backend/.env.example backend/.env +``` + +Key variables: +| Variable | Default | Description | +|----------|---------|-------------| +| `DELTACAST_PORT_COUNT` | `4` | Number of SDI ports | +| `RECORDING_DIR` | `/recordings` | Output directory | +| `SRT_LATENCY` | `5000` | SRT latency in ms | +| `LOG_LEVEL` | `INFO` | Logging verbosity | + +## Architecture + +``` +┌─────────────────────────────────────────────┐ +│ Browser (React GUI) │ +│ - Port status cards (real-time via WS) │ +│ - HLS video preview per port │ +│ - SCTE35 ad break injection │ +│ - Per-port codec/destination config │ +└──────────────┬──────────────────────────────┘ + │ HTTP/WebSocket (Nginx proxy) +┌──────────────▼──────────────────────────────┐ +│ FastAPI Backend │ +│ ├── RecorderManager (4x PortRecorder) │ +│ │ └── FFmpeg subprocess per port │ +│ ├── SCTE35Manager (binary + webhook) │ +│ ├── HLSPreviewManager (HLS transcode) │ +│ └── SRTStreamer (independent SRT output) │ +└──────────────┬──────────────────────────────┘ + │ deltacast:// device +┌──────────────▼──────────────────────────────┐ +│ Deltacast SDI Card (VideoMaster SDK) │ +│ Ports 0-3 → FFmpeg Deltacast plugin │ +└─────────────────────────────────────────────┘ +``` + +## Development + +```bash +# Backend (Python) +cd backend +pip install -r requirements.txt +cp .env.example .env +uvicorn app.main:app --reload + +# Frontend (Node) +cd frontend +npm install +npm run dev +``` + +Run backend tests: +```bash +cd backend +pytest tests/ -v +```