Jellyfin 12.4 配置参数详解
逐项讲解 Jellyfin 12.4 配置体系:配置文件布局与三种查看/修改方式、/System/Configuration 全量 53 键参数总览、system.xml 与 encoding.xml 分类详解,并给出 API 全量回传、用户策略、手改 XML 三个实测修改闭环与家用 NAS 生产配置模板。
Jellyfin 12.4 配置参数详解
目标:逐项讲清 Jellyfin 12.4 的配置体系——配置文件布局、查看与修改的完整闭环、system.xml/encoding.xml/database.xml 全部关键参数的语义与实测默认值,并给出可套用的生产配置模板;所有取值均来自 Ubuntu 22.04 实测服务器(jellyfin 12.4+ubu2204)。
一、环境信息
- 操作系统:Ubuntu 22.04(服务器直装发行包)
- 软件版本:
jellyfin 12.4+ubu2204、jellyfin-server 12.4+ubu2204、jellyfin-web 12.4+ubu2204、jellyfin-ffmpeg8 8.1.3-1-jammy(dpkg实查) - 服务器进程版本:
Jellyfin.Server 12.4.0.0 - 配置目录:
/etc/jellyfin(XML 与日志模板) - 数据目录:
/var/lib/jellyfin(数据库、元数据、库结构) - 日志目录:
/var/log/jellyfin(滚动日志jellyfin20261027.log) - 缓存目录:
/var/cache/jellyfin(转码分片等临时产物) - 服务环境文件:
/etc/default/jellyfin - 管理账号:
admin / q1w2e3r4(演示账号)
二、前置条件
- 服务器上已按标准流程安装并启动 Jellyfin 12.4(本专栏部署指南篇可作参考),服务运行中:
systemctl status jellyfin --no-pager | head -5
实测回显:
● jellyfin.service - Jellyfin Media Server
Loaded: loaded (/lib/systemd/system/jellyfin.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/jellyfin.service.d
└─jellyfin.service.conf
Active: active (running) since Mon 2026-10-27 08:22:03 UTC; 5min ago
Main PID: 3589 (jellyfin)
- 具备 root 或 sudo 权限(改
/etc/jellyfin下文件与重启服务都需要); - 熟悉基本 API 调用方式(本文闭环示例会给出完整 curl 命令与真实回显,无需额外知识)。
三、配置文件布局与查看/修改方式
3.1 配置文件布局
ls /etc/jellyfin/
实测回显:
database.xml logging.default.json logging.json system.xml encoding.xml
system.xml:服务器全局参数(对应管理台「服务器」各页);encoding.xml:转码参数(对应管理台「播放 → 转码」);database.xml:数据库选项;logging.default.json/logging.json:日志级别模板。
⚠️ 注意:
networking.xml默认不生成——它只在管理台「网络」页第一次保存后才落盘(实测两台新装服务器均如此),不存在不代表配置丢失。
3.2 参数查看的三种方式
方式一:管理台。 浏览器登录管理端,控制台 各页面即当前生效参数的可视化视图,适合人工核对。
方式二:读配置文件。
grep -o '<PreferredMetadataLanguage>[^<]*</PreferredMetadataLanguage>' /etc/jellyfin/system.xml
实测回显:
<PreferredMetadataLanguage>zh-CN</PreferredMetadataLanguage>
方式三:API 总览。 一次拿回全部运行参数(本文「参数总览」即以此为基础):
curl -s -H 'Authorization: MediaBrowser Token="79c936645c374864bf1c67f938dc27eb", Client="curl-test", Device="curl", DeviceId="doc-001", Version="12.4.0"' \
http://127.0.0.1:8096/System/Configuration
输出为 53 个键的 JSON 对象(实测统计),键名与「参数总览」表一一对应。
3.3 参数修改的三种方式与生效规则
| 修改方式 | 生效方式 | 适用场景 |
|---|---|---|
| 管理台改 | 保存即落盘、即热生效 | 日常运维首选 |
API 改(POST /System/Configuration) | 返回 204 即落盘、即热生效 | 脚本化运维 |
| 手改 XML | 必须重启服务(systemctl restart jellyfin) | 批量初始化、恢复备份 |
⚠️ 注意:手改 XML 后不重启,运行中的服务不会感知变化,下次保存管理台时旧值还会覆盖手改值。XML 手改适合「离线批量初始化」,单参数微调走管理台或 API。
四、参数总览(/System/Configuration 全量 53 键)
以下为实测服务器回读的运行参数(ServerName、语言/地区、IsStartupWizardCompleted 为完成向导后的状态,其余均出厂默认):
| 分组 | 参数 | 实测值 | 语义 |
|---|---|---|---|
| 标识 | ServerName | jellyfin-lab | 服务器显示名(出厂为空,首启填主机名哈希) |
| 标识 | UICulture | zh-CN | 界面语言(出厂 en-US) |
| 标识 | IsStartupWizardCompleted | true | 向导完成标记(false 时 Web 强制进向导) |
| 语言 | PreferredMetadataLanguage | zh-CN | 元数据语言(出厂 en) |
| 语言 | MetadataCountryCode | CN | 元数据国家(出厂 US) |
| 排序 | SortReplaceCharacters | . , + % | 排序时替换为空格的字符 |
| 排序 | SortRemoveCharacters | , & - { } ' | 排序时直接剔除的字符 |
| 排序 | SortRemoveWords | the a an | 排序时忽略的冠词 |
| 续播 | MinResumePct | 5 | 进度 ≥5% 才记为「继续观看」 |
| 续播 | MaxResumePct | 90 | 进度 ≥90% 视为看完、不再续播 |
| 续播 | MinResumeDurationSeconds | 300 | 时长 <300 秒的条目不记续播 |
| 续播 | MinAudiobookResume | 5(分钟) | 有声书最小续播进度 |
| 续播 | MaxAudiobookResume | 5(分钟) | 有声书最大续播进度 |
| 续播 | InactiveSessionThreshold | 0 | 会话不活跃判定阈值(0=不判定) |
| 库 | LibraryMonitorDelay | 60(秒) | 文件变更后延迟 60 秒再刷新 |
| 库 | LibraryUpdateDuration | 30(分钟) | 定时全库扫描间隔 |
| 库 | LibraryScanFanoutConcurrency | 0 | 扫描并行度(0=自动) |
| 库 | LibraryMetadataRefreshConcurrency | 0 | 元数据刷新并行度(0=自动) |
| 库 | EnableFolderView | false | 是否显示「文件夹」视图 |
| 库 | EnableGroupingMoviesIntoCollections | false | 电影合入收藏集 |
| 库 | EnableGroupingShowsIntoCollections | false | 剧集合入收藏集 |
| 库 | DisplaySpecialsWithinSeasons | true | 特集并入对应季显示 |
| 元数据 | MetadataPath | 空(跟随数据目录) | 元数据独立存放路径 |
| 元数据 | MetadataOptions | 9 种条目类型 | 每类型的抓取器开关(见 5.6 节) |
| 元数据 | ImageSavingConvention | Legacy | 图片保存布局(Classic/Legacy) |
| 元数据 | ImageExtractionTimeoutMs | 0 | 章节图提取超时(0=不限) |
| 元数据 | ChapterImageResolution | MatchSource | 章节缩略图分辨率 |
| 元数据 | DummyChapterDuration | 0(分钟) | 无章节时自动造章节的间隔(0=关闭) |
| 元数据 | EnableExternalContentInSuggestions | true | 推荐位允许出现未入库的在线内容 |
| 元数据 | SaveMetadataHidden | false | 本地 NFO 是否带隐藏属性 |
| 缓存 | CacheSize | 600(MB) | 元数据图片缓存上限 |
| 转码 | CodecsUsed | [] | 已用编解码统计(空=未上报) |
| 转码 | RemoteClientBitrateLimit | 0 | 远程客户端码率上限(0=不限) |
| 转码 | ParallelImageEncodingLimit | 3 | 图片处理并行数 |
| 转码 | TrickplayOptions | 见 5.6 节 | 进度条缩略图(Trickplay)行为 |
| 网络 | IsPortAuthorized | true | 端口已授权注册(首启自检后置位) |
| 网络 | CorsHosts | * | CORS 允许来源 |
| 网络 | QuickConnectAvailable | true | Quick Connect 免密登录开关 |
| 网络 | EnableLegacyAuthorization | false | 旧版 X-Emby-Authorization 令牌方式 |
| 网络 | ContentTypes | [] | 按路径的响应类型覆盖 |
| 安全 | EnableMetrics | false | /metrics 监控端点开关 |
| 安全 | SkipDeserializationForBasicTypes | true | 内部类型跳过反序列化校验 |
| 日志 | LogFileRetentionDays | 3(天) | 日志保留天数 |
| 日志 | ActivityLogRetentionDays | 30(天) | 活动日志保留天数(0=永久) |
| 日志 | AllowClientLogUpload | true | 允许客户端上传诊断日志 |
| 性能 | EnableSlowResponseWarning | true | 慢响应告警 |
| 性能 | SlowResponseThresholdMs | 500(毫秒) | 慢响应判定阈值 |
| 插件 | PluginRepositories | Jellyfin Stable | 插件源清单 |
| 播放 | CastReceiverApplications | [] | 投屏接收端白名单 |
| 电视 | DisableLiveTvChannelUserDataName | false | 直播电视频道是否计用户数据 |
五、system.xml 核心参数分类详解
5.1 服务器标识与语言
<ServerName>jellyfin-lab</ServerName>
<UICulture>zh-CN</UICulture>
<PreferredMetadataLanguage>zh-CN</PreferredMetadataLanguage>
<MetadataCountryCode>CN</MetadataCountryCode>
<IsStartupWizardCompleted>true</IsStartupWizardCompleted>
ServerName:多台服务器并存时客户端按它区分;API 修改闭环见 8.1 节;PreferredMetadataLanguage/MetadataCountryCode:决定 TMDB 抓取的中文简繁与地区分级(如CN拉中文简介);IsStartupWizardCompleted:误改回false会让所有客户端被强跳向导——这是「改 XML 忘了这条」最常见的翻车点。
5.2 日志与活动记录
LogFileRetentionDays(默认 3):/var/log/jellyfin/下按日滚动的日志保留天数,实测日志文件名形如jellyfin20261027.log;排障期建议调到 7~14,平时 3 天够用;ActivityLogRetentionDays(默认 30):管理台「活动记录」页的保留天数,0表示永久保留;AllowClientLogUpload(默认 true):客户端可把诊断日志传回服务器;对安全敏感的内网可关;EnableSlowResponseWarning+SlowResponseThresholdMs(默认 true/500):API 响应超过 500ms 记 WARNING,是排查「界面卡顿」的第一信号源。
5.3 续播与播放状态阈值
三个参数联动决定「继续观看」的出现时机:
MinResumeDurationSeconds=300:片长不足 5 分钟不记续播;MinResumePct=5:进度不足 5% 视为没看过;MaxResumePct=90:进度超过 90% 视为看完,不再出现在「继续观看」。
实测闭环(一部 420 秒的测试影片,进度经 POST /Sessions/Playing/Progress 上报):
- 上报进度 120 秒(28.6%):虽然百分比达标,但绝对时长未过 300 秒线,停止播放后
IsResumable检索结果为 0,「继续观看」不出现; - 上报进度 350 秒(83.3%):两条线都过了,停止后
IsResumable检索结果为 1,续播位置 350 秒精确落库(3500000000 ticks,服务器日志原文User "admin" stopped playback of '"Sample Movie Three"' at "350000"ms)。
结论:测试/短视频场景若想支持续播,把 MinResumeDurationSeconds 调小即可;家庭影院默认值无需动。
5.4 媒体库扫描与监控
LibraryMonitorDelay=60(秒):inotify 收到文件变更后延迟半分钟再刷新,把「一次拷一批文件」合并成一次扫描;LibraryUpdateDuration=30(分钟):兜底定时全库扫描;LibraryScanFanoutConcurrency=0/LibraryMetadataRefreshConcurrency=0:并行度自动(按 CPU 分配);大库(万级条目)可显式调到 4~8,实测库越小收益越不明显;CacheSize=600(MB):海报/图片内存缓存上限,8GB 内存服务器可维持默认。
5.5 排序与命名
<SortReplaceCharacters>. , + %</SortReplaceCharacters>
<SortRemoveCharacters>, & - {} '</SortRemoveCharacters>
<SortRemoveWords>the a an</SortRemoveWords>
- 三个列表决定条目在海报墙里的排序键:先替换(
.``,+%→ 空格)、再剔除(,,&,-,{},')、再忽略冠词(the/a/an); - 中文库常见诉求是「按拼音排序」:Jellyfin 按字符集自然排序,中文条目建议在命名前缀里带数字(如
01 演示一),比调这三个参数更可控; EnableCaseSensitiveItemIds=true:内部条目 ID 区分大小写,保持默认,勿动。
5.6 元数据选项与 Trickplay
MetadataOptions 按 9 种条目类型(Book/Movie/MusicVideo/Series/MusicAlbum/MusicArtist/BoxSet/Season/Episode)独立配置抓取器。实测默认值里有两处值得注意:
MusicVideo类型禁用了The Open Movie Database(音乐视频用电影库抓取器无意义);MusicAlbum/MusicArtist禁用了TheAudioDB(默认不联网抓音乐元数据,纯靠文件内嵌标签)。
需要音乐在线刮削时,在管理台「库 → 元数据下载器」把 TheAudioDb 勾回即可。
TrickplayOptions 实测默认:ScanBehavior=NonBlocking(后台异步生成,不阻塞扫描)、Interval=10000(每 10 秒一张)、缩略图分辨率 320px、拼图 10×10、ProcessPriority=BelowNormal、EnableHwAcceleration=false。效果即播放进度条悬停时的缩略图预览;大库首次开启会占用较多后台时间,保持 NonBlocking 即可。
5.7 网络与安全相关
IsPortAuthorized=true:首启端口自检完成后置位,保持默认;QuickConnectAvailable=true:开启 Quick Connect(客户端输码免密授权),家用可选,企业内网建议关;EnableMetrics=false:打开后服务端暴露/metricsPrometheus 端点,接监控栈时才需要;EnableLegacyAuthorization=false:旧版令牌头兼容开关,保持关闭(更安全);CorsHosts=["*"]:跨域白名单,仅管理台/自建 Web 前端需要收紧时改。
5.8 界面与行为开关
EnableFolderView=false:开启后客户端多一个「文件夹」原始视图,给高级用户排查目录结构用;EnableGroupingMoviesIntoCollections=false/EnableGroupingShowsIntoCollections=false:跨库同名条目自动聚合,混盘党才需要;SaveMetadataHidden=false:本地 NFO 是否加隐藏属性,保持默认;PluginRepositories:默认仅Jellyfin Stable官方源(https://repo.jellyfin.org/files/plugin/manifest.json),加第三方源在此追加。
六、encoding.xml 转码参数详解
实测全文关键参数(与 控制台 → 播放 → 转码 一一对应):
| 参数 | 实测值 | 语义与调法 |
|---|---|---|
HardwareAccelerationType | none | 硬件加速类型:none/vaapi/qsv/nvenc/amf/v4l2m2m;实测服务器为 VMware 虚拟显卡(vmwgfx),vainfo 报 va_openDriver() returns -1,驱动不可用保持 none,转码实际走 libx264 软编 |
EncodingThreadCount | -1 | 编码线程数(-1=自动满核);低配盒子可设 2 限核 |
EncoderAppPathDisplay | /usr/lib/jellyfin-ffmpeg/ffmpeg | 转码引擎路径(发行包自带,一般不改) |
VaapiDevice | /dev/dri/renderD128 | VAAPI 渲染节点(启用 vaapi 后生效) |
H264Crf | 23 | H.264 转码质量(越小越清晰越大码率,18~28 合理区间) |
H265Crf | 28 | H.265 转码质量(同上,默认比 264 大 5 档) |
EncoderPreset | auto | x264 预设速度档(ultrafast…veryslow);实测转码日志显示自动落到 veryfast |
MaxMuxingQueueSize | 2048 | 复用队列上限,源文件索引混乱时可调大 |
DownMixAudioBoost | 2 | 立体声下混增益 |
DownMixStereoAlgorithm | None | 下混算法(None/Dave750/NightmodeDialogue) |
EnableAudioVbr | false | 音频可变码率 |
EnableThrottling | false | 转码节流(播放点前只转一小段,省 CPU 但拖动频繁时体验差) |
ThrottleDelaySeconds | 180 | 节流缓冲秒数 |
EnableSegmentDeletion | false | 播完即删转码分片(省缓存盘,多端同看会重转) |
SegmentKeepSeconds | 720 | 分片保留秒数(配合上条) |
DeinterlaceDoubleRate/DeinterlaceMethod | false/yadif | 反隔行(旧电视源才相关) |
EnableDecodingColorDepth10Hevc/Vp9 | true/true | 10bit 解码开关(4K HDR 片源相关) |
EnableDecodingColorDepth12Hevc | false | 12bit 解码 |
EnableEnhancedNvdecDecoder | true | NVDEC 增强解码 |
PreferSystemNativeHwDecoder | true | 优先系统原生硬件解码 |
EnableHardwareEncoding | true | 允许硬件编码 |
AllowHevcEncoding/AllowAv1Encoding | false/false | 转出 HEVC/AV1(兼容性保守,默认关) |
EnableSubtitleExtraction/SubtitleExtractionTimeoutMinutes | true/30 | 内嵌字幕抽取开关与超时 |
HardwareDecodingCodecs | h264, vc1 | 走硬解的编码列表 |
色调映射组(EnableTonemapping 等) | 全部 false/默认 | HDR→SDR 色调映射,HDR 片源需开 |
💡 技术拓展:
HardwareAccelerationType是整张表的「总开关」——none时除H264Crf/H265Crf/EncoderPreset(作用于软编 libx264/libx265)以外的硬件相关项全部不参与运行。实测本服务器转码一条 HEVC→H.264 500kbps HLS 流,ffmpeg 命令行为-codec:v:0 libx264 -preset veryfast -crf 23 -maxrate 500000,正是上表三个软编参数的直接体现。
七、database.xml 与日志配置
database.xml 实测内容极简——默认内嵌 SQLite、单机自持:
<DatabaseType>Jellyfin-SQLite</DatabaseType>
<LockingBehavior>NoLock</LockingBehavior>
DatabaseType:数据库类型(12.4 默认 SQLite,无外部数据库依赖);LockingBehavior=NoLock:数据库文件锁策略,保持默认;多进程/多实例共享同一数据目录时才需要关注(不要让两台服务指向同一个/var/lib/jellyfin)。
日志配置:logging.default.json 是日志级别模板(Serilog 结构),常规排障只需看 /var/log/jellyfin/jellyfin<日期>.log;把 Default 级别从 Information 改 Debug 会显著增大日志量,仅在官方社区要求提供详细日志时临时使用,排障完改回。
/etc/default/jellyfin 是 systemd 服务的环境文件,实测内容:
cat /etc/default/jellyfin
实测回显:
JELLYFIN_ARGS="$JELLYFIN_WEB_OPT $JELLYFIN_FFMPEG_OPT $JELLYFIN_SERVICE_OPT $JELLYFIN_NOWEBAPP_OPT $JELLYFIN_ADDITIONAL_OPTS"
JELLYFIN_USER="jellyfin"
JELLYFIN_DATA_DIR="/var/lib/jellyfin"
JELLYFIN_CONFIG_DIR="/etc/jellyfin"
JELLYFIN_LOG_DIR="/var/log/jellyfin"
JELLYFIN_CACHE_DIR="/var/cache/jellyfin"
JELLYFIN_FFMPEG="/usr/lib/jellyfin-ffmpeg/ffmpeg"
改数据/日志/缓存目录位置就在这个文件里改(改完 systemctl restart jellyfin 生效),比动 systemd 单元文件安全。
八、参数修改闭环实测
8.1 闭环一:API 改 ServerName(热生效)
POST /System/Configuration 是全量覆盖语义——必须先 GET 拿全 53 键,改完整体回传。用 jq 管道完成(改 ServerName 为 jellyfin-lab):
# 1. 取全量配置 → jq 修改 ServerName → 落盘中间文件
curl -s -H 'Authorization: MediaBrowser Token="79c936645c374864bf1c67f938dc27eb", Client="curl-test", Device="curl", DeviceId="doc-001", Version="12.4.0"' \
http://127.0.0.1:8096/System/Configuration \
| jq '.ServerName="jellyfin-lab"' > sysconf-new.json
# 2. 全量 POST 回去
curl -s -o /dev/null -w "%{http_code}\n" -X POST http://127.0.0.1:8096/System/Configuration \
-H 'Content-Type: application/json' \
-H 'Authorization: MediaBrowser Token="79c936645c374864bf1c67f938dc27eb", Client="curl-test", Device="curl", DeviceId="doc-001", Version="12.4.0"' \
--data-binary @sysconf-new.json
实测回显:
204
立即回读验证(GET /System/Info/Public 的 ServerName 字段):
curl -s http://127.0.0.1:8096/System/Info/Public | grep -o '"ServerName":"[^"]*"'
实测回显:
"ServerName":"jellyfin-lab"
⚠️ 注意:只 PUT 单键(不带全量 53 键)会触发校验错误,这是该接口最常见的踩坑点;
jq管道天然保证「原样改一处处、其余全保留」。
8.2 闭环二:改用户策略(权限类参数)
先创建受限用户 demo。注意 POST /Users 的请求体必须带认证提供方 ID,最小化请求体会被 400 拒绝(实测错误回显):
{"errors":{"Policy.PasswordResetProviderId":["The PasswordResetProviderId field is required."],"Policy.AuthenticationProviderId":["The AuthenticationProviderId field is required..."]}}
正确体(实测 204 成功,返回空体):
curl -s -o /dev/null -w "%{http_code}\n" -X POST http://127.0.0.1:8096/Users \
-H 'Content-Type: application/json' \
-H 'Authorization: MediaBrowser Token="79c936645c374864bf1c67f938dc27eb", Client="curl-test", Device="curl", DeviceId="doc-001", Version="12.4.0"' \
-d '{"Name":"demo","Password":"q1w2e3r4","Policy":{"AuthenticationProviderId":"Jellyfin.Server.Implementations.Users.DefaultAuthenticationProvider","PasswordResetProviderId":"Jellyfin.Server.Implementations.Users.DefaultPasswordResetProvider","IsAdministrator":false}}'
实测回显:
204
再收紧策略。同样遵循「GET 全量 → 改字段 → POST 全量」模式(demo 的用户 ID 为 9c45fa075ded416aae87ecc076080361,策略体共 42 个键,示例中把登录失败上限从 0 调到 5):
# 1. 取全量策略 → 改 InvalidLoginAttemptCount → 落盘
curl -s -H 'Authorization: MediaBrowser Token="79c936645c374864bf1c67f938dc27eb", Client="curl-test", Device="curl", DeviceId="doc-001", Version="12.4.0"' \
http://127.0.0.1:8096/Users/9c45fa075ded416aae87ecc076080361 \
| jq '.Policy | .InvalidLoginAttemptCount=5' > demo-policy.json
# 2. 全量回传
curl -s -o /dev/null -w "%{http_code}\n" -X POST http://127.0.0.1:8096/Users/9c45fa075ded416aae87ecc076080361/Policy \
-H 'Content-Type: application/json' \
-H 'Authorization: MediaBrowser Token="79c936645c374864bf1c67f938dc27eb", Client="curl-test", Device="curl", DeviceId="doc-001", Version="12.4.0"' \
--data-binary @demo-policy.json
实测回显:
204
回读复核(GET /Users/{id},实测关键字段):
admin: False | delete: False | livetv: False | allfolders: False | loginlimit: 5
行为闭环:用 demo 账号登录后检索条目恒为 0(EnableAllFolders=false 且 EnabledFolders=[]),跨用户查询他人条目被拒(服务端日志:AuthenticationScheme: CustomAuthentication was forbidden.)——策略参数与实际行为完全对上。
8.3 闭环三:手改 XML + 重启(离线初始化路径)
# 1. 改日志保留天数 3 → 14
sed -i 's|<LogFileRetentionDays>3</LogFileRetentionDays>|<LogFileRetentionDays>14</LogFileRetentionDays>|' /etc/jellyfin/system.xml
# 2. 重启生效
systemctl restart jellyfin
# 3. 验证
grep -o '<LogFileRetentionDays>[^<]*</LogFileRetentionDays>' /etc/jellyfin/system.xml
实测回显:
<LogFileRetentionDays>14</LogFileRetentionDays>
重启后 GET /System/Configuration 里 LogFileRetentionDays 同步变为 14,闭环成立。
九、生产配置模板
场景设定:家用 NAS(4 核 CPU、8GB 内存、Intel 核显、万条目以内媒体库、3~5 个家庭成员)。基于实测默认值的推荐增量(未列出的一律保持默认):
system.xml 增量:
<LogFileRetentionDays>14</LogFileRetentionDays>
<ActivityLogRetentionDays>90</ActivityLogRetentionDays>
<LibraryUpdateDuration>60</LibraryUpdateDuration>
<CacheSize>600</CacheSize>
<EnableSlowResponseWarning>true</EnableSlowResponseWarning>
<SlowResponseThresholdMs>500</SlowResponseThresholdMs>
理由:日志留两周方便事后排障;活动记录存一个季度;媒体库稳定后把全库扫描放宽到 1 小时(实时监控 LibraryMonitorDelay 已覆盖增量文件);缓存与慢响应阈值维持默认即匹配 8GB 内存档。
encoding.xml 增量(Intel 核显 NAS):
<HardwareAccelerationType>vaapi</HardwareAccelerationType>
<VaapiDevice>/dev/dri/renderD128</VaapiDevice>
<H264Crf>23</H264Crf>
<EncoderPreset>veryfast</EncoderPreset>
<EnableHardwareEncoding>true</EnableHardwareEncoding>
理由:核显 NAS 首选 VAAPI 硬编(CPU 占用从满核降到个位数);CRF 23 与 veryfast 正是实测软编时系统自动选择的档位,硬编下沿用同样画质档位观感一致。启用前先用 vainfo 确认驱动加载成功(实测 va_openDriver() returns -1 时强行启用只会静默回落软编)。
不建议动的一组默认值: MinResumePct/MaxResumePct/MinResumeDurationSeconds(续播三线)、LockingBehavior(数据库锁)、EnableCaseSensitiveItemIds、IsPortAuthorized。前两组是全客户端行为基准,后三组动错会直接导致库异常。
十、常见问题(FAQ)
10.1 Q1:手改了 XML 但管理台里还是旧值?
手改 XML 必须重启服务才被读取(systemctl restart jellyfin);反过来,管理台/API 的修改是即时落盘即时生效的。两种通道混用时记住优先级:运行中的服务以自己内存里的值为准,手改只是「下次重启时生效的候选值」。
10.2 Q2:找不到 networking.xml,是不是部署缺了东西?
不是。networking.xml 只在管理台「网络」页第一次保存后才生成(实测两台新装服务器均无此文件,服务网络功能完全正常)。需要绑定 IP/改端口时,去管理台「网络」页改一次并保存,文件即出现。
10.3 Q3:API 批量改媒体库选项报 400?
实测现象:POST /Library/VirtualFolders/LibraryOptions 携带标准结构(Id + 完整 LibraryOptions)在 12.4 上返回:
{"type":"https://tools.ietf.org/html/rfc9110#section-15.5.1","title":"One or more validation errors occurred.","status":400,"errors":{"":["The supplied value is invalid."],"request":["The request field is required."]}}
结论:12.4 的该接口对脚本化修改并不友好(模型绑定校验拒绝常见体)。库选项的稳妥修改路径是管理台「媒体库 → 选中库 → 选项」逐项调整;脚本化场景改为「删除媒体库重建」或直接复制编辑好的 system.xml 后重启。
10.4 Q4:短片看完总是不出现在「继续观看」?
这是 MinResumeDurationSeconds=300 在起作用:时长不足 5 分钟的条目不记续播(实测 120 秒的播放记录被正确忽略、350 秒的正常落盘)。测试环境把该值改小即可;家庭环境保持默认可避免「广告片段污染继续观看」。
10.5 Q5:日志文件堆积占满磁盘?
默认 LogFileRetentionDays=3 只留 3 天,正常不会堆积。若把保留天数调得很大且开了 Debug 级别,日志量会失控——按 8.3 节把保留天数调回 3~14,并把日志级别改回 Information。/var/log/jellyfin/ 可单独挂小分区兜底。
10.6 Q6:中文条目排序乱?
先试管理台「控制台 → 用户 → 显示/排序」确认语言设置;再检查条目命名(5.5 节)。若仍不满意,用「数字前缀命名法」(01 演示一)是最可控的方案——排序参数三个列表处理的是西文标点与冠词,对中文拼音序没有直接开关。
十一、参考链接
- 官方文档(配置总览):https://jellyfin.org/docs/
- 管理台文档(Server Settings):https://jellyfin.org/docs/general/server/settings/
- 官方仓库:https://github.com/jellyfin/jellyfin
- 系列阅读:《Jellyfin 12.4 介绍与选型指南》、《Jellyfin 12.4 Docker Compose 部署指南》