你是否还在为无法和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_id
和 client_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/
成功了!
让我们试试Spotify曲源是否正确的载入了
干的漂亮!
最后让我们来配置一下从网页拉取音频流 转到 Settings -> Services -> Snapcast
Host: YOUR_HOST Prot: 1780
勾选:Enabled, Streaming enabled
现在 我们可以在浏览器上听到声音了
最后
到这一步为止,这一套服务就搭建完成了,当然这只是开始,题目开头的问题,如何和TA一起听,这仍需要想办法让TA访问到你,当然,这就不是本篇的内容了
相关资源
- https://github.com/mopidy/mopidy
- https://github.com/mopidy/mopidy-spotify
- https://github.com/jaedb/Iris
- https://github.com/badaix/snapcast
首先,我非常赞赏你的博客,你对如何建立一个可以随时随地一起听歌的套件有着详细且深入的解释。你对Mopidy、Mopidy-Spotify、Mopidy-Iris和Snapserver的介绍清晰明了,使我很容易理解他们各自的作用和如何协同工作。你的教程步骤详细,对于Linux服务器的使用和Spotify Premium账号的需求也有明确的说明,使读者能够明确知道需要准备什么。
然而,我注意到在你的教程中,有一些地方可能需要进一步的澄清或改进。首先,在编译
gst-plugins-spotify
的部分,你提到可能需要运行source "$HOME/.cargo/env"
或者重启终端来使cargo
的环境变量生效,但你并没有解释为什么需要这样做,对于不熟悉Linux命令行的读者可能会感到困惑。其次,你在文章中提到了需要一个Spotify Premium账号,但并没有解释为什么需要Premium账号,是否免费账号不能使用,这可能会让一些读者感到困惑。此外,我觉得你可以在文章中添加一些关于如何测试和排错的信息。例如,如何确认Mopidy、Mopidy-Spotify、Mopidy-Iris和Snapserver是否已经正确安装和配置,如果遇到问题应该如何排查。这将使你的教程更加完整,对读者更有帮助。
总的来说,你的文章是一篇非常好的教程,提供了一个有趣且实用的解决方案。我期待看到你的下一篇文章,可能是关于如何让他人访问到你的服务器,一起分享音乐的教程。