# IPCam Orange Pi Dashboard Dashboard giám sát camera IP gọn nhẹ chạy trên Orange Pi, dựa trên MediaMTX: - Live View (WebRTC WHEP) dạng grid, auto reconnect, lazy load - Playback fMP4 theo camera + ngày (file list + HTML5 video) - Settings: quản lý camera + lịch ghi hình (scheduler ở backend) ## Cấu trúc thư mục - `src/`: frontend React - `api/`: backend FastAPI - `.trae/documents/`: tài liệu yêu cầu/kiến trúc ## Backend API - `GET /api/health` - `GET /api/config` - `POST /api/cameras` / `DELETE /api/cameras/{name}` - `GET /api/paths` (proxy trạng thái từ MediaMTX) - `POST /api/recording` (bật/tắt ghi hình ngay) - `POST /api/scheduler/enabled` / `POST /api/scheduler/schedule` - `GET /api/recordings?camera=cam1&date=YYYY-MM-DD` - `GET /videos//.fmp4` ## Chạy dev (máy dev) ### 1) Chạy backend ```bash python3 -m venv api/.venv source api/.venv/bin/activate pip install -r api/requirements.txt uvicorn api.app.main:app --host 0.0.0.0 --port 8008 ``` ### 2) Chạy frontend ```bash npm install npm run dev ``` Frontend dev server đã được cấu hình proxy `/api` và `/videos` sang `http://localhost:8008`. ## Cấu hình Backend tự tạo file cấu hình tại `api/data/config.json` khi chạy lần đầu. - `mediamtx_api_url`: ví dụ `http://127.0.0.1:9997` - `mediamtx_webrtc_url`: ví dụ `http://127.0.0.1:8889` - `recordings_dir`: ví dụ `/recordings` - `cameras`: danh sách camera (name + rtsp_url) - `schedule`: lịch ghi hình Có thể override WebRTC base URL ở frontend bằng biến môi trường `VITE_MEDIAMTX_WEBRTC_URL`. Có thể set giá trị mặc định khi chạy lần đầu bằng ENV (backend): - `MEDIAMTX_API_URL` (ví dụ `http://192.168.88.10:9997`) - `MEDIAMTX_WEBRTC_URL` (ví dụ `http://192.168.88.10:8889`) - `RECORDINGS_DIR` (ví dụ `/recordings` hoặc đường dẫn mount NFS/SMB) ## Chạy tách 2 thiết bị (cùng LAN) - Máy A (MediaMTX + ổ lưu recordings): chạy MediaMTX, mở cổng `9997/tcp`, `8889/tcp`, `8189/udp`, `8554/tcp` - Máy B (Dashboard backend + frontend): chạy FastAPI + serve web UI - Playback: máy B cần đọc được thư mục recordings của máy A (khuyến nghị mount NFS/SMB về `RECORDINGS_DIR`) Chi tiết xem `INSTALL.md`. ## Triển khai Xem hướng dẫn chi tiết trong `INSTALL.md`.