avatar
枝动力の小站
少女祈祷中~
不好意思!出现了意外~

大制作!SkoHit Music项目技术细节一览

1058 字

SkoHit Music 是我从去年开始写的一个小项目,最早只是给自己听歌用的工具,没想到成了现在这样。

这是本人第一个正式发布的开源项目,也是迄今为止规模最大的一个。从单文件 Demo 到现在的多平台播放器。

一、轻量化数据存储

用户、收藏、头像全部使用Json以及文件系统存储。
不上 SQLite/MySQL 的原因很简单:够用。
代价也认:上万用户就崩,无事务无索引。但个人项目永远不会到那个量级。

密码用 Md5 哈希算法,虽然Md5是一种已经验证不安全的算法,但个人项目不会用到,所以问题不大。
会话默认 90 天,不会每次访问都要重新登录。

二、实时级的自动更新

自动更新架构经历多次改版,最终确定,全部使用Github Api下载源代码,并且跳过Data数据目录,只更新代码,保证数据安全。

在每个平台上,自动更新的实现方式不同:

  • Docker:使用退出码 42 退出异常容器,让 Docker 自动重新启动容器
  • Windows:启新进程,旧进程退出
  • Linux/Mac:后台启动新进程

本项目曾经尝试过使用Git Pull更新代码,但因为在Docker环境下增加了Git依赖,而且导致了Windows文件锁问题,所以最终没有使用。

三、系统媒体接口适配

在网页里能播歌,但系统控制中心、媒体键、锁屏界面默认是空的——因为你没告诉浏览器播放内容。
本项目使用Media Session API,来适配不同平台的媒体键。

  • 效果:Windows 控制中心、macOS Now Playing、iOS/Android 锁屏、蓝牙耳机媒体键全部自动适配。
  • 几个坑:ArtWork 尺寸要给全、playbackState 必须同步、切歌必须重设 MateData。

这是浏览器原生该有的样子:让 Web 应用拥有原生应用的体验,而不用装一个 Electron 壳。

四、Docker 自动构建

镜像通过 GitHub Actions 在推送代码到主分支时自动构建并推送到 Docker Hub,支持 X86 和 ARM64 两种架构,各种平台都能直接跑起来。
具体配置过程,我之前已经单独写过一篇文章详细讲过,这里就不再重复了:

如果你也在考虑给项目加 Docker 自动构建,建议直接看那篇。

At The End

  • 未来更新计划:密码哈希算法更换、歌词同步优化、歌单导入功能、均衡器自定义功能。
  • 项目体验地址SkoHit Music WebUi使用2H2G的轻量级服务器部署,较为卡顿。
  • 项目代码地址SkoHit Music GitHub本项目唯一的开源仓库,持续更新。
评论