Steve0x2a / DLimiter

利用Webhooks,平衡下载器PT上传和外网视频播放的限速器
40 stars 10 forks source link

DLimiter

用于下载器平衡PT上传和外网视频播放的限速器

用途

在我们使用 qBittorrent 、Transmission 进行 PT、BT 保种的时候, 小水管上传很容易被跑满. 这时候如果用户想在外网访问家里的 NAS 使用 Emby 等软件播放视频的时候, 就会异常的卡顿.

因此, 此小工具利用 Emby Webhooks功能, 当接收到外网设备的播放Webhooks时, 对下载器进行限速;当接受到外网设备的播放结束Webhooks时, 对下载器取消限速.

业余摸鱼工具(屎山), 如有意见, 建议issue或直接pr.

NasTool 这款无敌的工具正在准备支持类似功能, 希望本项目(屎山)早日入土!

目前支持播放器

使用方法

首先将本项目clone到本地.复制conf文件夹里的config_example.toml, 重命名为config.toml, 并配置相关信息, 放在本项目文件夹. 然后执行:

docker-compose

docker-compose up -d

docker-cli

docker run -d \
    --name=dlimiter \
    -p 8088:8088 \
    -e DLIMITER_CN_UPDATE=true \
    -e DLIMITER_AUTO_UPDATE=true \
    -e DLIMITER_PORT=8088 \
    -e TZ=Asia/Shanghai \
    -v ${PWD}/conf:/app/conf \
    --hostname=dlimiter \
    --restart=always \
    steve0x2a/dlimiter:latest

如果你访问github的网络不太好,可以考虑在创建容器时增加设置一个环境变量-e DLIMITER_REPO_URL="https://ghproxy.com/https://github.com/Steve0x2a/DLimiter.git" \。

群晖

群晖 Docker 注册表里搜索dlimiter, 下载镜像,并使用该镜像进行新建容器.

配置文件映射如下图:

配置端口转发如下图:

检查环境配置是否正确,一般如下图即可:

第一次运行后,在前面设置的文件映射目录下会生成一个config_example.toml文件, 重命名为config.toml, 配置好相关信息, 并重启容器.

最后看到日志有类似以下输出即成功:

设置Webhooks

确保程序正确运行后, 打开播放器的后台页面, 添加 webhooks .

Emby

Jellyfin

Jellyfin 需要自行安装Webhooks插件并重启服务:

点击Add Generic Destination, 新建Webhooks.

按上图配置后并保存。

Plex

另外, Plex 配置文件里的 token 可以根据这篇文章获得.

当前 Plex 判断是否为内网是根据 Webhooks 的 local 字段来判断, 不确认这个字段是否可以识别端口转发情况, 如果发现不能识别, 请提 issue, 会尝试使用 api 增强准确性.

配置文件解析

首先是exclude_ip

[limiter]
exclude_ip = ["192.168.2.1","10.144.1.0/24"]

当接收到 Webhooks 时, 会先判断是否为外网ip.

但由于家宽很多设备都是利用路由器端口转发出去的, 因此在emby看来, 播放设备的ip地址为路由器自身的LAN地址, 因此, 我们要特殊处理该地址.

另外, 我们经常会使用类似 Zerotier 等虚拟内网设备访问 NAS , 因此虚拟内网的网段也许要被排除.

然后是emby设置:

[emby]
enable = true
url="http://127.0.0.1:8096"
api_key="xxx"

这里没什么好说, 配置url和apikey即可

最后是downloader设置:

目前支持两种下载器: qBittorrentTransmission . 根据样例配置文件即可配置多个下载器.

use_alt_speed_limits选项是考虑到部分用户会使用到qb的备用速度和tr的时段控制功能, 如果使用了这两个功能, 设为true即可.

另外, 由于qb和tr不限制速度的设置不太一样, 因此如果不想进行某项速度的限制, 建议将速度限制改为较大的数值(作者偷懒\o/)

TODO