Improved hardware decoding

main
Prof. Andy Couturier 1 month ago
parent be78f984ac
commit 0ea343c25f

@ -5,10 +5,10 @@
Install everything in one step: Install everything in one step:
```bash ```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 `<IP>` with the server IP address, which will be provided during the event. Add a **GStreamer Source** in OBS and paste the appropriate pipeline. Replace `<IP>` 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
``` Use the tables below to find the right decoder element for your hardware. Replace `<DECODER>` in the game stream pipeline with your chosen element. Prefer vendor-specific over generic, and generic HW over software.
tcpclientsrc port=5000 host=<IP> ! matroskademux name=demux ! queue ! h265parse ! nvh265dec ! videorate ! videoconvert ! video. demux. ! queue ! audiorate ! audioconvert ! audio.
``` #### 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=<IP> ! matroskademux name=demux ! queue ! h265parse ! avdec_h265 ! videorate ! videoconvert ! video. demux. ! queue ! audiorate ! audioconvert ! audio. tcpclientsrc port=5000 host=<IP> ! matroskademux name=demux ! queue ! h265parse ! <DECODER> ! 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 `<DECODER>` with the element from the tables above (e.g. `nvh265dec`, `qsvh265dec`, `vah265dec`, `d3d11h265dec`, `avdec_h265`).
**Webcam** (MJPEG over TCP): **Webcam** (MJPEG over TCP):

Loading…
Cancel
Save