← 文章 / 未分类
unraid 5小时前 · 2026-09-01 07:37:24 · 1 阅读

airsonic-advanced

所有应用 · 0 个应用

Docker 应用

Airsonic-Advanced 是 Airsonic 分支的现代化实现版本,在性能和功能方面进行了多项重要增强,并新增和替代了 Airsonic 中的部分功能。

Airsonic-Advanced 是 Airsonic 分支的现代化实现版本,在性能和功能方面进行了多项重要增强,并新增和替代了 Airsonic 中的部分功能。

Airsonic 是什么?

Airsonic 是一款免费、基于 Web 的媒体串流服务器,让你随时随地访问自己的音乐。你可以用它与朋友分享音乐,也可以在工作时聆听自己的音乐。它支持同时向多个播放器串流,例如厨房和客厅各使用一个播放器。

Airsonic 专为处理超大型音乐收藏而设计,可管理数百 GB 的音乐。虽然它针对 MP3 串流进行了优化,但也支持所有能够通过 HTTP 串流的音频或视频格式,例如 AAC 和 OGG。借助转码插件,Airsonic 可以即时转换并串流几乎所有音频格式,包括 WMA、FLAC、APE、Musepack、WavPack 和 Shorten。

如果带宽有限,你可以为音乐串流设置最高比特率。Airsonic 会自动将音乐重新采样为合适的比特率。

除了作为媒体串流服务器,Airsonic 也非常适合作为本地点唱机使用。直观的 Web 界面、搜索和索引功能都针对大型媒体库进行了优化,方便你高效浏览内容。Airsonic 还内置 Podcast 接收器,提供许多与 iTunes 类似的功能。

Airsonic 使用 Java 编写,可运行于大多数平台,包括 Windows、Mac、Linux 及各种 Unix 系统。

功能增强:

以下列出部分相较于 Airsonic 得到增强的功能:

  • 采用更现代的基础框架和库
    • Spring Boot 2.x(替代 1.x)、Spring Framework 5.x(替代 4.x),以及因基础库升级而带来的各种依赖升级,包括 EhCache、SQL 连接器等
  • 安全性
    • 全面重构凭据系统,真正安全地存储凭据,不再明文保存。对于需要日后取回的凭据(例如第三方存储位置的凭据),支持加密,同时保持向后兼容。密码存储还采用 bcrypt、Argon 等现代密码哈希算法。
  • 规范合规性:更符合 Web 规范,并通过框架实现相关功能,取代自行开发的解决方案
    • 支持 RFC 7233 中定义的 Range 请求头
    • 正确发送 ETag 和 Last-Modified 响应头,帮助客户端进行缓存
  • 性能优化
    • 采用管道和多线程机制,提供更高效且更符合规范的流媒体引擎
    • 全面移除软件中的悲观锁,改用更现代的并发技术
    • 升级内部数据库,支持连接池,并采用 MVCC 控制模式处理并发更新
      • 吞吐量大幅提升(扫描包含 10 万个媒体的媒体库,耗时从约 40 分钟缩短至约 3 分钟)
    • 浏览器中的 UI 渲染速度大幅提升,尤其适用于超大型播放列表
    • 大多数操作都积极采用多线程和并行处理,包括但不限于:
      • 媒体扫描引擎实现大规模并行化(媒体扫描速度提升约 8 倍)
      • 通过 fork-join 池,以异步或并行方式处理各种其他场景
    • 使用 WebSocket 与 Web 客户端通信,取代轮询
      • 资源占用更低,交互也更加动态
      • 客户端不再需要每 10 秒重复执行同一命令来检查状态
      • 发生变化时,服务器会在需要时主动推送状态更新
      • Web 客户端可以立即更新 UI,实现实时视图
      • 移除 DWR——这项使用了 10 年的 Web 客户端与服务器通信技术
      • 提供状态指示器,显示客户端是否已连接到服务器
  • UI:
    • 符合 HTML5 规范
      • 重新设计布局:使用 iframe 取代 frameset 和 frame
    • 使用专用库 DataTables 渲染表格
      • 通过延迟渲染和在 DOM 外处理数据,大幅提升渲染速度(约提升 10 到 800 倍!)
        • 表格越大,性能提升越明显
        • 原本在浏览器中需要约 800 秒才能渲染的播放队列,现在不到 1 秒即可完成
      • 支持在表格中启用可选分页和无障碍搜索
    • 可自定义生成的封面缩略图质量
    • 支持在播放列表、播放队列和文件浏览模式中显示更多曲目字段
    • 可选择显示曲目字段的表头
    • 支持在浏览模式下对曲目排序(例如优先显示最近扫描的文件等)
    • 支持在播放队列和媒体浏览器中批量加星或取消加星
    • 状态图表改为使用 JS 库在客户端渲染,不再由服务器生成
  • Bug 修复:
    • 修复多个竞态条件问题
    • 完善一致性检查并重构相关代码
    • 修正文档错误
  • 其他改进
    • 支持 JDK17
    • 使用 JSR 310(Java time)替代旧版 Java 时间相关包来处理时间和时长
    • 使用 Java NIO 替代旧版 IO 包处理文件
    • 歌曲时长计算更加精确
    • 支持通过环境变量或系统变量传入配置。修改偏好设置时,可以但不必编辑 airsonic.properties
    • 支持使用自定义 URL 向 ListenBrainz 服务器提交 scrobble 数据
    • Web 客户端的播放队列支持“单曲循环”
    • 支持 Sonos:查看文档
    • 支持 Chromecast:查看详情
    • 支持上传到指定文件夹(通过 UploadsFolder 属性或参数设置)
    • 支持同时上传多个文件
    • 支持上传并解压更多格式的压缩包:
      • rar
      • 7z
      • tar
    • 支持将 Podcast 导出为 OPML
    • 支持导入使用相对文件路径的播放列表(相对于 Playlists 文件夹解析)
    • 支持直接使用二进制互联网电台流 URL
    • 支持为内容归类多个流派
    • 支持指定自定义日志文件位置(通过 logging.file.name 属性或参数设置)
    • 支持自动书签和书签管理
    • 支持手动或按计划备份内部数据库,并可指定保留的备份数量
    • 支持在不同安装实例和数据库之间导出、导入数据
  • 测试
    • 进行了多项修复,以兼容各种外部数据库
    • 针对外部数据库执行自动化测试
      • Postgres
      • MySQL
      • MariaDB
    • 集成测试改用 failsafe,不再使用 cucumber
  • 构建与部署
    • 更新 Docker 镜像,基础层改用 JRE 14。
      • 新增 XMP 支持,从而开箱即用地播放 MOD 文件
    • 支持多平台构建,包括 ARM v7 和 ARM64
    • 构建流水线更加完善,支持自动发布,并可在合并代码时自动部署
      • 功能或改进合并后,用户无需从源代码编译即可立即获取最新构建版本,不必等到可能相隔数月的下一个稳定版
    • 同时发布到 GHCR 和 Docker Hub
  • 功能移除
    • 由于第三方库未及时适配新版 JVM,Java Jukebox 已被移除。详情请参阅 PR #636

