你是否还在为无法和TA一起收听音乐而烦恼呢,各大音乐平台(国内)哪怕有一起听的功能曲库仍然不全 让我们用 Mopidy + Mopidy-Spotify + Mopidy-Iris + Snapserver 来组建一套可以随时随地一起听歌的好去处吧

  • Mopidy 是一套支持扩展的,用于控制本机播放音频的服务
  • Mopidy-Spotify 扩展可以使Mopidy支持从Spotify获取音乐
  • Mopidy-Iris 为Mopidy增加一个现代风格的Web播放器界面
  • Snapserver 提供一个将本机音频流转至其他设备的服务

前置条件

你需要为此准备一台Linux服务器,这套系统也可以部署在Windows中,但本文中的命令均在Ubuntu 20.04环境下搭建。 如果你希望将Spotify作为你的曲源,那么你需要一个 Spotify Premium 的账号

安装 Mopidy

sudo mkdir -p /etc/apt/keyrings
sudo wget -q -O /etc/apt/keyrings/mopidy-archive-keyring.gpg \\
https://apt.mopidy.com/mopidy.gpg

sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/bullseye.list
sudo apt update
sudo apt install mopidy

Config Mopidy

默认配置下,Mopidy仅监听本机,我们现在让它监听所有的来源

sudo vim /etc/mopidy/mopidy.conf

添加这些配置

[http]
hostname = 0.0.0.0

安装 Mopidy-Spotify

由于 Mopidy-Spotify 的必要组件 gst-plugins-spotify 需要在本机进行编译, 让我们来先编译它

Build gst-plugins-spotify

安装 rust 环境, 直接按默认安装即可

curl --proto 'https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

可能你需要运行 source "$HOME/.cargo/env" 或者重启终端来使cargo的环境变量生效

sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gcc pkg-config git
git clone --depth 1 https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs
cd gst-plugins-rs cargo
build --package gst-plugin-spotify --release
sudo install -m 644 target/release/libgstspotify.so $(pkg-config --variable=pluginsdir gstreamer-1.0)/

我们可以通过执行这个命令来检查gst-plugins-spotify的编译与安装是否成功

gst-inspect-1.0 spotify

Build Mopidy-Spotify

虽然 Mopidy-Spotify 提供了pip包的安装方式,但是由于Spotify的更新,今天如果你直接安装它,它将出现一些错误

让我们来从源码构建一份吧

cd ~
git clone https://github.com/mopidy/mopidy-spotify.git 
cd mopidy-spotify

本文编写时,Mopidy-Spotify 的Python版本刚刚升至3.9,但Mopidy的稳定版本仍在 3.8 ,直接的构建会导致Python版本不正确,或是插件无法被识别的问题,幸运的是,Mopidy-Spotify在升级之后并没有做出大更新,降回3.8也不会影响插件的稳定,在这里,笔者选择将版本回到3.8

git checkout ee15a18ef874be0bce9c4a66923fa1ba833e4f05
sudo apt install python3-pip python3.8-venv
python3 -m pip install build
python3 -m build
sudo pip install dist/Mopidy-Spotify-*.tar.gz

Config Mopidy-Spotify

Spotify插件需要一个带有Premium的账户才可通过Api获取音乐,在这里我们将配置 Spotify 的账户

首先我们需要去授权客户端,得到我们的client_idclient_secret

https://mopidy.com/ext/spotify/#authentication

sudo vim /etc/mopidy/mopidy.conf

添加这些配置

[spotify]
username = {{Spotify用户名}}
password = {{Spotify密码}}
client_id =
client_secret =

Install Mopidy-Iris

我们还需要一个好看的,现代的播放器界面来控制它

sudo python3 -m pip install Mopidy-Iris
sudo sh -c 'echo "mopidy ALL=NOPASSWD: /usr/local/lib/python3.7/dist-packages/mopidy_iris/system.sh" >> /etc/sudoers'

安装 Snapserver

由于 Mopidy 本身只是一个本机音频管理,为了使大家能在自己的设备上听到声音,我们需要一个服务来将本机音频转发出去

https://github.com/badaix/snapcast/releases

cd ~
wget https://github.com/badaix/snapcast/releases/download/v0.27.0/snapserver_0.27.0-1_amd64.deb
sudo apt install ./snapserver_0.27.0-1_amd64.deb

配置 Mopidy 音频输出

sudo vim /etc/mopidy/mopidy.conf

添加这些配置

[audio]
output = audioresample ! audioconvert ! audio/x-raw,rate=48000,channels=2,format=S16LE ! wavenc ! filesink location=/tmp/snapfifo

调整/tmp/snapfifo的权限

sudo chown -R mopidy /tmp/snapfifo

见证奇迹

让我们来将它启动起来试试

sudo systemctl start mopidy

打开浏览器 访问 http://YOUR_HOST:6680/iris/

file

成功了!

让我们试试Spotify曲源是否正确的载入了

file

干的漂亮!

最后让我们来配置一下从网页拉取音频流 转到 Settings -> Services -> Snapcast

Host: YOUR_HOST Prot: 1780

勾选:Enabled, Streaming enabled

file

现在 我们可以在浏览器上听到声音了

file

最后

到这一步为止,这一套服务就搭建完成了,当然这只是开始,题目开头的问题,如何和TA一起听,这仍需要想办法让TA访问到你,当然,这就不是本篇的内容了

相关资源

  • https://github.com/mopidy/mopidy
  • https://github.com/mopidy/mopidy-spotify
  • https://github.com/jaedb/Iris
  • https://github.com/badaix/snapcast