Transkodowanie programowe x264 obciąża procesory — pojedynczy strumień H.264 1080p przy średnim presecie zużywa 4-6 rdzeni. NVENC, sprzętowy koder wbudowany w procesory graficzne NVIDIA, wykonuje to samo zadanie przy ułamku mocy i uwalnia procesory do pozyskiwania i pakowania danych. Ten przewodnik konfiguruje FFmpeg z NVENC na Ubuntu do transkodowania IPTV/streamingu na żywo.

Celujemy w serwer GPU z RTX PRO 4500 lub 6000 Blackwell — sprzęt znajdziesz na naszej stronie serwera do transkodowania wideo.

Wymagania wstępne

  • Ubuntu 22.04 z procesorem graficznym NVIDIA (RTX PRO, RTX 4090, L4, L40S)
  • Dostęp root
  • Podstawowa znajomość wiersza poleceń FFmpeg

Krok 1 — Zainstaluj sterownik NVIDIA

Na serwerze GPU Hostfory sterownik jest zazwyczaj preinstalowany. Zweryfikuj:

nvidia-smi

Jeśli brakuje:

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

Po ponownym uruchomieniu, nvidia-smi powinien pokazać Twój GPU, wersję sterownika i wersję CUDA.

Krok 2 — Zainstaluj FFmpeg ze wsparciem NVENC

FFmpeg z repozytorium Ubuntu często nie posiada NVENC. Zainstaluj kompilację, która go zawiera, lub skompiluj samodzielnie. Najszybszą ścieżką jest statyczna kompilacja od 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

Zweryfikuj dostępność NVENC:

ffmpeg -hide_banner -encoders | grep nvenc

Powinieneś zobaczyć h264_nvenc, hevc_nvenc, a na Blackwell/Ada, av1_nvenc.

Krok 3 — Podstawowe transkodowanie na żywo

Pobierz strumień wejściowy, transkoduj do H.264 NVENC, wypchnij do wyjścia:

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"

Kluczowe flagi:

  • -hwaccel cuda -hwaccel_output_format cuda — utrzymuje klatki na GPU, unika podróży do CPU i z powrotem
  • -preset p4 — preset NVENC (p1 najszybszy → p7 najwolniejszy/najlepsza jakość). p4 to dobry balans dla transmisji na żywo
  • -tune ll — strojenie niskiego opóźnienia dla transmisji na żywo
  • -b:v 5M -maxrate 6M -bufsize 10M — cel 5 Mbps, ograniczenie burstów do 6 Mbps

Krok 4 — Zbuduj drabinkę ABR

Dla strumieniowania adaptacyjnego wyprowadzasz wiele szczebli. To tworzy 3-szczeblową drabinkę HLS (1080p/720p/480p) z jednego wejścia, wszystko na 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 również utrzymuje skalowanie na GPU — co jest kluczowe dla gęstości. Pojedynczy RTX PRO 4500 obsługuje jednocześnie 8-12 takich drabinek 1080p.

Krok 5 — Przejdź na HEVC lub AV1 w celu oszczędności przepustowości

HEVC (hevc_nvenc) obniża bitrate o ~35-40% przy tej samej jakości. AV1 (av1_nvenc, tylko Ada/Blackwell) oszczędza jeszcze więcej:

# 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

Obserwuj swoją flotę STB — starsze dekodery MAG i wiele Smart TV nie dekoduje HEVC/AV1 niezawodnie. Przetestuj przed przełączeniem całego panelu, w przeciwnym razie wydasz więcej na zgłoszenia do wsparcia niż zaoszczędzisz na przepustowości.

Krok 6 — Monitoruj wykorzystanie GPU

Obserwuj obciążenie enkodera w czasie rzeczywistym:

nvidia-smi dmon -s u

Kolumna enc pokazuje wykorzystanie NVENC. Jeśli jest na 100%, osiągnąłeś limit sesji GPU — dodaj drugi GPU lub przenieś niektóre strumienie na inny serwer.

Referencja gęstości

Przybliżona liczba równoczesnych drabinek, które obserwujemy w produkcji:

GPUDrabinki ABR 1080pDrabinki SD
RTX PRO 4500 (32 GB)8-1230-40
RTX PRO 6000 (96 GB)20+30-50
RTX 4090 (24 GB)6-8 (limit 3 sesji)20-30

Seria RTX PRO nie ma limitu sesji NVENC — dlatego polecamy ją do poważnych farm transkodujących zamiast konsumenckiego RTX 4090.

Co dalej

Zapakuj to w usługę systemd lub menedżera strumieni (Nimble, Flussonic). Aby uzyskać pełną konfigurację panelu, zobacz nasz przewodnik po Xtream UI. Aby dobrać rozmiar GPU do liczby kanałów, sprawdź ile GPU faktycznie potrzebujesz lub skontaktuj się z inżynierami.