当前位置: 首页 > news >正文

使用树莓派搭建音乐服务器

目录

  • 引言
  • 一、搭建Navidrome
  • 二、服务穿透
  • 三、音流配置

引言

本人手机存储空间128G,网易云音乐6个G,本就不富裕的空间更是雪上加霜,而且重点是,我根本没有听几首歌,清除缓存后,整个软件都还是占用了5个G左右,正巧,本人最近购入了一块树莓派zero 2w,秉承着不让树莓派变吃灰派的原则,所以萌生出了自己搭建音乐服务器的想法。

解决方案

使用Navidrome在树莓派搭建音乐音乐服务器,再结合音流app访问歌曲,期间为了让树莓派在公网也能访问到,所以又使用了云服务器通过frp将树莓派进行穿透,这样在局域网外也能访问了。

本人选择Navidrome的理由是它有一个非常打动我的特性。

Very low resource usage. Runs well even on simple Raspberry Pi Zero and old hardware setups

它可以跑在树莓派zero上面!!!树莓派zero 2w的内存只有512mb。

一、搭建Navidrome

本教程所有步骤都是跟着官方教程操作的

  1. 一台已经可以进行内网访问的树莓派

  2. 下载Navidrome相关脚本并上传至树莓派

注意!!!:树莓派是arm架构,所以注意下自己使用的服务的架构,如果直接使用服务器搭建,需要选择amd架构

安装相应的工具

需要安装vim和ffmpeg,已经安装了的可以跳过

sudo apt install vim ffmpeg

创建文件夹

创建完成后记得添加权限

sudo mkdir /opt/navidrome
sudo mkdir /var/lib/navidrome

解压Navidrome的压缩包

sudo tar -xvzf Navidrome.tar.gz -C /opt/navidrome/
sudo chmod -R 777 /opt/navidrome

创建音乐库配置文件

在/var/lib/navidrome路径下创建配置文件navidrome.toml

MusicFolder = "准备存放音频文件的路径"

创建后台运行任务

在/etc/systemd/system/创建任务文件navidrome.service

[Unit]
Description=Navidrome Music Server and Streamer compatible with Subsonic/Airsonic
After=remote-fs.target network.target
AssertPathExists=/var/lib/navidrome[Install]
WantedBy=multi-user.target[Service]
Type=simple
ExecStart=/opt/navidrome/navidrome --configfile "/var/lib/navidrome/navidrome.toml"
WorkingDirectory=/var/lib/navidrome
TimeoutStopSec=20
KillMode=process
Restart=on-failure# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
DevicePolicy=closed
NoNewPrivileges=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
ReadWritePaths=/var/lib/navidrome# You can uncomment the following line if you're not using the jukebox This
# will prevent navidrome from accessing any real (physical) devices
#PrivateDevices=yes# You can change the following line to `strict` instead of `full` if you don't
# want navidrome to be able to write anything on your filesystem outside of
# /var/lib/navidrome.
ProtectSystem=full# You can uncomment the following line if you don't have any media in /home/*.
# This will prevent navidrome from ever reading/writing anything there.
#ProtectHome=true# You can customize some Navidrome config options by setting environment variables here. Ex:
#Environment=ND_BASEURL="/navidrome"

注意:如果你是按照上述步骤创建的文件夹或文件,那么这个配置文件的内容无需修改

启动后台Navidrome服务

sudo systemctl daemon-reload
sudo systemctl start navidrome.service
sudo systemctl status navidrome.service

开机自启(可选)

sudo systemctl enable navidrome.service

测试

完成上述步骤后,先进行内网访问,初次访问需要添加一个用户,账户和密码都是自定义的

image-20241006174601251

进入之后可以修改中文右上角人像->personal->langguage->简体中文

image-20241006174731518

image-20241006174637868

完成以上步骤后,现在就拥有了一个仅可在局域网下访问的音乐服务器,接下来需要将其穿透至公网,让你能够随时随地的听音乐。

二、服务穿透

此步骤只展示关键的客户端配置,详细配置步骤见此博客

使用frp将树莓派穿透到外网

frp服务端配置

