Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,7 @@ LOG_LEVEL=INFO
LOG_DEST=file
# Optional override; default is /app/data/streamdl.log when LOG_DEST is file/both
# LOG_FILE=/app/data/streamdl.log

# Intel /dev/dri passthrough is configured in docker-compose (devices/group_add),
# not via env. See README "Intel Quick Sync / /dev/dri passthrough".
# Default client FFmpeg is static and has no QSV yet (#611).
33 changes: 33 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,39 @@ Example directory setup before launching:
mkdir -p downloads/{,in}complete config data
```

### Intel Quick Sync / `/dev/dri` passthrough

StreamDL can optionally receive the host Intel graphics device so hardware encode/decode is possible **when FFmpeg supports it**.

**Important limitations today**

- The default client image uses `mwader/static-ffmpeg`, which does **not** include Quick Sync (QSV) or VAAPI. Passing `/dev/dri` into that image alone will not accelerate encodes.
- Most StreamDL downloads remux with stream copy (`-c copy` for VODs; optional via `FFMPEG_STREAM_COPY` for live). Remuxing does not use the GPU. Quick Sync only helps when something **re-encodes** (in-process via `FFMPEG_EXTRA_*`, or a `post_script` transcoder).
- A QSV/VAAPI-capable client image is tracked in #611; first-class hwaccel presets in #612.

**Enable device access (opt-in)**

1. Confirm the host has a render node, e.g. `ls -l /dev/dri`.
2. Note the `video` / `render` group IDs (they vary by distro):
```shell
getent group video render
stat -c '%g' /dev/dri/renderD128
```
3. In `docker-compose.yml`, uncomment the client `devices:` / `group_add:` block from `docker-compose.yml.example` and replace the example GIDs with yours.
4. Keep `PUID`/`PGID` as usual for download file ownership; `group_add` is separate and only grants DRM device access.

Example (GIDs illustrative only):

```yaml
devices:
- /dev/dri:/dev/dri
group_add:
- "44" # video
- "992" # render
```

On TrueNAS / Kubernetes-style apps, map the same device and supplemental groups through the UI or runtime equivalent of Docker `devices` + `group_add`.

### Logging

StreamDL can send full application logs to a file, container stdout, or both:
Expand Down
10 changes: 10 additions & 0 deletions docker-compose.yml.example
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,15 @@ services:
- ./downloads/complete:/app/out # completed downloads location
- ./config:/app/config # config folder - using a folder allows host updates without cycling the container
- ./data:/app/data # VOD DB + default streamdl.log when LOG_DEST=file/both
# Optional: Intel Quick Sync / VAAPI device passthrough (see README).
# Uncomment only on hosts with /dev/dri. GIDs are host-specific — run
# `stat -c '%g' /dev/dri/renderD128` and `getent group video render`.
# NOTE: The default client image ships static FFmpeg without QSV/VAAPI.
# Device access alone is not enough until a QSV-capable image is available (#611).
# devices:
# - /dev/dri:/dev/dri
# group_add:
# - "44" # video — replace with your host video GID
# - "992" # render — replace with your host render GID
depends_on:
- server
Loading