Audioserve 配置参数详解

Audioserve 0.30.1 全参数详解:命令行/YAML/环境变量三通道与 --print-config 全默认值实查,认证密钥、监听 TLS、集合缓存与目录级选项、章节呈现、转码三档与 16kbps 自定义实测、播放位置备份恢复、图标缓存与排障实录。

AudioserveAudioserve流媒体2026/10/28

Audioserve 配置参数详解

目标:把 Audioserve 的整套配置体系一次讲透——命令行参数、YAML 配置文件、环境变量三条通道,认证/监听/集合缓存/章节/转码/播放位置备份/图标缓存各组参数的默认值与实测行为。本文所有参数表以 v0.30.1(2026-10-28 实查)的 --help、--print-config、--help-dir-options、--help-tags 真实回显为准,关键参数附实测验证;部署编排见《Audioserve Docker Compose 部署实战》。

一、环境信息

项目取值
实测日期2026-10-28
版本audioserve 0.30.1 #561370e (22.05.2026 01:40:12),镜像 izderadicka/audioserve:latest
取证方式audioserve --help(122 行)、--help-dir-options、--help-tags、--print-config 逐行实查;自定义转码配置、TLS、环境变量注入均实测
配置文件YAML 格式,-g/--config 指定(环境变量 AUDIOSERVE_CONFIG)

二、三条配置通道与优先级

  1. 命令行参数(本文主体):audioserve [OPTIONS] [BASE_DIRS]...,每个参数都有同名环境变量(如 -s/--shared-secret ↔ AUDIOSERVE_SHARED_SECRET),环境变量在命令行参数缺席时生效;
  2. YAML 配置文件:-g /path/to/config.yaml,承载命令行覆盖不了的细粒度结构(转码三档参数、线程池);--print-config 能把"当前生效配置"(含默认值与已传参数合并结果)打印成 YAML,官方定位就是"生成配置文件的起步模板";
  3. 环境变量:适合容器/服务注入敏感项(共享密钥),不在进程参数中暴露。

一个实用工作流:先用最短命令行启动,加 --print-config 看合并后的完整配置,把想固化的部分抄进 YAML,之后命令行只留 -g 与可能变化的参数。

--print-config 实测回显(./audioserve -s mypass --tags --print-config /tmp/collection,这本身也是生成配置模板的命令):

listen: 0.0.0.0:3000
thread_pool:
  num_threads: 8
  queue_size: 100
  keep_alive: null
base_dirs:
- /tmp/collection
base_dirs_options: {}
url_path_prefix: null
shared_secret: mypass
limit_rate: null
transcoding:
  max_parallel_processes: 12
  max_runtime_hours: 24
  low:
    opus-in-ogg:
      bitrate: 32
      compression_level: 5
      cutoff: SuperWideBand
      mono: true
  medium:
    opus-in-ogg:
      bitrate: 48
      compression_level: 8
      cutoff: SuperWideBand
      mono: false
  high:
    opus-in-ogg:
      bitrate: 64
      compression_level: 10
      cutoff: FullBand
      mono: false
  alt_configs: null
token_validity_hours: 8760
secret_file: /home/audioserve/.audioserve/audioserve.secret
client_dir: client/dist
cors: null
ssl: null
allow_symlinks: false
search_cache: false
disable_folder_download: false
chapters:
  from_duration: 0
  duration: 30
no_dir_collaps: false
ignore_chapters_meta: false
positions:
  ws_timeout:
    secs: 600
    nanos: 0
  backup_file: null
  restore: None
  backup_schedule: null
behind_proxy: false
collections_cache_dir: /home/audioserve/.audioserve/col_db
tags:
- artist
- composer
- genre
- album
- performer
- title
- date
force_cache_update_on_init: false
natural_files_ordering: true
static_resource_cache_age: null
folder_file_cache_age: 86400
collapse_cd_folders: null
icons:
  cache_dir: /home/audioserve/.audioserve/icons-cache
  cache_max_size: 100
  cache_max_files: 1024
  cache_disabled: false
  size: 128
  cache_save_often: false
  fast_scaling: false
