Aufbau einer selbstgehosteten Videoverarbeitungs- und Streaming-Plattform mit FFmpeg

FFMPG video procession image

Moderne Videoanwendungen benötigen mehr als nur einfache Datei-Uploads. Sie erfordern automatisierte Transkodierung, adaptives Streaming, Thumbnail-Generierung und eine skalierbare Verarbeitungspipeline.


Um diesen Bereich zu erkunden, habe ich eine selbstgehostete Videoverarbeitungsplattform mit Bun und FFmpeg entwickelt, die hochgeladene Videos in produktionsfertige HLS-Streams umwandelt.


Funktionsweise des Projekts:

Die Plattform ermöglicht Nutzern:

Videodateien hochladen

Videos automatisch im Hintergrund verarbeiten

Mehrere Videoauflösungen generieren

Adaptive HLS-Playlists erstellen

Thumbnails generieren

Vorschaubilder generieren

VTT-Dateien für die Video-Scrubbing-Vorschau generieren

Verarbeitungsstatus verfolgen

Nach der Verarbeitung werden die Videos als Streams mit adaptiver Bitrate bereitgestellt, die auf verschiedenen Geräten und unter verschiedenen Netzwerkbedingungen effizient wiedergegeben werden können.


Technologie-Stack

Backend

Bun

TypeScript

SQLite

Videoverarbeitung

FFmpeg

FFprobe

Bereitstellung

Docker

Docker Compose

Verarbeitungspipeline

Beim Hochladen eines Videos:

1. Videoanalyse

FFprobe extrahiert Metadaten wie:

Dauer

Auflösung

Codec-Informationen

Bildrate

2. Thumbnail-Generierung

Das System generiert Vorschaubilder aus dem Quellvideo.


3. Multi-Bitrate-Transkodierung

Das Video wird in mehrere Auflösungen konvertiert:

1080p

720p

480p

Jeder Stream wird mit H.264 und AAC kodiert.


4. HLS-Paketierung

FFmpeg erstellt:

.m3u8-Playlists

.ts-Segmente

Für adaptives Streaming wird eine Master-Playlist generiert.


Beispiel:

1080/playlist.m3u8

720/playlist.m3u8

480/playlist.m3u8

master.m3u8


5. Vorschau-Assets

Zusätzliche Assets werden generiert:

Thumbnail-Sprites

WebVTT-Timeline-Vorschauen

Diese verbessern die Benutzerfreundlichkeit beim Durchsuchen von Videos.


Warum HLS?

HLS (HTTP Live Streaming) bietet mehrere Vorteile:

Adaptives Bitraten-Streaming

Bessere Wiedergabe in langsamen Netzwerken

Reduzierte Pufferung

Breite Browser- und Geräteunterstützung

CDN-freundliche Architektur

Anstatt eine einzelne große Videodatei zu streamen, wechselt der Player dynamisch zwischen verschiedenen Qualitätsstufen, abhängig von den Netzwerkbedingungen.


Aktuelle Funktionen

✅ Video-Upload

✅ FFmpeg-Verarbeitung

✅ Transkodierung mehrerer Auflösungen

✅ HLS-Streaming

✅ Thumbnail-Generierung

✅ Vorschau-Sprite-Generierung

✅ WebVTT-Timeline-Vorschau

✅ SQLite-Speicherung

✅ Docker-Bereitstellung

Fazit

Dieses Projekt demonstriert, wie ein schlanker Stack aus Bun, FFmpeg, SQLite und Docker genutzt werden kann, um eine vollständige Videoverarbeitungspipeline zu erstellen, die adaptive HLS-Streams und Video-Vorschau-Assets generiert.

Es bietet eine solide Grundlage für die Entwicklung von Videoplattformen, Online-Lernsystemen, Mediatheken oder jeder Anwendung, die eine effiziente Videobereitstellung in großem Umfang erfordert.

Projektlink: github.com/joy095/ffmpeg-video-stream

Portfolio: joykarmakar.vercel.app

LinkedIn: linkedin.com/in/joy-karmakar-cooch-behar

ende