Songhive —— 一个完全自托管且支持联邦化(Federated)的音乐平台

Lobsters Hottest 工具

摘要

Songhive 是一个完全自托管、支持联邦化的音乐平台,将媒体服务器式的流媒体播放与基于 ActivityPub 的社交层以及面向艺术家的内置变现功能结合在一起。它旨在解决 Jellyfin/Navidrome 等自托管媒体服务器与 Funkwhale 等社交化音乐平台之间的割裂问题。

<p>如果你的音乐服务器自带一个社交网络,而你的社交网络又能直接播放音乐,会是怎样?</p> <p><a href="https://lobste.rs/s/2ybfba/songhive_fully_self_hosted_federated">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/09/30 18:15

# Songhive —— 一个完全自托管且支持联邦的音乐平台 来源:https://blog.fabiomanganiello.com/article/Songhive ### 如果你的音乐服务器自带社交网络,而你的社交网络又能播放音乐,会怎样? - [问题所在](https://blog.fabiomanganiello.com/article/Songhive#the-problem) - [这是为谁准备的](https://blog.fabiomanganiello.com/article/Songhive#who-is-this-for) - [你会得到什么](https://blog.fabiomanganiello.com/article/Songhive#what-you-get) - [流媒体技术栈](https://blog.fabiomanganiello.com/article/Songhive#the-streaming-stack) - [社交层](https://blog.fabiomanganiello.com/article/Songhive#the-social-layer) - [分享与隐私](https://blog.fabiomanganiello.com/article/Songhive#sharing-and-privacy) - [平台能力](https://blog.fabiomanganiello.com/article/Songhive#the-platform-bits) - [对比一下](https://blog.fabiomanganiello.com/article/Songhive#how-it-compares) - [快速上手](https://blog.fabiomanganiello.com/article/Songhive#quickstart) - [底层原理](https://blog.fabiomanganiello.com/article/Songhive#under-the-hood) - [一些坦诚的注意事项](https://blog.fabiomanganiello.com/article/Songhive#caveats-honestly) - [相关链接](https://blog.fabiomanganiello.com/article/Songhive#links) ## 问题所在 如果你尝试过自托管自己的音乐,你很可能已经发现:每个工具都只解决了这个问题的一半。 **媒体服务器**([Jellyfin](https://jellyfin.org/)、[Navidrome](https://navidrome.org/)、原版 [Subsonic](https://subsonic.org/))非常擅长曲库这一半:把它们指向你的 FLAC 收藏,就能获得流媒体播放、转码和移动端 App。但它们是单人玩家的孤岛——没有其他人能发现你的音乐,没有社交层,分享一首歌要么得复制粘贴一个文件,要么得复制一个在你的局域网之外很可能无法访问的链接,或者为了分享内容给某个人,还得在他那台服务器上创建账号。 **社交音乐平台**([Funkwhale](https://www.funkwhale.audio/) 最接近这一形态)补上了联邦这一半,但其社交体验基本上还是围绕曲库展开的:你关注的是某个人的*曲库*,然后同步他的文件。这是一张分发网络,而不是一个人们谈论音乐的地方。此外,这些开源平台大多从未把盈利模式纳入设计,支付功能从未被集成进去。它们基本上是艺术家自由分享作品的场所,而不是让他们变现的地方。 **流媒体服务**([Spotify](https://spotify.com/)、[Apple Music](https://apple.com/music)、[TIDAL](https://tidal.com/))虽然普及,但通常除了关注他人的播放列表,以及"分享到 Facebook/Instagram/TikTok"的按钮之外,并没有真正内置的社交功能。而且消费者什么也不拥有:曲库可能一夜之间缩水,而分享出去的链接往往只有平台上已有账号的人才能查看。音乐创作者同样没有什么话语权:他们拿到的是按美分计算的零头,无法完全掌控分发(而且往往还需要中介才能把自己的音乐发出去,中介还要从中抽成),还常常因为平台之间互不连通而不得不同时发布到多个音乐平台。最重要的是,**你的收听历史本身就是产品**。 **Bandcamp**(https://bandcamp.com/)试图解决其中一些问题,具体做法是把内容创作者放在中心位置,让他们拥有自己的销售与变现流程(包括黑胶、CD 和周边商品的销售)。但它仍然是一个中心化的服务,其所有权已经数度易手([1](https://www.nytimes.com/2022/03/02/arts/music/epic-games-bandcamp.html)、[2](https://www.bbc.com/news/technology-66953910))。用户和艺术家离平台在他们身上倾注的心血逐渐腐化和/或被榨干只差一轮裁员的距离,而且没有任何直接可用的替代品。Bandcamp 在社交方面也没有特别投入:重心越来越多地转向销售,社交互动基本上局限于艺人页面上的一个"社区"选项卡——艺人可以在那里发布动态,人们可以留言回复。所有的社交互动都被严格限制在中心化平台的一个选项卡里。 或许**旧版 Google Music**(https://en.wikipedia.org/wiki/Google_Play_Music)曾帮助填补了用户生成内容上的一个重要空白(它允许用户免费将最多 50,000 首曲目上传到云端,让躺在旧硬盘里的音乐收藏也能随时随地收听),但它没有持续太久,也没有覆盖任何社交和分享需求。而**MySpace**——那个真正让所有人怀念的东西——实际上并不属于以上任何一类。它是一个乐队有自己页面的地方,你可以在那里直接播放他们的歌、留下评论、把他们加为好友。至今没有人成功复刻过这个东西。 Songhive 试图把所有这些需求打包在一个方案里:一个自托管的音乐流媒体服务器,其中曲目、专辑、播放列表和帖子都是一等的**ActivityPub**(https://activitypub.rocks/)对象。可以理解为 *Funkwhale 遇上 Mastodon*——你的音乐库生活在你的硬件上,或者任何你想接入的云存储里,但你的音乐(以及你关于音乐的帖子)可以在联邦宇宙中自由流动,可以被 Mastodon 用户关注、回复、转发和引用。 <截图:某个实例在桌面端的首页> <截图:某个实例在移动端的首页> ## 这是为谁准备的 - **音乐人**:勾选"发布到联邦宇宙"复选框,曲目就会以可播放的 `Audio` 对象出现在 Mastodon 的时间线中。人们可以从自己已有的联邦宇宙账号直接回复、转发和引用它们——你这一侧无需任何新的注册。你的艺人主页、发行作品和播放列表都提供 RSS/Atom 订阅源,而支持 Webmention 的博客在链接到你的歌曲时会给你发送通知。与 **Stripe** 的原生集成也让你更容易连接收款账户,并将部分曲目或专辑上架销售。你可以选择付费歌曲有多少部分可用于流媒体播放(只放一段试听、完整歌曲还是完全不放),以及用户需要为此支付多少。除了 Stripe 处理交易抽取的部分之外,不会有任何其他分成。 - **乐队**:需要一种简单灵活的方式分享自己的录音、彩排片段、翻唱播放列表等。玩过乐队的人对这个问题再熟悉不过了。Spotify 上的翻唱播放列表,只有在乐队里每个人都有 Spotify Premium 账号时才好用。YouTube 播放列表常常让宝贵的排练时间白白浪费在等广告播完上。更不用说那些散落在 WhatsApp 聊天、电子邮件和 Dropbox 或 Google Drive 文件夹里的 `rehearsal.mp3` 文件了——要找到一个把它们全都归拢到一起的办法谈何容易,尤其是当你在彩排中途想要找到某段录音的时候。Songhive 让分享整首曲目、整张专辑或整个播放列表变得更容易,并且可以完全掌控可见级别。它也更容易集成第三方音乐流媒体服务,让你同步自己的翻唱播放列表,并且可以从这个代理平台轻松分享出去,而不必让所有人都拥有 Spotify 或 TIDAL Premium 账号。它还让你能够直接接入那个被你随手丢满乐队彩排录音的 Google Drive 文件夹,对它们进行整理、打标签,并用一个统一的 URL 分享成一组一致的合集。 - **自托管者 / 曲库管理者**:把 Songhive 指向你的本地文件夹、一个 S3 桶、一个 WebDAV/SFTP 共享、Dropbox、Google Drive——甚至可以从 Jellyfin 或 TIDAL 导入你的收藏——然后你就得到了一套完整的流媒体技术栈:转码、Subsonic 移动端 App、Last.fm 写入(scrobbling)、收听统计,以及从 MusicBrainz 和封面艺术库(Cover Art Archive)自动获取的元数据。细粒度的可见性(`private` / `local` / `public`)意味着你那 4000 首的珍藏可以保持私密,而你真正写的那三首歌则可以公开。不仅如此,Songhive 还触及了这类开源项目经常忽视的一个问题:如何为系统管理员和自托管者提供持续运行服务器的激励。尤其是像音乐流媒体服务器这样的东西,在 CPU、存储和带宽消耗上并不便宜——很多时候甚至一点也不便宜。Songhive 为系统管理员提供了**付费**注册模式的选项。管理员可以决定向用户收取多少费用才能使用他们的实例并上传音乐,以及收费的频率。订阅由 Stripe 透明处理,可以随时取消。管理员还可以设置**用户配额**,让一切保持在合理范围内并防止滥用。 - **想要一个 MySpace 式音乐社交网络的人**:为你的场景、你的厂牌、你的集体运行一个实例。用户可以拥有个人资料、带提及和话题标签的状态、多层回复的讨论串、引用、通知以及审核工具(静音/屏蔽、举报、实例级联邦隔离)。你的实例可以与 Mastodon 联邦,除非你想要把它变成封闭花园,否则它并不是。 - **有多房间音乐系统或社区电台情结的音乐人**:服务端输出功能让你关闭标签页后播放依然能在服务器上继续——可以投送到 Snapcast 多房间音箱、中继到某个 Icecast 电台,或者托管你自己的 HTTP 电台挂载点,向不限数量的听众扇出分发。 ## 你会得到什么 ### 流媒体技术栈 核心是一个功能扎实的音乐曲库与流媒体服务器: - **曲库管理**:包括艺人、专辑、曲目、播放列表和动态电台。上传会自动提取标签、检测重复文件,并从 MusicBrainz 和封面艺术库获取元数据补全——包括为你抓取的封面图和艺人图片。 - **实时转码流媒体**(MP3、OGG、FLAC、AAC、Opus),支持 HTTP Range 请求和转码缓存,可按用户/按角色设置码率上限(在你的上行带宽或移动流量比较紧张时很实用)。 - **Subsonic API 兼容**,默认启用。这是个容易被低估的功能:每一个 Subsonic 兼容的移动/桌面客户端——Substreamer、Symfonium、Ultrasonic、Supersonic、Tempus 等——都能直接在你的实例上开箱即用。你免费获得了一大批历经十年打磨的第三方播放器,而且 API 令牌机制能让你的真实密码不进入这些客户端。 - **Mopidy 集成**:如果你需要的话,可以通过 [`mopidy-songhive`](https://github.com/blacklight/mopidy-songhive) 扩展接入。 - **收听历史、收藏,以及对 Last.fm 和 Libre.fm 的 scrobbling**,开箱即用,还有一个用 ECharts 渲染的个人收听统计面板(热门艺人、日历与一天各时段的热力图、按发行年份的分布)。 <截图:收听统计页面,展示给定时间段内收听最多的艺人和专辑> <截图:收听统计页面,展示按发行年份和收听时段分组的已听曲目> - **批量下载**:选中曲目/合集,就能得到一个异步构建好的 ZIP 压缩包。 - **服务端输出**——类似 Spotify Connect 的体验。浏览器只是一个遥控器;音频由服务器通过专用的流式工作进程渲染。提供三种后端:Icecast 中继(带实时 ICY 元数据更新)、用于全屋音频的 Snapcast 后端,以及由 Songhive 直接提供的原生 HTTP 挂载点(`/streams/`),基于 Redis Streams 实现按听众的游标跟踪——无需外部电台服务器。关闭标签页后播放依然继续,多个标签页/设备之间保持同步。 - **开箱即用的支付支持**——设置一个 Stripe 账户并将其连接到实例,如果你还希望允许音乐人绑定自己的收款账户并通过你的平台售卖音乐,还可以将其配置为 marketplace(市场)账户。 <截图:音乐人上传的曲目,显示为该曲目设置支付方式的选项> <截图:实例上带有付费订阅的会员页面> ## 社交层 这正是 Songhive 与其他所有自托管媒体服务器的分水岭。联邦是完整的 ActivityPub(通过 [pubby](https://github.com/blacklight/pubby) 库实现),而音乐实体就是社交对象: - **每个用户都是一个 ActivityPub actor**,可通过 WebFinger 以 `@user@instance` 的形式访问,并带有 Mastodon 风格的别名 URL。Mastodon 用户可以直接从他们自己的客户端关注、提及并与你互动。 - **曲目是 `Audio` 对象。**发布操作是显式的、按每次上传可选的——你的私有曲库绝不会意外泄漏到联邦宇宙。已发布的曲目会在 Mastodon 和 Akkoma 的时间线中渲染为可播放的音频,并附带描述、话题标签以及指回曲目页面的链接。 - **Mastodon 风格的状态**:支持 Markdown、提及、话题标签、多层回复的讨论串、引用以及链接预览卡片。回复一首曲目、转发一张专辑的发布、引用发布一个播放列表,或者干脆只是往 Mastodon 发几句话,就像使用一个普通的 Mastodon 账号一样。 - **Funkwhale 兼容的音乐联邦**:与 Funkwhale 和其他 Songhive 实例之间的完整双向音乐联邦——远程曲库、专辑、艺人和曲目都会解析为可浏览的资源,你可以关注它们并将其加入自己的收藏。 - **远程发现**:把一个联邦宇宙的账号或 URL 粘贴到搜索框中,它就会被解引用、缓存起来并变得可浏览——全程有 SSRF 防护,并且受域名审核管控。 - **真正的通知**:通过 WebSocket 实现实时的站内通知,支持按通知类型设置邮件偏好和每日摘要,还可以选择通过 VAPID WebPush 启用系统原生推送。 - **Mastodon 级别的审核能力**:用户可以静音/屏蔽本地和远程 actor;管理员可以限制/封禁 actor、与某些实例联邦隔离或施加限制,并审核举报——还可以选择通过 ActivityPub `Flag` 将举报转发给被举报 actor 所属的源实例。 - **无处不在的 RSS/Atom**:每个个人资料、艺人、播放列表、曲库、标签和流派都提供 RSS 2.0 和 Atom 订阅源,并带有 `<link>` 发现标记,因此连非联邦宇宙的阅读器也能订阅。 <截图:从 Mastodon 中查看的、包含已发布歌曲的 Songhive 帖子> ## 分享与隐私 - **三级可见性**:曲目、专辑、播放列表和曲库均可设置为 `private`、`local`(仅限本实例)或 `public`。 - **分享授权**(授予某个特定用户访问权限)和**可撤销的分享链接**——一个短链接,任何人打开后都会渲染出一个带音频播放器的预览页面,并通过内容协商让 API 客户端获得 JSON、让爬虫获得 OpenGraph 元数据。 - **可嵌入**:公开的曲目和合集可以通过 `` 标签、Markdown 链接、`` 小组件或无需 JavaScript 的 iframe 嵌入到任何网页中。媒体端点会发送 `Access-Control-Allow-Origin`,因此联邦宇宙的客户端同样可以嵌入你的音频。 - **Webmention**:公开内容的双向链接回链。一个链接到你歌曲的博客会给你发送通知;你分享或评论过的内容也会向源站点发送 Webmention 回链。这条链路上所有出站/入站的抓取都带有 SSRF 防护。 <截图:"分享曲目"模态框> ## 平台能力 - **多用户**:支持开放注册、仅限邀请、需要审批或完全关闭;每个用户可单独设置资料可见性。 - **OAuth2 提供方**:供第三方应用使用,另外还有 API 令牌供脚本和 Subsonic 客户端使用。 - **灵活的存储**:本地文件系统、S3 兼容的对象存储。 - **外部曲库**——这个功能是打动那些已有庞大收藏的人的关键。可以把外部音乐存储挂载到一个 Songhive 曲库上:本地文件夹(带有文件系统看门狗,自动感知变化)、S3、SFTP、WebDAV、Dropbox、Google Drive,或者纯 HTTP。实体驱动的后端走得更远:**Jellyfin** 和 **TIDAL** 可以将曲目、专辑、艺人和播放列表作为一等曲库条目导入,内容采用惰性加载——音频字节仍留在远端,在播放时代理转发,因此提供方的凭据永远不会到达客户端。元数据可以写回提供方,Dropbox/TIDAL 可以直接在设置表单中通过 OAuth 完成连接。 - **元数据写回**:补全后的标签会被写入音频文件本身,采用纯音频内容哈希——因此即使重新打标签也不会影响文件本身的完整性。

相似文章

SUB/WAVE

Product Hunt

SUB/WAVE 是一个自托管的电台平台,配备AI主播和单一的共享流。

jellyfin/jellyfin

GitHub Trending (daily)

Jellyfin 是一款免费开源的媒体服务器,用于管理和流式传输个人媒体收藏,是 Emby 和 Plex 等专有系统的替代方案。

Synci

Product Hunt

Synci 是一个 AI 驱动的配乐平台,提供生成音乐的全版权授权。

Kahawai —— 开源模块化媒体系统

Lobsters Hottest

Kahawai 是一个用 Rust 编写的开源、模块化自托管媒体服务器,通过 GStreamer 流式传输电影、剧集、动画和音乐,采用 hub/mediahost/transcoder 三种角色架构,支持硬件加速转码,并通过 TheIntroDB 提供社区驱动的跳过时间数据。