自建音乐流媒体的碎碎念

自建音乐流媒体的碎碎念

前言

首先谈谈我对音乐,以及流媒体的理解

我对音乐的狭义理解是:由乐器弹奏,或者人哼唱出来的歌。对于流媒体,我认为在网络上传播的影像记录就是流媒体

现在我们来看看维基百科给它们的定义

音乐,广义而言,就是指任何以声音组成的艺术。英文Music一词源于古希腊语的μουσική(mousike),意即缪斯(muse)女神的艺术。而中文的音乐二字,东汉许慎《说文解字》解释为“音,声也。生于心,有节于外,谓之音。”认为音乐和声音的区别,在于音乐需要透过人心去想像和创造。

流媒体(英语:Streaming media),指将一连串的多媒体资料压缩后,经过互联网分段发送资料,在互联网上即时传输影音以供观赏的一种技术与过程,此技术使得资料数据包得以像流水一样发送,如果不使用此技术,就必须在使用前下载整个媒体文件。

除此之外,我在 音流 这款软件的文档上,看到了一段这样的说明

音流-基本要求

网络附接存储(英语:Network Attached Storage,缩写:NAS)是一种文件级(与块级存储相对)的计算机数据存储服务器,它连接到计算机网络,并提供对异构网络用户的数据访问。它专门用于通过其硬件、软件或配置来提供文件服务。它通常作为专门制造的专用计算机设备制造。 NAS系统是包含一个或多个通常排列成逻辑存储器、冗余存储器或RAID存储驱动器的网络设备。NAS消除了从网络上的其他服务器提供文件服务的负担,它们通常使用网络文件共享协议(如NFS、SMB或AFP)提供对文件的访问。作为一种在多台计算机之间共享文件的便捷方法,NAS设备从1990年代中期开始开始流行起来。与同样提供文件服务的通用服务器相比,专用网络附加存储的潜在优势包括更快的数据访问、更简单的管理和简单的配置。

我知道自建音乐流媒体是一个小众的需求,不过搭建一个音乐流媒体平台不需要借助 NAS 也是可行的,因为我观察到较为主流的开源流媒体服务都是支持 Docker 部署的

需求

起初我是没有想要自建流媒体服务的,那时我对一款音乐播放器的需求是这样的

  1. 功能单一,只需要有基本的播放,收藏,查看歌词,歌手封面
  2. 有云盘功能,支持移动客户端上传音乐
  3. 没有广告(不充会员的情况)

我还在用的两款音乐软件,酷狗网易云音乐都是无法满足第一点和第三点的,而且我以前根本不敢想的弹窗广告和摇一摇广告竟然都出现了。以至于很长一段时间内,我都是使用Bilibili来听视频,反正我这个木耳朵也听不出来区别

24 年阮一峰的博客推荐了一个音乐流媒体服务,现在尝试找了找,没找到当时的那篇博客。当时我尝试安装了试用了一下,原本以为它能像是一个只拥有播放,网盘功能的酷狗音乐。结果登录Web页面之后,什么都没有。现在想起来,是需要我先把音乐文件喂给它,它只负责读取然后播放。当时觉得这个东西根本没法用,就放弃了

最近刷到了一篇文章,问大家都用的什么音乐播放器。里面有人回答,Apple Music,Spotify,网易云音乐。使用 Apple Music 的用户觉得没广告音质好,推荐Spotify的用户说曲库全还免费,还在用网易云音乐的用户说自己是永久会员

  • 就我个人而言,Apple Music 我也用过,周杰伦的歌也有,但我搜索进击的巨人时,给出的列表没有网易云音乐那样丰富

  • Spotify 我记得是有广告的,它是在听歌的间隙插入音频广告。也因为是国外设计的软件,用起来不习惯就放弃了。因为我听歌一般只认歌名和歌手,什么专辑对我而言是多余的东西

  • 至于网易云音乐,广告以及功能太杂了,我觉得音乐播放器不应该这么臃肿

在众多的评论中,我看到有些人回复了一些我没听过的名字,这个 音流 就是其中之一

搜索了一下 音流,提供四端应用(Mac,Windows,Android,iOS)。看官网给出的截图也挺纯净简洁,勾起了我自建音乐流媒体的兴趣

说明

需要说明的是,我们经常说的网易云音乐Apple Music它们只是一个音频播放器客户端,真正大量保存音乐资源的都是在服务器上,网易云音乐网易云音乐的服务器,Apple Music也有Apple Music的服务器,这样做才能让我们在移动终端上不需要下载也能听到音乐传作者们发布的歌曲

那么需要自建音乐平台,至少也要有一个服务端和一个终端。如果把这个服务端类比成网易云音乐的服务器,终端类比成网易云音乐的手机 app 或者电脑端的 app,应该会更形象一些

