65 lines
2.2 KiB
Markdown
65 lines
2.2 KiB
Markdown
# VLC Sender
|
||
|
||
Веб-приложение для отправки медиафайлов на VLC через WiFi Upload API.
|
||
|
||
## Архитектура
|
||
|
||
- **Backend**: Express (TypeScript) — API для навигации по файлам и отправки на VLC
|
||
- **Frontend**: Single-file HTML/CSS/JS в `src/public/index.html`
|
||
- **Docker**: multi-stage build на node:22-alpine
|
||
|
||
## API
|
||
|
||
| Endpoint | Метод | Описание |
|
||
|----------|-------|----------|
|
||
| `/api/files?path=` | GET | Список файлов/папок (name, size, isDir). Корень — список томов |
|
||
| `/api/send` | POST | Отправка файлов на VLC, возвращает SSE с прогрессом |
|
||
|
||
### POST /api/send
|
||
```json
|
||
{ "ip": "243", "files": ["Torrents/movie.mkv"] }
|
||
```
|
||
Путь файла: `{volume_label}/{subpath}`. Ответ — SSE stream с событиями: `start`, `done`, `error`, `complete`.
|
||
|
||
## VLC API
|
||
|
||
VLC принимает файлы через `POST http://192.168.1.{ip}:80/upload.json` (multipart/form-data, поле `file`).
|
||
|
||
## Переменные окружения
|
||
|
||
| Переменная | Значение по умолчанию | Описание |
|
||
|---|---|---|
|
||
| `PORT` | `3000` | Порт сервера |
|
||
| `MEDIA_PATHS` | `/media` | Тома для отображения (см. ниже) |
|
||
|
||
### MEDIA_PATHS
|
||
|
||
Поддерживает несколько томов через запятую. Два формата:
|
||
|
||
```bash
|
||
# С лейблами
|
||
MEDIA_PATHS=Torrents:/data/torrents,Media:/data/media
|
||
|
||
# Без лейблов (имя директории = лейбл)
|
||
MEDIA_PATHS=/data/torrents,/data/media
|
||
```
|
||
|
||
Обратная совместимость: `MEDIA_PATH` (без S) тоже поддерживается для одного тома.
|
||
|
||
## Docker
|
||
|
||
```bash
|
||
docker build -t vlc-sender .
|
||
```
|
||
|
||
`compose.yaml` использует `network_mode: host` для доступа к устройствам в локальной сети. Тома настраиваются в `.env` (см. `.env.example`).
|
||
|
||
## Структура
|
||
|
||
```
|
||
src/
|
||
├── index.ts # Express сервер + API
|
||
└── public/
|
||
└── index.html # Фронтенд (single file)
|
||
```
|