# IPCam Orange Pi Dashboard (Updated)

## 1. Overview
IPCam Orange Pi Dashboard is a lightweight web-based surveillance system built on top of MediaMTX.

The system is designed for:
- Orange Pi (low-resource hardware)
- Multiple IP cameras (4–10 cams)
- No AI processing (unlike Frigate)
- Full control via MediaMTX Control API

---

## 2. Architecture

### Components
- IP Cameras (RTSP - H264 recommended)
- MediaMTX (stream proxy + recorder + API)
- Dashboard Backend (scheduler + API)
- Dashboard Frontend (live view + playback UI)

### Data Flow
Camera → MediaMTX → WebRTC → Dashboard  
Camera → MediaMTX → Recording (fMP4) → Storage → Playback UI  

---

## 3. Core Features

### 3.1 Live View
- Grid layout (1 / 4 / 9 cameras)
- WebRTC streaming (low latency)
- Auto reconnect
- Lazy loading streams

### 3.2 Playback
- List recordings by:
  - Camera
  - Date
- Play fMP4 files via HTML5 video
- File-based playback (no timeline initially)

### 3.3 Camera Management
- Add/remove camera (update MediaMTX config)
- Reload MediaMTX if needed

### 3.4 Recording Schedule (IMPORTANT)
- Configure recording time per system:
  - Weekdays: 18:00 → 08:00
  - Weekend: 24h
- Implemented in Dashboard (NOT MediaMTX)

---

## 4. MediaMTX Integration

### 4.1 Endpoints
- RTSP: rtsp://<server>:8554/<path>
- WebRTC: http://<server>:8889
- API: http://<server>:9997

---

### 4.2 Control API Usage

#### Enable API
```
api: true
apiAddress: :9997
```

---

### 4.3 Toggle Recording via API

#### Enable recording
```
POST /v3/config/paths/patch
{
  "paths": {
    "cam1": { "record": true }
  }
}
```

#### Disable recording
```
POST /v3/config/paths/patch
{
  "paths": {
    "cam1": { "record": false }
  }
}
```

---

### 4.4 Bulk Update
```
{
  "paths": {
    "cam1": { "record": true },
    "cam2": { "record": true },
    "cam3": { "record": true },
    "cam4": { "record": true }
  }
}
```

---

## 5. Scheduler Design

### Logic
- Dashboard backend controls recording
- Runs every 60 seconds

### Example Logic
```
if weekend:
    record = true
else:
    record = (hour >= 18 or hour < 8)
```

### Implementation
- setInterval / cron job in backend
- Calls MediaMTX API

---

## 6. Storage

### Format
- fMP4 segments

### Path
```
/recordings/<camera>/<timestamp>.fmp4
```

### Notes
- Files created per segment (e.g., 5 minutes)
- Recording starts immediately when enabled

---

## 7. Technology Stack

### Backend
- Node.js (Express) or Python (FastAPI)
- Responsibilities:
  - Scheduler
  - MediaMTX API integration
  - Recording index API

### Frontend
- HTML + JS (or React)
- WebRTC player
- Video playback UI

---

## 8. Performance Requirements

- 4–5 simultaneous streams
- Minimal CPU usage (no transcoding)
- Stable on Orange Pi

---

## 9. Constraints

- Browser requires H264 (NOT H265)
- WebRTC requires UDP port (8189) open
- Firewall must allow:
  - 8554 (RTSP)
  - 8889 (WebRTC HTTP)
  - 8189/UDP (ICE)

---

## 10. Future Enhancements

- Timeline playback (merge segments)
- Multi-user authentication
- Mobile UI
- Event-based recording (optional)

---

## 11. Summary

- MediaMTX handles streaming + recording
- Dashboard handles logic + scheduling
- Recording is controlled via API (not config reload)

This architecture is optimized for simplicity, performance, and scalability on Orange Pi.