time_to_folder_end: 10
read_playlist: false
collections_options:
  dont_watch_for_changes: false
  changes_debounce_interval: 10
compress_responses: false

(max_parallel_processes: 12 是默认规则 2 × CPU 核数 在 6 核实测机上的结果;token_validity_hours: 8760 即 365 天。)

三、认证与密钥

参数(环境变量)默认说明与实测
-s / --shared-secret(AUDIOSERVE_SHARED_SECRET)无共享密钥,客户端认证的唯一样式。不传它也不传密钥文件时服务启动会报密钥相关错误;生产建议 ≥14 字符
--shared-secret-file无从文件读密钥,官方注释"slightly safer",适合 compose secret 挂载
--no-authentication(AUDIOSERVE_NO_AUTHENTICATION)关完全免认证,官方帮助原文 "mainly for testing purposes"——公网严禁
--token-validity-days(AUDIOSERVE_TOKEN_VALIDITY_DAYS)365(最小 10)认证 token 有效期;print-config 中表现为 token_validity_hours: 8760
--secret-file(AUDIOSERVE_SECRET_FILE)$HOME/.audioserve/audioserve.secret服务端自身的哈希盐文件,不存在则自动生成(mode 600,32 字节,实测);删掉它等于强制所有旧 token 失效
--limit-rate(AUDIOSERVE_LIMIT_RATE)不限每秒 HTTP 请求数上限,超限返回 429,防 DDoS 亦防自己
--cors / --cors-regex(AUDIOSERVE_CORS*)关闭跨域放行;正则只放行匹配来源。第三方 Web 客户端跨域调用 API 时需要

实测要点:认证失败返回 401 JSON {"error":"Unauthorized","details":"Authentication failed"};换发 token(POST /authenticate,简单模式传明文密钥、加盐模式传 盐|sha256(密钥+盐))后,用 Authorization: Bearer 头或 audioserve_token cookie 访问。

四、监听、TLS 与反代

参数(环境变量)默认说明与实测
-l / --listen(AUDIOSERVE_LISTEN)0.0.0.0:3000address:port;Docker 形态保持默认并在 compose 里映射宿主端口即可
--ssl-key / --ssl-cert(AUDIOSERVE_SSL_KEY/CERT)无PEM 证书启用 HTTPS(rustls 实现,编译特性 tls 默认在列)。实测自签证书对:启动日志出现 listening ... with TLS,curl -k https://127.0.0.1:3003/ 返回 200;对同一端口走纯 HTTP 则连接失败(协议不匹配即断开,无降级)
--url-path-prefix(AUDIOSERVE_URL_PATH_PREFIX)none反代路径前缀部署,要求以 / 开头、不以 / 结尾
--behind-proxy(AUDIOSERVE_BEHIND_PROXY)false声明处于反代之后,用于日志记录真实客户端 IP
--compress-responses(AUDIOSERVE_COMPRESS_RESPONSES)false响应体 gzip 压缩(API JSON 收益明显,音频流无意义)

官方安全建议:公网部署优先"反代终止 TLS"或内置证书二选一;浏览器直连场景下 HTTP/2 会随 TLS 自动启用(反代场景取决于代理的 h2 支持与转发头)。

五、集合目录(BASE_DIRS)与缓存

全局参数:

参数(环境变量)默认说明
[BASE_DIRS]...(AUDIOSERVE_BASE_DIRS)必填一个或多个集合根目录,多目录即多集合(客户端可切换)。位置参数,放在命令最后
--force-cache-update(AUDIOSERVE_FORCE_CACHE_UPDATE)false启动时强制全量重建集合缓存
--dont-watch-for-changes(AUDIOSERVE_DONT_WATCH_FOR_CHANGES)false关闭 inotify 目录变更监听(关闭后新文件需重启才可见)
--changes-debounce-interval(AUDIOSERVE_CHANGES_DEBOUNCE_INTERVAL)10 秒inotify 原始事件防抖间隔;实测投递新书后约 13 秒内可被搜索命中
--allow-symlinks(AUDIOSERVE_ALLOW_SYMLINKS)false跟随符号链接(按需开,防目录环)
--no-natural-files-ordering(AUDIOSERVE_NO_NATURAL_FILES_ORDERING)false关闭自然排序(默认按文件名首个数字排序,即 001 < 002 < 010)
--read-playlist(AUDIOSERVE_READ_PLAYLIST)false用目录内 .m3u/.m3u8 播放列表决定文件与顺序