对比

先确定了终端使用 音流 这款软件,那么就要看看音流这款移动终端它适配了哪些服务。这是 音流 官网给的适配功能对比

第一行是各个流媒体服务的名称

功能 Subsonic Navidrome Audio Station Emby Jellyfin Plex
内嵌歌词 -
外置歌词 -
在线歌词 -
歌手简介 -
歌手头像 -
多艺术家 - -
回放增益 -
评分功能
收藏功能
文件夹 -
删除接口 -

这是各个流媒体服务的特性对比

特性/平台 Subsonic Navidrome Audio Station Emby Jellyfin Plex
定位 音乐流媒体服务器 轻量级音乐服务器 Synology 专属音频服务 多媒体服务器 多媒体服务器 多媒体服务器
开源 部分开源 开源(GPL-3.0) 闭源 部分开源 开源(GPL-2.0) 闭源
支持的媒体类型 仅音频 仅音频 仅音频 音频、视频、图片 音频、视频、图片 音频、视频、图片
跨平台支持 否(仅 Synology NAS)
客户端支持 多种(Web、手机应用) Web、手机应用 手机应用、浏览器 多种(Web、应用) 多种(Web、应用) 多种(Web、应用)
多用户支持
离线下载
流媒体转码支持
字幕支持
多设备同步
免费使用 部分功能 完全免费 包含于 Synology 部分功能免费 完全免费 部分功能免费
高级功能付费 不适用
活跃社区 较小 较小 专注于 Synology 用户群体 较大 较大 较大
硬件需求 较低 较低 依赖 Synology NAS 中等 中等 中等
Docker 支持

我说说我的看法

Subsonic 算是老牌的流媒体服务了,后续很多的流媒体服务都是基于 Subsonic 的 api 开发的,不过 Subsonic 基于 Java 开发的,资源消耗也会大一点,而且对我来说,它的功能有点复杂了

Navidrome 是使用 Go 开发的,完全开源,在网上也看见了不少朋友在推荐,也满足我的基本要求,除了上传音乐的功能

Audio Station 就不说了,我需要一个能 Docker 部署的服务

另外三个我没实际安装体验过就不发表意见了

除了上面的六个流媒体服务器之外,基于上传的需求,我找到了 airsonic-advanced,一个基于 Subsonic 开发的流媒体服务器,也支持上传

airsonic-advanced 首页

不知道大家会不会觉得功能太复杂了,实际安装之后我觉得有些复杂了,自用的系统不需要这么多功能

那么最终就选定 Navidrome 了,开干

部署

基于 Navidrome 的安装文档,很快都能配置完毕,以下是我的 docker compose 配置,仅供参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
services:
navidrome:
image: deluan/navidrome:0.54.3
container_name: navidrome
restart: unless-stopped
user: 1000:1000
networks:
- music
environment:
ND_SCANSCHEDULE: 1h
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_DEFAULTLANGUAGE: zh-Hans
ND_ENABLETRANSCODINGCONFIG: true
volumes:
- ~/applications/music/data:/data
- ~/applications/music/music:/music:ro
lrcapi:
image: hisatri/lrcapi:1.5.7
container_name: lrcapi
restart: unless-stopped
networks:
- music
depends_on:
- navidrome
environment:
- API_AUTH=xxx
volumes:
- ~/applications/music/music:/music
route-music:
image: nginx:latest
container_name: route-music
restart: unless-stopped
ports:
- 3312:3312
networks:
- music
depends_on:
- navidrome
- lrcapi
volumes:
- ~/applications/music/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ~/applications/music/nginx/logs:/opt/nginx/logs

networks:
music:
driver: bridge

hisatri/lrcapi:1.5.7:是一个补充服务,用于弥补 Navidrome 无法提供歌词和封面的缺陷

上传音乐

自建的流媒体是没有任何音乐的,需要手动上传到流媒体服务器上。这也是我期望有上传功能的原因,但上传并没有在 Subsonic 的 api 中

我目前是通过 SFTP 上传到服务器的。我的听歌范围变化不那么频繁,这一步虽然麻烦但还能接受

成果展示

Navidrome 首页

音流-主页

音流-列表

音流-歌词

体验

首先 音流 确实很简洁,没有任何广告,基本功能除了一个上传也够我用

其它一些缺点在于,Navidrome 流媒体服务安装在我家里,网络延迟有点大,有时候会出现歌词加载不及时的问题。至于听歌本身我感觉下来还是没什么问题的,主要还是因为我的歌曲大都都是 128k 音质的,大小在 5MB 以内

如此如此~~

作者

wuhunyu

发布于

2025-01-15

更新于

2025-01-15

许可协议