fix: enforce transcoding resource controls

This commit is contained in:
ShukeBta
2026-05-29 13:54:19 +08:00
parent 27df93fa3d
commit a8395c9de7
16 changed files with 363 additions and 55 deletions
+24 -14
View File
@@ -238,7 +238,7 @@ mkdir -p data cache media downloads
```bash
cat > .env <<'EOF'
# 固定版本;需要升级时改成新的 MediaStationGo-vX.Y.Z 后执行 docker compose pull && docker compose up -d
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.15
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.16
MEDIASTATION_HTTP_PORT=18080
# 程序数据和缓存建议放在 MediaStationGo 部署目录下,便于备份和迁移。
@@ -307,7 +307,7 @@ vim docker-compose.yml
#
# 镜像版本:
# 默认拉取 latest;如需固定版本,创建 .env 并写入:
# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.15
# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.16
#
# 路径映射总览:
# /data 程序数据目录。保存 SQLite 数据库、JWT secret、系统配置等,必须持久化。
@@ -402,8 +402,14 @@ services:
MEDIASTATION_LOGGING_LEVEL: ${MEDIASTATION_LOGGING_LEVEL:-info}
# 转码配置。留空表示自动/软件转码;硬件加速见下方 Intel/NVIDIA 示例。
MEDIASTATION_TRANSCODER_ENABLED: ${MEDIASTATION_TRANSCODER_ENABLED:-true}
MEDIASTATION_TRANSCODER_HARDWARE_ACCEL: ${MEDIASTATION_TRANSCODER_HARDWARE_ACCEL:-false}
MEDIASTATION_TRANSCODER_ENCODER: ${MEDIASTATION_TRANSCODER_ENCODER:-}
MEDIASTATION_TRANSCODER_MAX_HEIGHT: ${MEDIASTATION_TRANSCODER_MAX_HEIGHT:-1080}
MEDIASTATION_TRANSCODER_REALTIME: ${MEDIASTATION_TRANSCODER_REALTIME:-true}
MEDIASTATION_TRANSCODER_THREADS: ${MEDIASTATION_TRANSCODER_THREADS:-2}
MEDIASTATION_TRANSCODER_MAX_CONCURRENT: ${MEDIASTATION_TRANSCODER_MAX_CONCURRENT:-1}
MEDIASTATION_TRANSCODER_IDLE_TIMEOUT_SECONDS: ${MEDIASTATION_TRANSCODER_IDLE_TIMEOUT_SECONDS:-120}
# 跨域来源。通常无需设置;反向代理或三端客户端异常时再按需填写。
MEDIASTATION_APP_CORS_ORIGINS: ${MEDIASTATION_APP_CORS_ORIGINS:-}
@@ -415,7 +421,8 @@ services:
# Intel QSV / VAAPI 硬件加速示例:
# 1. Linux/NAS 宿主机存在 /dev/dri。
# 2. 在 .env 中设置 MEDIASTATION_TRANSCODER_ENCODER=vaapi。
# 2. 在 .env 中设置 MEDIASTATION_TRANSCODER_HARDWARE_ACCEL=true
# 和 MEDIASTATION_TRANSCODER_ENCODER=vaapi。
# 3. 取消下方 devices/group_add 注释。
# devices:
# - /dev/dri:/dev/dri
@@ -424,7 +431,8 @@ services:
# NVIDIA NVENC 硬件加速示例:
# 1. 宿主机安装 NVIDIA Container Toolkit。
# 2. 在 .env 中设置 MEDIASTATION_TRANSCODER_ENCODER=nvenc。
# 2. 在 .env 中设置 MEDIASTATION_TRANSCODER_HARDWARE_ACCEL=true
# 和 MEDIASTATION_TRANSCODER_ENCODER=nvenc。
# 3. 取消下方 gpus 注释。
# gpus: all
@@ -508,7 +516,7 @@ docker compose up -d
```bash
cat > .env <<'EOF'
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.15
MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.16
MEDIASTATION_HTTP_PORT=18080
MEDIASTATION_DATA_DIR=./data
MEDIASTATION_CACHE_DIR=./cache
@@ -771,26 +779,26 @@ cd MediaStationGo
| 平台 | 包名示例 |
| --- | --- |
| Linux x86_64 | `MediaStationGo-v0.0.15-linux-amd64.tar.gz` |
| Linux ARM64 | `MediaStationGo-v0.0.15-linux-arm64.tar.gz` |
| Windows x86_64 | `MediaStationGo-v0.0.15-windows-amd64.zip` |
| macOS Intel | `MediaStationGo-v0.0.15-darwin-amd64.tar.gz` |
| macOS Apple Silicon | `MediaStationGo-v0.0.15-darwin-arm64.tar.gz` |
| Linux x86_64 | `MediaStationGo-v0.0.16-linux-amd64.tar.gz` |
| Linux ARM64 | `MediaStationGo-v0.0.16-linux-arm64.tar.gz` |
| Windows x86_64 | `MediaStationGo-v0.0.16-windows-amd64.zip` |
| macOS Intel | `MediaStationGo-v0.0.16-darwin-amd64.tar.gz` |
| macOS Apple Silicon | `MediaStationGo-v0.0.16-darwin-arm64.tar.gz` |
部署步骤:
```bash
# Linux 示例
tar -xzf MediaStationGo-v0.0.15-linux-amd64.tar.gz
cd MediaStationGo-v0.0.15-linux-amd64
tar -xzf MediaStationGo-v0.0.16-linux-amd64.tar.gz
cd MediaStationGo-v0.0.16-linux-amd64
MEDIASTATION_APP_PORT=18080 ./mediastation-go
```
Windows:
```powershell
Expand-Archive .\MediaStationGo-v0.0.15-windows-amd64.zip
cd .\MediaStationGo-v0.0.15-windows-amd64
Expand-Archive .\MediaStationGo-v0.0.16-windows-amd64.zip
cd .\MediaStationGo-v0.0.16-windows-amd64
$env:MEDIASTATION_APP_PORT = "18080"
.\mediastation-go.exe
```
@@ -947,6 +955,8 @@ MediaStationGo 不会把 `ffmpeg` 或 `ffprobe` 作为常驻守护进程启动
播放停止、转码任务取消或服务退出时,后台会结束对应转码任务。空闲状态下如果没有扫描、探测或转码,`ffmpeg/ffprobe` 不应持续占用 CPU。
默认 HLS 转码使用 NAS 友好的低负载策略:`MEDIASTATION_TRANSCODER_ENABLED=true` 是总开关,关闭后不会启动 ffmpeg 转码;`MEDIASTATION_TRANSCODER_HARDWARE_ACCEL=false` 是硬件加速总开关,只有开启后才会使用 `MEDIASTATION_TRANSCODER_ENCODER=nvenc/qsv/vaapi`;`MEDIASTATION_TRANSCODER_REALTIME=true` 按播放速度处理输入,`MEDIASTATION_TRANSCODER_THREADS=2` 限制软件编码线程,`MEDIASTATION_TRANSCODER_MAX_CONCURRENT=1` 限制同时转码数量,`MEDIASTATION_TRANSCODER_IDLE_TIMEOUT_SECONDS=120` 在播放器停止请求分片后自动结束 ffmpeg。
---
## 🔍 刮削与元数据策略