Ein lokaler Video-Streaming-Server, der Filme und Videodateien aus einem Verzeichnisbaum über das Netzwerk bereitstellt. Mit moderner Web-Oberfläche zum Durchsuchen, Filtern und Abspielen in jedem Browser — inklusive automatischer H.264-Konvertierung für nicht unterstützte Codecs.
Was ist der XteVision Media Server und für wen ist er gedacht?
Der **XteVision Media Server** (xtevision-media-server v1.0.0) ist ein lokaler Video-Streaming-Server, der Filme und Videodateien aus einem Verzeichnisbaum über das Netzwerk bereitstellt. Er bietet eine moderne Web-Oberfläche zum Durchsuchen, Filtern und Abspielen von Videos in jedem Browser — ohne zusätzliche Software-Installation auf dem Client. Er ist für die Re-Branding-Nutzung durch jedes Unternehmen konzipiert.
High-Level-Design und Kommunikationsablauf
┌─────────────────────────────────────────────────────────────────┐
│ Browser (moderner Browser) │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────────────────────┐ │
│ │ Video- │ │ Kategorie │ │ Video-Player (HTML5-Modal) │ │
│ │ Gried │ │-Filter │ │ + intelligenter Codec-Fallback │ │
│ └──────────┘ └──────────┘ └──────────────────────────────────┘ │
└──────────────────────────────┬──────────────────────────────────┘
│ HTTP/REST-API
┌──────────────────────────────┴──────────────────────────────────┐
│ Node.js-Server — Express.js (Port 5002) │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌──────────────────┐ │
│ │ /videos │ │ /thumbnail │ │ /video/ │ │ FFmpeg (transcod.) │ │
│ │ (Liste) │ │ (JPEG) │ │ original │ │ H.264 + AAC │ │
│ │ │ │ │ │ /h264 │ │ │ │
│ └───────────┘ └───────────┘ └───────────┘ └──────────────────┘ │
└──────────────────────────────┬──────────────────────────────────┘
│
┌──────────────────────────────┴──────────────────────────────────┐
│ Dateisystem (Quelle der Wahrheit) │
│ video/ → Ordnerybaum (Kategorien) │
│ .cache/ → h264/ + thumbnails/ │
└───────────────────────────────────────────────────────────────────┘GET /videos listet alle Dateien auf; GET /thumbnail/... lädt JPEGs; GET /video/original/... und GET /video/h264/... streamen MedienreaddirSync() liest den video/-Baum bei jedem /videos-AufrufDer XteVision Media Server ist für selbst gehosteten, LAN-only-Betrieb konzipiert:
ffmpeg-static eingebettetFrontend, Backend und Infrastrukturtechnologien
| Ebene | Technologie | Zweck |
|---|---|---|
| Laufzeit | Node.js ≥ 18 | Server-Laufzeit |
| Server | Express.js | HTTP-Server + API-Routen |
| Konvertierung | fluent-ffmpeg + ffmpeg-static | FFmpeg-Steuerung + eingebettetes Binary |
| Speicher | Dateisystem | Quellen (video/, .cache/) |
| Frontend | Vanilla HTML/CSS/JS | Single-Page-App, kein Framework |
| i18n | Clientseitige data-lang-* | EN / DE / ZH-Übersetzung |
ffmpeg-static enthalten — keine System-Installation nötig. Der Server ignoriert Dateien, die mit einem Punkt (.) beginnen (z. B. Apple Double ._file.mp4).Den XteVision Media Server auf Ihrem Server starten
# 1. Ins Projektverzeichnis wechseln
cd /pfad/zu/video_server
# 2. Abhängigkeiten installieren
npm install
Dabei werden folgende Pakete installiert:
| Paket | Zweck |
|---|---|
| express | HTTP-Server und Routing |
| fluent-ffmpeg | FFmpeg-Steuerung für Videokonvertierung |
| ffmpeg-static | FFmpeg-Binary (keine System-Installation nötig) |
npm start
# oder: node server.js
Der Server läuft dann auf http://localhost:5002. Konsolenausgabe bei erfolgreichem Start:
Using ffmpeg: /pfad/zu/ffmpeg-static
Video server running at http://localhost:5002
nohup node server.js > server.log 2>&1 &
Das Video-Verzeichnis und unterstützte Formate
Alle Videos liegen im Ordner video/ im Projektverzeichnis. Die Struktur ist nach Kunden/Projekten organisiert:
video/
├── Anting/
│ ├── anting.mp4
│ ├── biergarten720p.m4v
│ └── tiky_xuyun720p50.mp4
├── Porsche_VW/
├── Deutsche-Schule/
├── prodigy/
│ ├── prodigy_cn.mp4
│ ├── prodigy_de.mp4
│ └── prodigy_en.mp4
└── ...
video/ kopieren/videos neu.) beginnen (z. B. Apple Double ._file.mp4).| Format | Endung | MIME-Type |
|---|---|---|
| MPEG-4 | .mp4 | video/mp4 |
| QuickTime | .mov | video/quicktime |
| MPEG-4 Video | .m4v | video/x-m4v |
| Matroska | .mkv | video/x-matroska |
| AVI | .avi | video/x-msvideo |
| WebM | .webm | video/webm |
Durchsuchen, Filtern und Abspielen von Videos
Die Web-Oberfläche unter http://localhost:5002 ist in drei Bereiche unterteilt:
localStorage gespeichert) und Theme-Umschalter (Dark/Light)Nach Klick auf ein Video öffnet sich ein Overlay-Player:
× oder Drücken von EscDer Player erkennt automatisch, ob der Browser das Video nativ abspielen kann:
Direkter HTTP-Zugiff zu Daten und Medien
| Endpunkt | Beschreibung |
|---|---|
| GET /videos | Listet alle Videodateien als JSON-Array auf |
| GET /thumbnail/{pfad} | Gibt ein JPEG-Thumbnail zurück; bei Bedarf generiert, dann 24 Stunden gecached |
| GET /video/original/{pfad} | Streamt die Originaldatei mit HTTP-Range-Unterstützung (Springen in der Zeitleiste) |
| GET /video/h264/{pfad} | Streamt eine H.264-konvertierte Version; beim ersten Aufruf konvertiert, dann gecached |
# Alle Videos auflisten
curl http://localhost:5002/videos
# Thumbnail abrufen
curl http://localhost:5002/thumbnail/Anting/anting.mp4
# Original streamen (mit Range-Unterstützung)
curl http://localhost:5002/video/original/Anting/anting.mp4
# H.264-konvertierte Version streamen
curl http://localhost:5002/video/h264/Anting/anting.mp4
/videos:[
"Anting/anting.mp4",
"Anting/biergarten720p.m4v",
"prodigy/prodigy_cn.mp4"
]
Konvertierung, Thumbnails und Cache-Verwaltung
Wenn ein Video nicht nativ abgespielt werden kann, konvertiert der Server es automatisch in H.264 + AAC — das Format, das jeder moderne Browser abspielen kann.
| Parameter | Wert |
|---|---|
| Video-Codec | libx264 |
| Audio-Codec | aac |
| Pixel-Format | yuv420p |
| Profil | main |
| Preset | veryfast (schnell, akzeptable Qualität) |
| Qualität | CRF 23 |
| Streaming | frag_keyframe+empty_moov (sofortige Wiedergabe) |
Um den Server zu entlasten, werden Thumbnail-Generierungen in eine Warteschlange gelegt. Gleichzeitige Anfragen für dasselbe Thumbnail werden zusammengefasst (Deduplizierung). Generierte Thumbnails liegen in .cache/thumbnails/ und werden 24 Stunden lang direkt ausgeliefert (Cache-Control: public, max-age=86400).
.cache/
├── h264/ # H.264-konvertierte Videos
└── thumbnails/ # JPEG-Thumbnails
Beide Verzeichnisse spiegeln die Ordnerstruktur von video/ wider. Um den gesamten Cache zu löschen (z. B. nach Änderungen an den Originaldateien):
# Cache-Verzeichnisse löschen
rm -rf .cache/h264/* .cache/thumbnails/*
# Oder die gesamten Cache-Ordner
rm -rf .cache
Häufige Probleme und Lösungen
lsof -i :5002 prüfen, dann den Prozess beenden (kill -9 [PID]).Using ffmpeg: undefined bedeutet, ffmpeg-static ist nicht korrekt installiert — npm install ffmpeg-static ausführen..cache/h264/-Ordner beschreibbar ist.video/-Verzeichnis existiert. Dateinamen mit Sonderzeichen werden URL-kodiert erwartet..cache/thumbnails/-Ordner beschreibbar ist.-ss 2).