如果要使用VA-API,那么最低至少应该是J1900的CPU,而如果要使用QSV则至少要N3710的CPU(DS916+)。如果低于这个,那么本文没啥用,不用看了。我是DS918+,算是最低端的可硬解的J3455的CPU
首先,ssh进入群晖,提升至root权限,然后执行命令:
ll /dev/dri
这里可以看到核显相关信息,然后需要获取renderD128这个设备的用户组,也就是videodriver的GID,常规情况下,也就是普通Linux下应该使用如下命令:
getent group render | cut -d: -f3
但是群晖是没有这个命令的,所以需要变通一下,使用下面的命令:
synogroup --get videodriver
可以看到我这里的GID是937,记住这个,后面要用。
接下来我们写一个docker compose文件
version: "3"
networks:
work-net:
external:
name: work-net
services:
jellyfin:
image: nyanmisaka/jellyfin:latest
container_name: jellyfin
hostname: jellyfin-syno
user: 100:100 #一般群晖普通用户就是这样写
environment:
- TZ=Asia/Shanghai
group_add:
- "937" #这里需要填写上面查到的用户组GID
networks:
- work-net
volumes:
- /volume1/docker/jellyfin/config:/config
- /volume1/video:/media
ports:
- 7359:7359/udp
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
- "traefik.enable=true"
- "traefik.http.routers.app-jellyfin.rule=Host(`v.test.com`)"
- "traefik.http.routers.app-jellyfin.tls=true"
- "traefik.http.routers.app-jellyfin.tls.certresolver=cloudflare"
- "traefik.http.routers.app-jellyfin.entrypoints=websecure"
- "traefik.http.routers.app-jellyfin.service=srv-jellyfin"
- "traefik.http.services.srv-jellyfin.loadbalancer.server.port=8096"
把这个放到Portainer里新建的Stack里部署即可。如果提示/volume1/docker/jellyfin/config不存在,则手动创建。网络部分因为我有一个自己使用的网络,需要配合traefik做转发,可根据具体情况修改成别的,或者直接删除networks相关。
配置Jellyfin以后,进行转码设置,设置内容如下
接下来我们做个测试,以阿凡达:水之道来做测试,片源信息如下
将其转码为1080p 10Mbps看看播放效果如何
还不错,48fps,而此时的群晖cpu负载在40%左右,GPU开始工作了
实际上最关键的就是需要给docker相关的权限才能调用核显。网上的很多文章是直接在群晖系统内操作docker并且赋予最高权限,作为一个程序猿,这个做法我表示不能接受。