[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = 1426061489
dashboard_pwd = "20011021yzkyzk"vhost_http_port = 7002
vhost_https_port = 7003
max_pool_count = 50token = "xxx"
tcp_mux = truelog_file = "/opt/frps/log/frps.log"
log_level = "info"
log_max_days = 3privilege_mode = true

frp客户端配置

serverAddr = "xxx"
serverPort = 7000
auth.method = "token"
auth.token = "xxx"
loginFailExit=false
[[proxies]]
name = "远程音乐推流"
type = "http"
localIP = "127.0.0.1"
localPort = 4533
customDomains = ["xxxx"]
[log]
to = "/opt/frpc/log"
level= "info"

该配置主要就是把服务端的7002端口映射到树莓派的4533端口(4533端口就是Navidrome的默认端口),登录到frps面板(7500端口)也能看到映射的结果。

image-20241006205517349

测试

使用服务器ip:7002端口访问,成功访问到Navidrome,这儿的音乐,只要你将mp3文件上传至你navidrome.toml中配置的路径中,它就会自动的读取。

image-20241006205408021

现在在web端我们可以远程访问了,但是,本人平常使用手机听音乐的频率更高,所以,我们需要在移动端也能够访问到这些音乐。

三、音流配置

音流官网

现在手机基本上是64位的,所以下载ARM64的就行了

image-20241006210208001

下载完成后进行配置

选择Navidrome

Screenshot_2024-10-06-21-03-46-472_cn.aqzscn.stre

填写服务器ip:frp配置的端口号

image-20241006210716250

登录后进入首页,就可以看到之前上传的歌曲

Screenshot_2024-10-06-21-04-59-890_cn.aqzscn.stre

至此一步就完成了,现在我将网易云常听的歌曲全部传到树莓派中,然后音流中就会扫描,大体的功能也和平常的音乐软件差不多,主要是占空间很小很小,几乎可以忽略不计。

相关文章:

使用树莓派搭建音乐服务器

目录 引言一、搭建Navidrome二、服务穿透三、音流配置 引言 本人手机存储空间128G,网易云音乐6个G,本就不富裕的空间更是雪上加霜,而且重点是,我根本没有听几首歌,清除缓存后,整个软件都还是占用了5个G左右…...

单链表的分解

编写算法创建以整数为数据元素的单向链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。 输入格式: 1 2 3 4 5 6 7 8 9 0 输出格式: 1 3 5 7 9 2 4 6 8 输入样例: …...

[OS] 4.Linux 内核

1. 下载 Linux 内核源代码 首先,你需要从官方站点或镜像站点下载 Linux 内核源代码。 官方源代码:The Linux Kernel Archives 清华大学镜像站点:Index of /kernel/v5.x/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载 .t…...

flutter_鸿蒙next_Dart基础③函数

目录 说在前面 1. 函数的基本定义 例子 代码解释 2. 函数的调用 代码解释 3. 可选参数与命名参数 可选参数 代码解释 调用示例 命名参数 代码解释 调用示例 4. 匿名函数与高阶函数 例子 代码解释 说在最后 说在前面 在 Dart 编程语言中,函数是构建…...

基于猎豹优化算法(The Cheetah Optimizer,CO)的多无人机协同三维路径规划(提供MATLAB代码)

一、猎豹优化算法 猎豹优化算法(The Cheetah Optimizer,CO)由MohammadAminAkbari等人于2022年提出,该算法性能高效,思路新颖。 参考文献: Akbari, M.A., Zare, M., Azizipanah-abarghooee, R. et al. The…...

Linux:进程的创建、终止和等待

一、进程创建 1.1 fork函数初识 #include pid_t fork(void); 返回值:子进程中返回0,父进程返回子进程id,出错返回-1 调用fork函数后,内核做了下面的工作: 1、创建了一个子进程的PCB结构体、并拷贝一份相同的进程地址…...

数值优化基础——基于优化的规划算法

1 最优化问题的一般形式 最优化问题:满足一系列约束的可行域内,找到使得目标函数最小的解 min ⁡ f ( x ) s.t. x...

括号匹配——(栈实现)

题目链接 有效的括号https://leetcode.cn/problems/valid-parentheses/description/ 题目要求 样例 解题代码 import java.util.*; class Solution {public boolean isValid(String str) {Stack<Character> stacknew Stack<>();for(int i0;i<str.length();i)…...

【Java 并发编程】初识多线程

前言 到目前为止&#xff0c;我们学到的都是有关 “顺序” 编程的知识&#xff0c;即程序中所有事物在任意时刻都只能执行一个步骤。例如&#xff1a;在我们的 main 方法中&#xff0c;都是多个操作以 “从上至下” 的顺序调用方法以至结束的。 虽然 “顺序” 编程能够解决相当…...

Linux下载安装MySQL8.4

这里写目录标题 一、准备工作查看系统环境查看系统架构卸载已安装的版本 二、下载MySQL安装包官网地址 三、安装过程上传到服务器目录解压缩&#xff0c;设置目录及权限配置my.cnf文件初始化数据库配置MySQL开放端口 一、准备工作 查看系统环境 确认Linux系统的版本和架构&am…...

强化学习笔记之【DDPG算法】

强化学习笔记之【DDPG算法】 文章目录 强化学习笔记之【DDPG算法】前言&#xff1a;原论文伪代码DDPG算法DDPG 中的四个网络代码核心更新公式 前言&#xff1a; 本文为强化学习笔记第二篇&#xff0c;第一篇讲的是Q-learning和DQN 就是因为DDPG引入了Actor-Critic模型&#x…...

c++继承(下)

c继承&#xff08;下&#xff09; &#xff08;1&#xff09;继承与友元&#xff08;2&#xff09;继承与静态成员&#xff08;3&#xff09;多继承及其菱形继承问题3.1 继承模型3.2 虚继承3.3 多继承中指针偏移问题 &#xff08;4&#xff09;继承和组合&#xff08;9&#xf…...

数据结构 ——— 单链表oj题:反转链表

目录 题目要求 手搓一个简易链表 代码实现 题目要求 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 手搓一个简易链表 代码演示&#xff1a; struct ListNode* n1 (struct ListNode*)malloc(sizeof(struct ListNode)); assert(n1);…...

前端项目npm install报错解决的解决办法

报错问题一: [rootspug-api spug_web]# npm install npm WARN deprecated xterm4.19.0: This package is now deprecated. Move to xterm/xterm instead. npm WARN deprecated workbox-google-analytics4.3.1: It is not compatible with newer versions of GA starting with v…...

vue双向绑定/小程序双向绑定区别

Vue双向绑定与小程序双向绑定在实现方式、语法差异以及功能特性上均存在显著区别。以下是对这两者的详细比较&#xff1a; 一、实现方式 Vue双向绑定 Vue的双向绑定主要通过其响应式数据系统实现。Vue使用Object.defineProperty()方法&#xff08;或在Vue 3中使用Proxy对象&am…...

华为OD机试真题---字符串变换最小字符串

题目描述: 给定一个字符串s&#xff0c;最多只能进行一次变换&#xff0c;返回变换后能得到的最小字符串(按照字典序进行比较)。 变换规则: 交换字符串中任意两个不同位置的字符。 输入描述: 一串小写字母组成的字符串s 输出描述: 按照要求进行变换得到的最小字符串 补…...

JAVA基础面试题汇总(持续更新)

1、精确运算场景使用浮点型运算问题 精确运算场景&#xff08;如金融领域计算应计利息&#xff09;计算数字&#xff0c;使用浮点型&#xff0c;由于精度丢失问题&#xff0c;会导致计算后的结果和预期不一致&#xff0c;使用Bigdecimal类型解决此问题&#xff0c;示例代码如下…...

设计模式-创建型-常用:单例模式、工厂模式、建造者模式

单例模式 概念 一个类只允许创建一个对象&#xff08;或实例&#xff09;&#xff0c;那这个类就是单例类&#xff0c;这种设计模式就叫做单例模式。对于一些类&#xff0c;创建和销毁比较复杂&#xff0c;如果每次使用都创建一个对象会很耗费性能&#xff0c;因此可以把它设…...

【数据结构】【链表代码】随机链表的复制

/*** Definition for a Node.* struct Node {* int val;* struct Node *next;* struct Node *random;* };*/typedef struct Node Node; struct Node* copyRandomList(struct Node* head) {if(headNULL)return NULL;//1.拷贝结点&#xff0c;连接到原结点的后面Node…...

Linux 系统五种帮助命令的使用

Linux 系统五种帮助命令的使用 本文将介绍 Linux 系统中常用的帮助命令&#xff0c;包括 man、–help、whatis、apropos 和 info 命令。这些命令对于新手和有经验的用户来说&#xff0c;都是查找命令信息、理解命令功能的有力工具。 文章目录 Linux 系统五种帮助命令的使用一…...

GEO时代媒体发布新范式:Infoseek如何用工程思维重构内容分发

上周跟一个做技术社区运营的朋友聊天&#xff0c;他吐槽了一件事&#xff1a;公司新功能上线&#xff0c;想发篇技术解读稿&#xff0c;找了家公关公司报价&#xff0c;一篇3000块&#xff0c;承诺发30家媒体&#xff0c;但具体发哪家、什么时候发、效果怎么样&#xff0c;全凭…...

GLM-4v-9b行业落地:跨境电商商品图多语言描述生成自动化方案

GLM-4v-9b行业落地&#xff1a;跨境电商商品图多语言描述生成自动化方案 1. 引言&#xff1a;跨境电商卖家的共同痛点 如果你是做跨境电商的&#xff0c;下面这个场景你一定不陌生&#xff1a;仓库里堆满了新品&#xff0c;运营同事催着要上架&#xff0c;但每个商品都需要准…...

批量视频加图片水印工具使用指南

软件简介批量视频加图片水印工具是一款桌面端视频水印批量添加工具&#xff0c;支持单张/多张水印、九宫格固定位置、四种随机位置模式、大小和透明度调节、时间间隔水印等功能。核心功能功能说明单张水印所有视频使用同一张水印图片多张随机水印从水印文件夹中随机选择水印图片…...

【花雕学编程】Arduino BLDC 之 AI 迷你小龙虾 MimiClaw 自主闭环控制机器人(带传感器反馈)

从工程视角来看&#xff0c;基于Arduino、使用互补滤波进行姿态控制的BLDC&#xff08;无刷直流电机&#xff09;机器人&#xff0c;是一个典型的嵌入式实时闭环控制系统。它集成了传感器数据融合、控制算法和电机驱动&#xff0c;广泛应用于对姿态稳定性有要求的场景。关于 Mi…...

CAN FD通信中,如何用AUTOSAR配置搞定TDC和SSP?一个80% Offset的实战案例

CAN FD通信中AUTOSAR配置实战&#xff1a;TDC与SSP的80% Offset实现 在汽车电子领域&#xff0c;CAN FD&#xff08;Controller Area Network Flexible Data-rate&#xff09;正逐步取代传统CAN总线&#xff0c;成为车载网络的主流选择。随着数据传输速率提升至2Mbps甚至更高&a…...

Cadence 17.4 PCBEditor 中文菜单设置保姆级教程(含环境变量配置与补丁号查看)

Cadence 17.4 PCBEditor 中文界面配置全攻略&#xff1a;从环境变量到实战技巧 刚接触Cadence Allegro的工程师常被其全英文界面劝退。其实从17.4版本开始&#xff0c;PCBEditor已内置中文支持&#xff0c;只是需要一些"隐藏操作"来激活。本文将手把手带你完成从补丁…...

WeChatExporter:免费开源工具,轻松备份你的微信聊天记录到电脑

WeChatExporter&#xff1a;免费开源工具&#xff0c;轻松备份你的微信聊天记录到电脑 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾经担心过手机丢失、系统崩…...

别再手动调了!Meshlab模型对齐的两种高效工作流与常见误区盘点

Meshlab模型对齐的高效策略与深度避坑指南 Meshlab作为开源三维模型处理工具&#xff0c;在学术研究和工业应用中扮演着重要角色。模型对齐作为其核心功能之一&#xff0c;直接影响后续的编辑、分析和可视化效果。许多用户虽然掌握了基础操作&#xff0c;但在面对复杂场景时仍会…...

避开这些坑!MoveIt C++编程中setGoalTolerance、computeCartesianPath等关键函数使用详解与调试技巧

MoveIt C编程避坑指南&#xff1a;关键函数深度解析与实战调试技巧 在机器人运动规划领域&#xff0c;MoveIt作为ROS生态中的核心组件&#xff0c;为开发者提供了强大的功能接口。然而在实际C编程中&#xff0c;许多开发者往往陷入看似简单却暗藏玄机的函数调用陷阱。本文将聚焦…...

UG/NX Block UI Styler字符串控件避坑指南:常见问题与解决方案

UG/NX Block UI Styler字符串控件避坑指南&#xff1a;常见问题与解决方案 在UG/NX二次开发中&#xff0c;Block UI Styler作为可视化对话框设计工具&#xff0c;其字符串控件&#xff08;String Control&#xff09;是使用频率最高的交互元素之一。无论是参数输入、状态显示还…...