Einführung
Video-Streaming gehört heute zu den wichtigsten Technologien im Internet. Ob Schulungsplattform, Videobibliothek, Live-Übertragung oder eigenes Medienportal – Nutzer erwarten eine zuverlässige Wiedergabe auf Smartphones, Tablets, Computern und Smart-TVs.
Ein weit verbreiteter Standard dafür ist HTTP Live Streaming (HLS). Das von Apple Inc. entwickelte Verfahren zerlegt Videos in kleine Segmente und ermöglicht eine adaptive Anpassung der Bildqualität an die verfügbare Bandbreite.
Mit dem Open-Source-Werkzeug FFmpeg lässt sich HLS auch auf einem Debian-Server vollständig selbst betreiben – ohne externe Streaming-Dienste oder Cloud-Plattformen.
In diesem Artikel erfährst du:
- Wie FFmpeg unter Debian installiert wird
- Wie Videos in HLS umgewandelt werden
- Wie Multi-Bitrate-Streaming eingerichtet wird
- Welche Apache-Konfiguration erforderlich ist
- Welche Best Practices für den produktiven Betrieb gelten
Was ist HLS?
HLS (HTTP Live Streaming) basiert auf einem einfachen Prinzip:
Statt eine komplette Videodatei an den Client zu übertragen, wird das Video in viele kleine Segmente aufgeteilt.
Typischerweise entstehen:
playlist.m3u8 segment_000.ts segment_001.ts segment_002.ts ...
Die Playlist-Datei (.m3u8) beschreibt dabei, welche Videosegmente abgespielt werden müssen.
Der Player lädt die Segmente anschließend per HTTP nach.
Vorteile:
- Funktioniert über normale Webserver
- Keine speziellen Streaming-Server notwendig
- Hohe Skalierbarkeit
- Unterstützung durch nahezu alle modernen Geräte
- Adaptive Bitraten möglich
Voraussetzungen
Für die Einrichtung benötigst du:
- Debian 12 oder Debian 13
- Root-Zugriff oder sudo-Rechte
- Apache oder Nginx
- FFmpeg
- Ein Testvideo
FFmpeg installieren
Zunächst wird FFmpeg installiert:
apt update apt install ffmpeg -y
Anschließend kann die Installation überprüft werden:
ffmpeg -version
Die Ausgabe sollte Informationen zur installierten FFmpeg-Version anzeigen.
Verzeichnis für HLS-Dateien anlegen
Die erzeugten HLS-Dateien sollten in einem über den Webserver erreichbaren Verzeichnis gespeichert werden.
Beispielsweise:
mkdir -p /var/www/hls
Dieses Verzeichnis wird später die Playlists und Segmente enthalten.
Erstes Video in HLS umwandeln
Ein einfaches Beispiel:
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
Nach Abschluss befinden sich die HLS-Dateien im Zielverzeichnis.
Beispiel:
/var/www/hls/ ├── playlist.m3u8 ├── segment_000.ts ├── segment_001.ts ├── segment_002.ts └── ...
Die wichtigsten FFmpeg-Parameter
Video-Codec
-c:v libx264
Kodiert das Video in H.264.
Dieser Codec wird von praktisch allen Geräten unterstützt.
Audio-Codec
-c:a aac
Kodiert den Ton in AAC.
AAC ist der Standard für HLS.
Segmentlänge
-hls_time 6
Legt fest, dass jedes Segment sechs Sekunden lang ist.
Typische Werte:
AnwendungSegmentlängeVideo-on-Demand6–10 SekundenLive-Streaming2–4 SekundenNiedrige Latenz1–2 SekundenVollständige Playlist
-hls_list_size 0
Alle Segmente werden in der Playlist gespeichert.
Ideal für Video-on-Demand.
Multi-Bitrate-Streaming einrichten
Professionelle Streaming-Dienste stellen mehrere Qualitätsstufen bereit.
Der Client entscheidet selbst, welche Qualität aktuell sinnvoll ist.
Beispiel:
- 480p
- 720p
- 1080p
FFmpeg kann dies automatisch erzeugen.
Beispiel:
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
Die erzeugte Master-Playlist verweist auf alle verfügbaren Qualitätsstufen.
Apache für HLS konfigurieren
Damit Browser und Player die Dateien korrekt erkennen, müssen die MIME-Typen konfiguriert werden.
Viele Administratoren fragen sich, wo diese Einstellungen eingetragen werden sollen.
Die empfohlene Lösung ist die jeweilige Virtual-Host-Konfiguration unter:
/etc/apache2/sites-available/
Beispiel:
<VirtualHost *:80>
ServerName video.example.de
DocumentRoot /var/www/html
AddType application/vnd.apple.mpegurl .m3u8
AddType video/mp2t .ts
</VirtualHost>
Danach:
systemctl reload apache2
Alternative: Serverweite Konfiguration
Wer die MIME-Typen für alle Webseiten bereitstellen möchte, kann eine eigene Apache-Konfiguration erstellen.
Datei:
/etc/apache2/conf-available/hls.conf
Inhalt:
AddType application/vnd.apple.mpegurl .m3u8 AddType video/mp2t .ts
Aktivieren:
a2enconf hls systemctl reload apache2
MIME-Modul prüfen
Die Einstellungen funktionieren nur, wenn das Apache-MIME-Modul aktiv ist.
Prüfen bzw. aktivieren:
a2enmod mime systemctl reload apache2
Funktionstest
Nach der Konfiguration sollte die Playlist erreichbar sein:
http://server.example.de/hls/playlist.m3u8
Per Kommandozeile lässt sich der Content-Type prüfen:
curl -I http://server.example.de/hls/playlist.m3u8
Erwartete Ausgabe:
Content-Type: application/vnd.apple.mpegurl
Wiedergabe testen
Die Wiedergabe kann beispielsweise mit:
- VLC media player
- Video.js
erfolgen.
Gerade Video.js eignet sich hervorragend für eigene Webportale.
Live-Streaming mit FFmpeg
Neben Video-on-Demand unterstützt FFmpeg auch Live-Streams.
Beispiel für eine RTSP-Kamera:
ffmpeg -i rtsp://kamera-adresse \ -c:v libx264 \ -c:a aac \ -preset veryfast \ -f hls \ -hls_time 2 \ -hls_list_size 5 \ -hls_flags delete_segments \ /var/www/hls/live.m3u8
Hierbei werden fortlaufend neue Segmente erzeugt und alte automatisch entfernt.
Performance optimieren
Bei größeren Videomengen wird die CPU-Auslastung schnell zum Thema.
Empfehlungen:
Schnellere Presets
-preset veryfast
oder
-preset superfast
Hardware-Encoding
Moderne Server können häufig Hardware-Beschleunigung nutzen:
Intel
VAAPI
NVIDIA
NVENC
AMD
AMF
Dadurch sinkt die CPU-Last drastisch.
Typische Fehler
Playlist wird heruntergeladen statt abgespielt
Ursache:
MIME-Type fehlt.
Video startet nicht
Ursache:
Nicht unterstützter Codec.
Empfehlung:
- H.264
- AAC
Hohe CPU-Auslastung
Ursache:
Zu langsames Preset oder fehlende Hardware-Beschleunigung.
Schwarzer Bildschirm im Browser
Ursache:
Der Browser unterstützt HLS nicht direkt.
Lösung:
Video.js oder einen kompatiblen HLS-Player verwenden.
Mit FFmpeg und Debian lässt sich ohne zusätzliche Streaming-Software eine leistungsfähige HLS-Plattform aufbauen.
Die Kombination aus:
- FFmpeg
- Apache
- HLS
- H.264
- AAC
bietet eine stabile und bewährte Grundlage für Videoportale, E-Learning-Plattformen, Behördenportale oder interne Mediatheken.
Besonders attraktiv ist dabei, dass HLS vollständig auf normalen HTTP-Anfragen basiert und daher problemlos hinter Reverse-Proxys, Firewalls und Load-Balancern betrieben werden kann.
Wer bereits einen Debian-Webserver betreibt, kann mit wenigen Konfigurationsschritten eine professionelle Streaming-Infrastruktur aufbauen und behält dabei die volle Kontrolle über Daten, Qualität und Kosten.