From 0ea343c25f2ec2ff7ddece5288410e043283dcef Mon Sep 17 00:00:00 2001 From: "Prof. Andy Couturier" Date: Sun, 1 Mar 2026 15:50:16 -0400 Subject: [PATCH] Improved hardware decoding --- README.md | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index bf342d6..46f92a2 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,10 @@ Install everything in one step: ```bash -yay -S obs-gstreamer +yay -S obs-gstreamer gst-plugins-bad-libs gst-plugin-va gst-plugin-qsv gst-libav ``` -No further setup needed. Skip to the OBS pipelines below. +Skip to the OBS pipelines below. --- @@ -54,19 +54,41 @@ Restart OBS if it was running. Add a **GStreamer Source** in OBS and paste the appropriate pipeline. Replace `` with the server IP address, which will be provided during the event. -**Game stream** (H.265 over TCP with audio, NVIDIA GPU): +### H.265 decoder reference -``` -tcpclientsrc port=5000 host= ! matroskademux name=demux ! queue ! h265parse ! nvh265dec ! videorate ! videoconvert ! video. demux. ! queue ! audiorate ! audioconvert ! audio. -``` +Use the tables below to find the right decoder element for your hardware. Replace `` in the game stream pipeline with your chosen element. Prefer vendor-specific over generic, and generic HW over software. + +#### Linux + +| Hardware | Type | Vendor-Specific | Generic HW | Software Fallback | +|---|---|---|---|---| +| NVIDIA GPU (Maxwell+) | dGPU | `nvh265dec` | - | `avdec_h265` | +| Intel iGPU (Skylake+) | iGPU | `qsvh265dec` | `vah265dec` | `avdec_h265` | +| Intel Arc | dGPU | `qsvh265dec` | `vah265dec` | `avdec_h265` | +| AMD iGPU (Ryzen 2000G+) | iGPU | `vah265dec` | - | `avdec_h265` | +| AMD dGPU (Polaris+) | dGPU | `vah265dec` | - | `avdec_h265` | +| No GPU / F-series / non-G Ryzen | CPU | - | - | `avdec_h265` | + +#### Windows + +| Hardware | Type | Vendor-Specific | Generic HW | Software Fallback | +|---|---|---|---|---| +| NVIDIA GPU (Maxwell+) | dGPU | `nvh265dec` | `d3d11h265dec` | `avdec_h265` | +| Intel iGPU (Skylake+) | iGPU | `qsvh265dec` | `d3d11h265dec` | `avdec_h265` | +| Intel Arc | dGPU | `qsvh265dec` | `d3d11h265dec` | `avdec_h265` | +| AMD iGPU (Ryzen 2000G+) | iGPU | - | `d3d11h265dec` | `avdec_h265` | +| AMD dGPU (Polaris+) | dGPU | - | `d3d11h265dec` | `avdec_h265` | +| No GPU / F-series / non-G Ryzen | CPU | - | - | `avdec_h265` | + +### Game stream pipeline -**Game stream** (H.265 over TCP with audio, no NVIDIA GPU): +**Game stream** (H.265 over TCP with audio): ``` -tcpclientsrc port=5000 host= ! matroskademux name=demux ! queue ! h265parse ! avdec_h265 ! videorate ! videoconvert ! video. demux. ! queue ! audiorate ! audioconvert ! audio. +tcpclientsrc port=5000 host= ! matroskademux name=demux ! queue ! h265parse ! ! videorate ! videoconvert ! video. demux. ! queue ! audiorate ! audioconvert ! audio. ``` -The first pipeline uses `nvh265dec` for NVIDIA hardware decoding. The second uses `avdec_h265` for software decoding and works on any system (AMD, Intel, or no dedicated GPU). Software decoding uses more CPU but requires no specific graphics card. +Replace `` with the element from the tables above (e.g. `nvh265dec`, `qsvh265dec`, `vah265dec`, `d3d11h265dec`, `avdec_h265`). **Webcam** (MJPEG over TCP):