Files
vlc-server/docs/vlc-sender.md
2026-02-06 17:09:16 +03:00

65 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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}:8888/upload.json` (multipart/form-data, поле `file`). Порт 8888 — стандартный для VLC iOS WiFi Upload.
## Переменные окружения
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
| `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)
```