Software x264-Transkodierung überlastet CPUs — ein einzelner 1080p H.264-Stream mit mittlerem Preset belegt 4-6 Kerne. NVENC, der in NVIDIA GPUs integrierte Hardware-Encoder, erledigt dieselbe Aufgabe mit einem Bruchteil des Stromverbrauchs und entlastet Ihre CPUs für Ingest und Packaging. Diese Anleitung richtet FFmpeg mit NVENC unter Ubuntu für die Live IPTV/Streaming-Transkodierung ein.

Wir zielen auf einen GPU-Server mit einer RTX PRO 4500 oder 6000 Blackwell ab — siehe unsere Seite zum Video-Transkodierungsserver für die Hardware.

Voraussetzungen

  • Ubuntu 22.04 mit einer NVIDIA GPU (RTX PRO, RTX 4090, L4, L40S)
  • Root-Zugriff
  • Grundkenntnisse der FFmpeg-Befehlszeile

Schritt 1 — NVIDIA-Treiber installieren

Auf einer Hostfory GPU-Box ist der Treiber normalerweise vorinstalliert. Überprüfen Sie dies:

nvidia-smi

Falls er fehlt:

apt update
apt install -y nvidia-driver-550 nvidia-utils-550
reboot

Nach dem Neustart sollte nvidia-smi Ihre GPU, Treiberversion und CUDA-Version anzeigen.

Schritt 2 — FFmpeg mit NVENC-Unterstützung installieren

Das FFmpeg aus dem Ubuntu-Repository fehlt oft NVENC. Installieren Sie einen Build, der es enthält, oder kompilieren Sie es. Der schnellste Weg ist der statische Build von BtbN:

cd /opt
wget https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz
tar xf ffmpeg-master-latest-linux64-gpl.tar.xz
mv ffmpeg-master-latest-linux64-gpl ffmpeg
ln -sf /opt/ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg
ln -sf /opt/ffmpeg/bin/ffprobe /usr/local/bin/ffprobe

Überprüfen Sie, ob NVENC verfügbar ist:

ffmpeg -hide_banner -encoders | grep nvenc

Sie sollten h264_nvenc, hevc_nvenc und auf Blackwell/Ada av1_nvenc sehen.

Schritt 3 — Eine grundlegende Live-Transkodierung

Ziehen Sie einen Eingabestream, transkodieren Sie ihn zu H.264 NVENC und pushen Sie ihn an einen Ausgang:

ffmpeg -hwaccel cuda -hwaccel_output_format cuda \
  -i "http://source/stream.ts" \
  -c:v h264_nvenc -preset p4 -tune ll -b:v 5M -maxrate 6M -bufsize 10M \
  -c:a aac -b:a 128k \
  -f mpegts "udp://127.0.0.1:1234"

Wichtige Flags:

  • -hwaccel cuda -hwaccel_output_format cuda — Frames auf der GPU halten, CPU-Roundtrips vermeiden
  • -preset p4 — NVENC-Preset (p1 am schnellsten → p7 am langsamsten/beste Qualität). p4 ist ein guter Kompromiss für Live-Anwendungen
  • -tune ll — Low-Latency-Tuning für Live-Anwendungen
  • -b:v 5M -maxrate 6M -bufsize 10M — Ziel 5 Mbps, Bursts auf 6 Mbps begrenzen

Schritt 4 — Eine ABR-Leiter erstellen

Für adaptives Streaming geben Sie mehrere Stufen aus. Dies erzeugt eine 3-stufige HLS-Leiter (1080p/720p/480p) aus einem Eingang, alles auf der GPU:

ffmpeg -hwaccel cuda -hwaccel_output_format cuda \
  -i "http://source/stream.ts" \
  -filter_complex "[0:v]split=3[v1][v2][v3]; \
    [v1]scale_cuda=1920:1080[v1out]; \
    [v2]scale_cuda=1280:720[v2out]; \
    [v3]scale_cuda=854:480[v3out]" \
  -map "[v1out]" -c:v:0 h264_nvenc -preset p4 -b:v:0 5M \
  -map "[v2out]" -c:v:1 h264_nvenc -preset p4 -b:v:1 3M \
  -map "[v3out]" -c:v:2 h264_nvenc -preset p4 -b:v:2 1500k \
  -map a:0 -c:a aac -b:a 128k \
  -f hls -var_stream_map "v:0,a:0 v:1,a:0 v:2,a:0" \
  -master_pl_name master.m3u8 \
  -hls_time 6 -hls_list_size 6 \
  /var/www/hls/stream_%v.m3u8

scale_cuda hält die Skalierung ebenfalls auf der GPU — entscheidend für die Dichte. Eine einzelne RTX PRO 4500 bewältigt 8-12 dieser 1080p-Leitern gleichzeitig.

Schritt 5 — Wechsel zu HEVC oder AV1 zur Bandbreitenersparnis

HEVC (hevc_nvenc) reduziert die Bitrate um ca. 35-40% bei gleicher Qualität. AV1 (av1_nvenc, nur Ada/Blackwell) spart noch mehr:

# HEVC
-c:v hevc_nvenc -preset p4 -b:v 3M -maxrate 4M -bufsize 8M

# AV1 (RTX 40-series / Blackwell)
-c:v av1_nvenc -preset p4 -b:v 2.5M

Beachten Sie Ihre STB-Flotte — ältere MAG-Boxen und viele Smart-TVs dekodieren HEVC/AV1 nicht zuverlässig. Testen Sie, bevor Sie Ihr gesamtes Panel umstellen, sonst geben Sie mehr für Support-Tickets aus, als Sie an Bandbreite sparen.

Schritt 6 — GPU-Auslastung überwachen

Encoder-Last in Echtzeit überwachen:

nvidia-smi dmon -s u

Die Spalte enc zeigt die NVENC-Auslastung. Wenn sie bei 100% liegt, haben Sie das Session-Limit der GPU erreicht — fügen Sie eine zweite GPU hinzu oder verschieben Sie einige Streams auf eine andere Box.

Dichte-Referenz

Ungefähre gleichzeitige Leiter-Anzahlen, die wir in der Produktion sehen:

GPU1080p ABR-LeiternSD-Leitern
RTX PRO 4500 (32 GB)8-1230-40
RTX PRO 6000 (96 GB)20+30-50
RTX 4090 (24 GB)6-8 (3-session limit)20-30

Die RTX PRO-Serie hat kein NVENC-Session-Limit — deshalb empfehlen wir sie für ernsthafte Transkodierungsfarmen gegenüber der Consumer RTX 4090.

Nächste Schritte

Integrieren Sie dies in einen systemd-Dienst oder einen Stream-Manager (Nimble, Flussonic). Für eine vollständige Panel-Einrichtung siehe unsere Xtream UI-Anleitung. Um die GPU für Ihre Kanalanzahl zu dimensionieren, prüfen Sie, wie viel GPU Sie tatsächlich benötigen oder sprechen Sie mit unserem Engineering-Team.