92 lines
3.3 KiB
Markdown
92 lines
3.3 KiB
Markdown
|
|
# 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
|
||
|
|
```
|