用于改进 Airsonic 的完整 PR 列表可在 PR 页面查看。未来将加入自动生成变更日志的功能,方便持续跟踪。

Airsonic-Advanced 偶尔会回移基础 Airsonic 分支中引入的功能,但总体而言,它比 Airsonic 更现代,也更偏向采用前沿特性。

使用方法

Airsonic-Advanced v10.6.x 系列及其快照版与原版 Airsonic 10.6.x 系列相互兼容。但 11.x 版本未必如此。

另外请注意,Airsonic-Advanced 11.x 及其快照版属于破坏性(不向后兼容)的版本变更。升级后将无法恢复到 10.6.x(系统确实会备份数据库,以备需要回退时使用,但必须手动恢复)。

Airsonic-Advanced 的快照版通常相当稳定,推荐优先使用;稳定版可能已经严重过时。

独立二进制文件

可从 GitHub 下载 Airsonic-Advanced。

可使用公钥验证发行版签名。

10.6.x 系列至少需要 Java Runtime Environment(JRE)1.8;11.x 及更高版本(包括快照版)至少需要 Java 11。

  • 10.6.x 版本 → Java 8
  • 11.x 及更高版本 → Java 11

Airsonic-Advanced 的运行方式与原版 Airsonic 基本相同,也可以替代原版 Airsonic。

请阅读兼容性说明

Docker

Docker 镜像发布在 DockerHubGHCR。近期发布的 Docker 镜像支持多平台,这意味着 DockerHub 也提供 ARMv7 和 ARM64 镜像。不过,目前 CI/CD 流程尚未对这些架构进行自动化测试,仅测试了 Linux 平台。

请注意,Docker 镜像的卷挂载路径已发生变化,与 Airsonic 不同。Airsonic 在容器内使用 /airsonic/* 作为挂载路径。Airsonic-Advanced 则尽量使用默认 war 镜像在 /var/* 下的路径,以便用户在容器和非容器环境之间切换时保持一致。

  • Music:/airsonic/musicMusic:/var/music
  • Podcasts:/airsonic/podcastPodcasts:/var/podcast
  • Playlists:/airsonic/playlistsPlaylists:/var/playlists
  • /airsonic/data/var/airsonic

还请注意,Docker 镜像默认会以 root 用户(0)和 root 组(0)运行,因此外部卷中创建的文件也会归 root 所有。你可以通过以下两种方式之一修改容器内进程的运行用户:

  • 执行 docker run 命令时指定 --user,并以 uid:gid 格式提供其中一个或两个值
  • 执行命令时,为容器镜像指定 PUIDPGID 环境变量
原始来源: unraid

评论 (0)