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-smiFalls er fehlt:
apt update
apt install -y nvidia-driver-550 nvidia-utils-550
rebootNach 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 nvencSie 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.m3u8scale_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.5MBeachten 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 uDie 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:
| GPU | 1080p ABR-Leitern | SD-Leitern |
|---|---|---|
| RTX PRO 4500 (32 GB) | 8-12 | 30-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.