集合缓存落点:--data-dir(默认 $HOME/.audioserve)下的 col_db/(sled 键值库,print-config 中 collections_cache_dir)。缓存仅加速浏览/搜索并承载标签与播放位置,重建无风险(音频本体只读引用)。

目录级选项(--help-dir-options 全文回显,追加在目录路径后,: 分隔、, 连接、= 赋值):

/my/audio:no-cache
/other/audio:ignore-chapters-meta=false,allow-symlinks,no-dir-collaps=true,tags=title+album+artist

Available options:
nc or no-cache              <=true|false> directory will not use cache (browsing and search will be 
                            slower for large collection, playback position sharing and metadata tags 
                            will not work)
force-cache-update          <=true|false> always do full cache update on start
ignore-chapters-meta        <=true|false> ignore chapters metadata in audio files. Instead present as
                            one big audio file
allow-symlinks              <=true|false>  follow symbolic links
no-dir-collaps              <=true|false> do not collaps directories with single chapterized audio file
chapters-duration           =x  duration (mins) of chapter for cutting of large audio files
chapters-from-duration      =x  min.duration (mins) of large audio file to be cut to chapters
tags                        =tag1+tag2...  metadata tags to collect (supported tags names separated by +)
default-tags                <=true|false>  collect default tags. Use --help-tags argument to get more 
                            information about supported metadata tags 
read-playlist               <=true|false> will use .m3u playlist in folder to read audio file
                            (only files in playlist are available and in its order)
collapse-cd-folder-regex    =regex regex used to identify and collapse CD folders
                            (folders like CD1, CD2 will be merged to parent folder)
dont-watch or no-watch      <=true|false> will not watch for changes in this collection
changes-debounce or 
changes-debounce-interval, 
debounce-interval           =n number of seconds to debounce raw events from inotify. Basically limits updates while
                            still collection directories changes. 

元数据标签(--help-tags 要点回显):--tags 采集预选标签 album, artist, composer, date, genre, performer, title;--tags-custom 逗号分隔自选,可用集合含 album_artist, comment, copyright, creation_time, disc, encoder, encoded_by, filename, language, publisher, service_name, service_provider, track, variant_bitrate, series, series_sequence, show, episode_id, season_number 等。文件夹级 tags 要求"整目录音频标签一致",逐文件不同的标签落在文件级。官方警告:改动 tags 参数必须全量重扫缓存(编译特性 tags)。

六、章节与目录呈现

参数(环境变量)默认说明
--chapters-from-duration(AUDIOSERVE_CHAPTERS_FROM_DURATION)0(禁用)超过 x 分钟的单文件按时长虚拟切章(不物理切分)
--chapters-duration(AUDIOSERVE_CHAPTERS_DURATION)30 分钟每个虚拟章节时长
--ignore-chapters-meta(AUDIOSERVE_IGNORE_CHAPTERS_META)false忽略 m4b 等内嵌章节元数据(整书按单文件呈现)
--no-dir-collaps(AUDIOSERVE_NO_DIR_COLLAPS)false禁止"单章节化音频文件所在目录"的自动折叠
--collapse-cd-folders / --cd-folder-regex(AUDIOSERVE_COLLAPSE_CD_FOLDERS*)关闭把 CD1/CD2 类子目录合并进书目录;正则可自定义
--time-to-folder-end(AUDIOSERVE_TIME_TO_FOLDER_END)10 秒距最后一章结尾多少秒内即标记全书 finished

