open-how2 – Entdecke. Verstehe. Nutze.
Veröffentlicht am
How2-Tipps

FFmpeg auf Debian: HLS-Streaming selbst hosten – Schritt für Schritt Anleitung

Autor
FFmpeg auf Debian: HLS-Streaming selbst hosten – Schritt für Schritt Anleitung

Einführung

Streaming ist heute Standard – egal ob für eigene Plattformen, Schulungsportale oder Video-Hosting. Ein besonders verbreiteter Standard ist HTTP Live Streaming (HLS). Entwickelt von Apple Inc., ermöglicht HLS das adaptive Streaming von Videos in unterschiedlichen Qualitätsstufen.

Das Beste daran: Mit FFmpeg kannst du das komplett selbst auf einem Debian-Server umsetzen – ohne externe Dienste.

In diesem Beitrag zeige ich dir Schritt für Schritt, wie du:

  • FFmpeg installierst
  • Videos in HLS umwandelst
  • Multi-Bitrate Streaming einrichtest
  • alles über deinen Webserver auslieferst

Voraussetzungen

Du brauchst:

  • Debian Server (z. B. Debian 12)
  • SSH-Zugriff
  • Webserver (Apache oder Nginx)
  • ein Testvideo (input.mp4)

1. FFmpeg installieren

Zuerst installierst du FFmpeg:

apt update
apt install ffmpeg -y

Version prüfen:

ffmpeg -version

👉 Hinweis: Die Debian-Version ist oft nicht die aktuellste. Wenn du moderne Codecs brauchst (AV1, bessere Performance), kannst du:

  • Debian Backports nutzen
  • oder statische Builds verwenden

📁 2. HLS-Verzeichnis anlegen

Deine HLS-Dateien müssen über HTTP erreichbar sein:

mkdir -p /var/www/hls

👉 Wichtig: Dieser Ordner muss in deinem Webserver eingebunden sein (z. B. /hls/).

3. Einfaches HLS-Streaming (VOD)

Jetzt wandelst du ein Video in HLS um:

ffmpeg -i input.mp4 \
  -c:v libx264 -preset veryfast -crf 23 \
  -c:a aac -b:a 128k \
  -f hls \
  -hls_time 6 \
  -hls_list_size 0 \
  -hls_segment_filename "/var/www/hls/segment_%03d.ts" \
  /var/www/hls/playlist.m3u8

Was passiert hier?

  • Video wird in H.264 kodiert
  • Audio in AAC
  • Video wird in kleine Stücke (Segmente) zerlegt
  • Playlist (.m3u8) wird erzeugt

👉 Ergebnis:

/var/www/hls/
├── playlist.m3u8
├── segment_000.ts
├── segment_001.ts
└── ...

4. Adaptive Bitrate (Multi-Quality Streaming)

Für professionelle Anwendungen brauchst du mehrere Qualitätsstufen:

ffmpeg -i input.mp4 \
  -filter_complex "[0:v]split=2[v1][v2]; \
                   [v1]scale=1280:720[v1out]; \
                   [v2]scale=854:480[v2out]" \
  -map "[v1out]" -c:v:0 libx264 -b:v:0 3000k \
  -map "[v2out]" -c:v:1 libx264 -b:v:1 1500k \
  -map a:0 -c:a aac -b:a 128k \
  -f hls \
  -var_stream_map "v:0,a:0 v:1,a:0" \
  -master_pl_name master.m3u8 \
  -hls_time 6 \
  -hls_list_size 0 \
  -hls_segment_filename "/var/www/hls/v%v/segment_%03d.ts" \
  /var/www/hls/v%v/playlist.m3u8

👉 Ergebnis:

/var/www/hls/
├── master.m3u8
├── v0/
│   ├── playlist.m3u8
│   └── segment_000.ts
└── v1/
    ├── playlist.m3u8
    └── segment_000.ts

👉 Vorteil:

  • Automatische Qualitätsanpassung je nach Bandbreite

5. Webserver konfigurieren (Apache)

Damit HLS korrekt funktioniert, müssen MIME-Typen gesetzt werden.

Aktiviere Modul:

a2enmod mime
systemctl restart apache2

Dann in deine Config:

AddType application/vnd.apple.mpegurl .m3u8
AddType video/mp2t .ts

👉 Ohne diese Einstellungen funktionieren viele Player nicht!

6. Wiedergabe testen

Du kannst dein Video jetzt öffnen mit:

  • VLC media player
  • oder im Browser mit Video.js

Beispiel-URL:

http://dein-server/hls/master.m3u8

7. Live-Streaming mit FFmpeg

Auch Live-Streams sind möglich:

ffmpeg -i rtsp://camera-stream \
  -c:v libx264 -preset veryfast \
  -c:a aac \
  -f hls \
  -hls_time 2 \
  -hls_list_size 5 \
  -hls_flags delete_segments \
  /var/www/hls/live.m3u8

👉 Features:

  • kurze Segmente → geringe Verzögerung
  • automatische Löschung alter Segmente

8. Performance & Optimierung

CPU sparen

  • -preset veryfast oder superfast
  • Hardware-Encoding:

    • Intel: VAAPI
    • NVIDIA: NVENC

Latenz reduzieren

-hls_time 2
-hls_flags delete_segments

Speicher sparen

  • Segment-Rotation aktivieren
  • alte Dateien automatisch löschen

Typische Fehler

❌ Video lädt nicht

→ MIME-Type fehlt

❌ Kein Ton

→ falscher Codec (AAC nutzen!)

❌ hohe CPU-Last

→ Preset zu langsam

❌ Browser spielt nicht ab

→ kein HLS-Support → nutze Video.js

Bonus: Einfache Pipeline (Praxis)

Typischer Workflow:

  1. Upload (PHP / Webinterface)
  2. Speicherung auf Server
  3. FFmpeg-Job starten
  4. HLS-Dateien erzeugen
  5. Player anzeigen

👉 Perfekt für deine Plattform (Laravel / PHP / Botsystem)

Mit FFmpeg auf Debian kannst du:

  • eigene Streaming-Plattform bauen
  • Videos effizient bereitstellen
  • adaptive Qualität anbieten
  • komplett unabhängig von externen Diensten arbeiten

👉 Der größte Vorteil: volle Kontrolle über Daten, Performance und Infrastruktur