IPTV OTT Encoding & Streaming
Using NVIDIA GPU
NVIDIA GPUs contain one or more hardware-based decoder and encoder
units (separate from the CUDA cores) that provide fully-accelerated video decoding and
encoding for several popular codecs. With GPU decoding and encoding via NVENC and NVDEC
SDKs, IPVTL offloads heavy computational tasks from the CPU, freeing it for other
applications.
Before selecting NVIDIA video cards, visit the NVIDIA Video Encode and Decode GPU Support Matrix to ensure the card meets your requirements.
Set up NVIDIA GPU Streaming on Windows
To set up NVIDIA GPU streaming on Windows, desktop operating systems like Windows 10 are recommended over server OS. Make sure to install the latest NVIDIA video driver from NVIDIA Official Drivers.
Set up NVIDIA GPU Streaming on Linux
To enable NVIDIA GPU streaming on Linux, recent Linux distributions such as Ubuntu are recommended, as they provide better support for the latest NVIDIA video drivers. For example, Ubuntu includes the ubuntu-drivers tool for easy NVIDIA driver installation. For detailed instructions, visit Ubuntu NVIDIA Drivers Installation. Always install the latest video driver, as GPU encoding may not function with outdated drivers.
After driver installation, run nvidia-smi in a command console to verify the
installation.
# nvidia-smi
Wed Dec 11 09:52:10 2019
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 536.23 Driver Version: 536.23 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 Tesla K80 On | 00000000:00:1E.0 Off | N/A |
| 0% 43C P0 7W / 149W | 639MiB / 11441MiB | 1% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
+---------------------------------------------------------------------------------------+
Note: NVIDIA GeForce GTX/RTX series and Quadro models below
K2000/M2000/P2000/T2000 have a maximum of 3 to 5 encoding sessions per system. This
is a hard limit enforced by the NVIDIA driver. Other Quadro models, Tesla, and GRID cards do
not have this limitation.
To bypass this limit, follow the instructions at https://github.com/keylase/nvidia-patch
for a third-party driver patch (use at your own risk).
Set up NVIDIA Video Encoding
IPVTL supports H.264, HEVC, and AV1 encoding on NVIDIA GPUs. In channel configuration, channel configuration, select encodings with NVENC to enable GPU encoding.
Different NVIDIA video cards have different video encoding capabilities. For example, GeForce RTX 4060 supports AV1 encoding, while GeForce RTX 3060 and GTX 1660 do not. For details, visit NVIDIA Video Encode and Decode GPU Support Matrix.
Set up NVIDIA Video Decoding
If the channel source video is encoded in H.264, HEVC, or MPEG-2, you can enable NVDEC to perform full GPU transcoding. Select H.264 or HEVC with NVDEC/CUVID (matching your source video format) in advanced video settings > Misc. > GPU Decoding. This performs all video decoding, resizing, and encoding operations (including deinterlacing if required) on the GPU, avoiding unnecessary data transfers between system memory and video memory.
Tip: If you have multiple NVIDIA cards installed, specify which card to use in the settings above to balance the GPU load.
Monitor NVIDIA GPU Load
The GPU-Z tool can monitor NVIDIA GPU load on Windows. Go to the Sensors tab; Video Engine Load reflects the current NVDEC/NVENC load. Note that this is different from "GPU Load", which reflects 3D-rendering load instead. If you have multiple video cards, select them in IPVTL advanced video options and monitor them separately to maintain proper load balancing. Alternatively, you can use the GPU load monitor available in Windows 10 Task Manager and later.
On Linux, use nvidia-smi or nvtop for GPU monitoring.