实测确认的三种章节来源均独立生效:m4b 内嵌章节(files[].section 返回章节表,Web 端呈现虚拟章节文件)、同名 .mp3.chapters CSV 侧车文件、--chapters-from-duration 时长切分。

七、转码

参数(环境变量)默认说明
-x / --transcoding-max-parallel-processes(AUDIOSERVE_TRANSCODING_MAX_PARALLEL_PROCESSES)2 × 核数(最小 4)并发 ffmpeg 子进程上限
--transcoding-max-runtime(AUDIOSERVE_TRANSCODING_MAX_RUNTIME)24 小时单个转码进程最长运行时间,超时击杀
-g 配置文件 transcoding 节见下三档(low/medium/high)参数 + 备用配置 alt_configs

默认三档(print-config 实查,客户端请求 ?trans=l/m/h 选用):

档位编码器/容器码率compression_levelcutoff声道
lowOpus in Ogg32 kbps5SuperWideBand单声道
mediumOpus in Ogg48 kbps8SuperWideBand立体声
highOpus in Ogg64 kbps10FullBand立体声

自定义转码实测:以"再省一半流量"为目标,把 low 档压到 16 kbps——YAML(/tmp/transcoding-custom.yaml):

transcoding:
  low:
    opus-in-ogg:
      bitrate: 16
      compression_level: 3
      cutoff: WideBand
      mono: true

以 --config /tmp/transcoding-custom.yaml 启动后实测:

  • /transcodings/ 接口回显(low 档码率即变为 16,Web 客户端自动跟随):
{"max_transcodings":12,"low":{"bitrate":16,"name":"opus-in-ogg"},"medium":{"bitrate":48,"name":"opus-in-ogg"},"high":{"bitrate":64,"name":"opus-in-ogg"}}
  • 同一 60 秒 64k mp3 源文件转码产物:默认 low 253,962 字节 → 自定义 16k 后 124,350 字节,体积减半,人声可辨度仍可接受(超低码率的典型代价是底噪质感变硬,自行权衡)。

依赖提示:转码通过 fork 系统 ffmpeg 命令行实现,服务器必须装有 ffmpeg(Docker 镜像已内置 8.0.1;静态二进制部署需自行安装,缺失时的真实报错见排障实录)。音频元数据(时长/码率)解析由二进制链接的 libavformat 完成,不需要额外依赖。

八、播放位置(positions)

参数(环境变量)默认说明
--positions-backup-file(AUDIOSERVE_POSITIONS_BACKUP_FILE)None播放位置 JSON 备份文件路径;兼作恢复源
--positions-backup-schedule(AUDIOSERVE_POSITIONS_BACKUP_SCHEDULE)None定时备份 cron 表达式(分 时 日 月 周,如 0 3 * * *);编译特性 cron
--positions-restore(AUDIOSERVE_POSITIONS_RESTORE)None恢复模式,值为备份文件版本(legacy 为 v0.16 前,v1 为现行)——恢复完成进程立即退出,须移除本参数后再正常重启(compose 形态下忘移除会因 restart 策略形成循环)
--positions-ws-timeout(AUDIOSERVE_POSITIONS_WS_TIMEOUT)600 秒进度同步 WebSocket 空闲超时

备份另有手动通道:向进程发 SIGUSR2 立即落盘(实测 kill -USR2 1 后 positions-backup.json 出现,内容按 集合路径→目录→设备组 三层嵌套)。SIGUSR1 为全量重扫信号,实测回显:

[INFO  audioserve] Received signal SIGUSR1 for full rescan of caches
[INFO  collection::cache] Full scan for collection "/audiobooks" finished

九、图标缓存与杂项

参数(环境变量)默认说明
--icons-cache-dir(AUDIOSERVE_ICONS_CACHE_DIR)$DATA/icons-cache封面缩略图缓存目录
--icons-cache-size(AUDIOSERVE_ICONS_CACHE_SIZE)100 (MB)缓存容量上限,满后 LRU 淘汰
--icons-cache-max-files(AUDIOSERVE_ICONS_CACHE_MAX_FILES)1024缓存文件数上限
--icons-cache-disable(AUDIOSERVE_ICONS_CACHE_DISABLE)false关闭图标缓存(每次实时缩放封面)
--icons-size(AUDIOSERVE_ICONS_SIZE)128 px缩略图边长
--icons-fast-scaling(AUDIOSERVE_ICONS_FAST_SCALING)false快速缩放(线性三角法)替代默认更优但更慢的 Lanczos3
--icons-cache-save-often(AUDIOSERVE_ICONS_CACHE_SAVE_OFTEN)false每次增量即落盘(通常无必要)
--static-resource-cache-age(AUDIOSERVE_STATIC_RESOURCE_CACHE_AGE)no-store静态资源 Cache-Control(秒数或 no-store)
--folder-file-cache-age(AUDIOSERVE_FOLDER_FILE_CACHE_AGE)86400目录封面/简介文件的 Cache-Control 秒数
--disable-folder-download(AUDIOSERVE_DISABLE_FOLDER_DOWNLOAD)false关闭整目录打包下载 API(需编译特性 folder-download)
--thread-pool-large / --thread-pool-keep-alive-secs8 线程 / 永久工作线程池扩容与空闲回收(print-config:num_threads: 8, queue_size: 100)
--data-dir(AUDIOSERVE_DATA_DIR)$HOME/.audioserve全部服务数据(col_db、图标缓存、密钥)根目录
--client-dir(AUDIOSERVE_CLIENT_DIR)client/dist(相对路径)Web 客户端文件目录。相对工作目录解析——Docker 镜像工作目录为 /audioserve 所以开箱即用;静态二进制形态若不在固定目录启动,必须显式绝对路径(真实踩坑见排障实录)

十、排障实录

1. --search-cache 已弃用

--help 回显原文:Deprecated: does nothing. For caching config use :<options> on individual collections dirs params。老教程里用 --search-cache 开启搜索缓存的写法在 0.30.x 已完全无效,缓存默认开启;要让某个集合不走缓存,改用目录级选项 <路径>:no-cache(或 nc)。

2. 静态二进制形态报 Error: Error creating/reading secret: Permission denied (os error 13)

数据目录对运行用户不可写(盐文件 audioserve.secret 无法创建)。按 --data-dir 指向授权:chown -R audioserve:audioserve /var/lib/audioserve。Docker 形态的等价问题是宿主挂载目录属主不是 uid 1000(见《Audioserve Docker Compose 部署实战》排障实录)。

3. Web 界面白屏/404:静态二进制默认 client_dir: client/dist 是相对路径

静态构建包不含 Web 客户端,print-config 显示默认值 client/dist 相对当前工作目录解析;若二进制被 systemd 从 /opt/audioserve 之外启动(或工作目录不含 client/dist),Web 界面即 404。解法:单独部署 audioserve-web 客户端文件并用 --client-dir /绝对路径/client 显式指定(实测修复,systemd 单元示例见《Audioserve 常用命令与运维实战(核心篇)》)。

4. 转码请求返回 500,日志 Cannot spawn child process: Os { code: 2, kind: NotFound }

服务器没有安装 ffmpeg——原生流(/0/audio/<path> 不带 trans 参数)完全正常,唯独 ?trans= 请求 500。NotFound 即找不到 ffmpeg 可执行文件;安装/修正 PATH 后恢复。诊断口诀:原生 200、转码 500,先查 ffmpeg。

5. 参数写错的防呆提示

参数体系较大,拼错时 clap 会拒绝启动并给出修正提示(实测 --port 3000 误写的回显):

error: unexpected argument '--port' found

  tip: to pass '--port' as a value, use '-- --port'

Usage: audioserve --no-authentication [BASE_DIRS]...

监听参数的正名是 -l/--listen 0.0.0.0:3000。拿不准时 --print-config 比逐条试错高效。

十一、参考链接