Total Pageviews

Saturday 23 January 2021

音乐流媒体服务器程序-Navidrome

 1.Navidrome是Go写的,资源占用非常少。

2.部署更简单,无论是用Docker还是手动部署,就一个二进制文件,下载即用。

3.原生支持中文。

4.因为和Subsonic兼容,所以有很多客户端支持。

当然要说缺点的话,我用了一段时间比较遗憾的是不能通过Web页面上传音乐,另外UI略微丑了一点。上传这个问题后面我会介绍一个临时解决办法。

前面说了因为navidrome不支持上传功能,所以这里我自己加了个miniserve,然后就可以通过miniserve上传音乐了。

之后新建nginx站点配置文件:

nano /etc/nginx/conf.d/navidrome.conf

写入如下配置:

server {
   listen 80;
   server_name navidrome.imlala.best; # 换成你的域名
   client_max_body_size 0;

location / {
   proxy_pass       http://127.0.0.1:4533;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   }
}

使用certbot签发ssl证书:

certbot --nginx

访问你的域名创建管理员账号。

访问你的服务器IP:4534可以看到miniserve的界面,登录进去可以上传音乐。

项目地址:https://github.com/deluan/navidrome

https://www.navidrome.org

----------------------------------------

开源音乐服务器-Navidrome

Navidrome是一款Web版的开源音乐服务器,用户可以在任何地方通过浏览器或者手机来收听自己的音乐。支持多语言(包括中文),多系统平台包括Windows,Mac OS以及Linux,docker等,基于Go和Javascript编写,遵守GPL3.0开源协议。

主要特性:

    支持海量音乐收藏
    几乎可播放任何音频格式
    支持用户标记的各种元数据
    多用户,每个用户都有自己的播放次数、播放列表、收藏夹等
    资源占用率低
    自动监控音乐库的变化,导入新文件和重新加载新的元数据
    基于 Material UI 的主题、现代和响应式的 Web 界面
    与所有 Subsonic/Madsonic/Airsonic 客户端兼容
    在传输中进行转码,可按用户/播放器设置,支持 Opus 编码

Demo:https://demo.navidrome.org/app/

源码:https://github.com/navidrome/navidrome/

-------------------------------------------------------------

Modern Music Server and Streamer compatible with Subsonic/Airsonic

www.navidrome.org

 

Navidrome Music Server  Tweet

Last Release Build Downloads Docker Pulls Dev Chat Subreddit Contributor Covenant

Navidrome is an open source web-based music collection server and streamer. It gives you freedom to listen to your music collection from any browser or mobile device. It's like your personal Spotify!

Note: The master branch may be in an unstable or even broken state during development. Please use releases instead of the master branch in order to get a stable set of binaries.

Check out our Live Demo!

Any feedback is welcome! If you need/want a new feature, find a bug or think of any way to improve Navidrome, please file a GitHub issue or join the discussion in our Subreddit. If you want to contribute to the project in any other way (ui/backend dev, translations, themes), please join the chat in our Discord server.

Installation

See instructions on the project's website

Cloud Hosting

PikaPods has partnered with us to offer you an officially supported, cloud-hosted solution. A share of the revenue helps fund the development of Navidrome at no additional cost for you.

PikaPods

Features

  • Handles very large music collections
  • Streams virtually any audio format available
  • Reads and uses all your beautifully curated metadata
  • Great support for compilations (Various Artists albums) and box sets (multi-disc albums)
  • Multi-user, each user has their own play counts, playlists, favourites, etc...
  • Very low resource usage
  • Multi-platform, runs on macOS, Linux and Windows. Docker images are also provided
  • Ready to use binaries for all major platforms, including Raspberry Pi
  • Automatically monitors your library for changes, importing new files and reloading new metadata
  • Themeable, modern and responsive Web interface based on Material UI
  • Compatible with all Subsonic/Madsonic/Airsonic clients
  • Transcoding on the fly. Can be set per user/player. Opus encoding is supported
  • Translated to various languages

Documentation

All documentation can be found in the project's website: https://www.navidrome.org/docs. Here are some useful direct links:

from https://github.com/navidrome/navidrome/ 

-------------------------------------------------------

Navidrome:自建音乐库的又一选择

无论是 Jel­lyfin、Emby 还是 Plex,它们都不是专门的音乐媒体程序。即使这些软件都具备播放音乐的功能,界面也十分美观,但它们的核心用途终究还是在视频播放上。因此,我也只建议同时有视频观看需求的朋友部署这类媒体程序,这样才不会在使用时因为程序有太多用不上的功能而感到困扰。

其实,在写完音乐库程序推荐后没多久,我就又发现了一款开源的音乐服务器软件「Navidrome」。只是相比御三家,Navidrome 的界面虽然采用的是 Ma­te­r­ial De­sign 设计,但就显示效果来看并不符合我个人的审美需求;网页端虽然全平台通用,但在移动设备上还是需要有一个 App 方便即开即用;即使兼容 Sub­sonic/​Mad­sonic/​Air­sonic 等一系列音乐流媒体协议,但市面上的大部分支持这些协议的播放器都是英文,几乎没有汉化,用着也十分不趁手;更别说直到本文发布的现在,Navidrome 还是不支持外挂 LRC 歌词

……

如此这番批判下,想必你也能理解我为何没有及时安利 Navidrome 了。可现在水文推荐的原因又是什么呢?这两天水群的时候,看到群友推荐了一款国人开发的音乐播放器程序「音流」,界面符合国人审美,设计简洁,功能实用,间接性地解决了 Navidrome 不好看也不好用的痛点。因此,Navidrome 也就值得推荐给大家一试了。

安装

推荐使用 Docker Com­pose 安装 Navidrome。创建 docker-compose.yml 文件,填入以下内容:

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    user: 1026:100 #用户id,详细解释见后文
    ports:
      - 4533:4533 #左侧端口如有冲突,可随意修改
    volumes:
      - ./navidrome:/data #数据路径
      - /volume1/media/music:/music:ro #音乐路径
    environment:
      #程序默认语言
      - ND_DEFAULTLANGUAGE=zh-Hans
      #启用GRAVATAR头像
      - ND_ENABLEGRAVATAR=true
      #关闭转码,如需要转码请设置为true
      - ND_ENABLETRANSCODINGCONFIG=false
      #SPOTIFY相关
      # - ND_SPOTIFY_ID=
      # - ND_SPOTIFY_SECRET=
      #LAST.FM相关
      # - ND_LASTFM_LANGUAGE=zh
      # - ND_LASTFM_APIKEY=
      # - ND_LASTFM_SECRET=
      #PROXY相关
      # - HTTP_PROXY=http://proxy:port
      # - HTTPS_PROXY=http://proxy:port
    restart: unless-stopped

关于 user 部分,Navidrome 不建议使用 root 用户运行。群晖用户一般是 1026:100 ,可以登录 SSH 终端后输入 id username 查询。例如我的群晖用户名是 mikusa

$ id mikusa
uid=1026(mikusa) gid=100(users) groups=100(users),101(administrators),65537(docker)

如果实在是无法确定或者懒得查,那就填写 1000:1000

volumes 文件夹挂载部分,官方建议为音乐文件夹设置只读 :ro 标记以保证不修改音乐文件。群晖用户同时需要注意预创建 navidrome 数据文件夹。

而环境变量的部分,虽然官方文档有数十条可供选择的环境变量,但实际上用到的配置不多,除了固定语言、关闭转码以外,都是些不影响使用的功能。

如果你有增减环境变量的需求,请参考官方文档

如果你需要使用域名访问 Navidrome,这里提供一个简单的 Ng­inx 反向代理配置:

server {
    listen 80;
    server_name navidrome.you.domain;
    return 301 https://navidrome.you.domain$request_uri;
}

server {
    listen 443 ssl http2;
    server_name navidrome.you.domain;
    #SSL配置省略
    location / {
        proxy_pass http://navidrome:4533;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_buffering off;
    }
    access_log /home/wwwlogs/navidrome.log;
}

使用

启动容器后,Navidrome 便可以直接使用了,几乎不需要其他额外的设置。

初次访问 IP:4533,Navidrome 会要求你先创建管理员账户。

因为环境变量中已经配置了默认语言,所以不用再修改用户语言,直接就是中文。

Navidrome 没有像 Plex 那样严格从 Mu­sicBrainz 中获取音乐数据.

总之,只要你准备好音乐,Navidrome 就可以做到开箱即用。

音流

为了能让 Navidrome 变得稍微好用一点点,我的建议是使用第三方客户端。Navidrome 目前支持 Sub­sonic/​Mad­sonic/​Air­sonic 协议,市面上已经有许多 Sub­sonic/​Mad­sonic/​Air­sonic 的客户端,但它们都没有中文。而「音流」的出现,让中文用户多了一种选择。

音流」是一款国人开发的音乐播放器,支持 Sub­sonic/​Navidrome/​Jel­lyfin/​Emby/​Au­dio­Sta­tion,现已登录 An­droid、iOS,未来可能支持 Win­dows 和 tvOS 平台。音流采用 Flut­ter 开发,界面简洁美观,整体以透明和高斯模糊为主,布局类似于网易云音乐,上手基本没有门槛。你可以在音流官网获取 An­droid 安装包,或直接在 iOS App Store 搜索「音流」下载。

我们只要填入 Navidrome 地址、用户名和密码登录后,就可以进入音流首页。

如果你的音乐很多,那音流可能需要先扫描一会儿。

接着,你应该注意到了首页「主线路」这三个字。这是音流中最让我感到惊喜的功能,它支持主备线路切换

。也就是说,你可以主线路填内网地址,备用线路填外网地址。这样当你出门的时候,音流可以自动切换到外网地址上,而当你回到家中,又自动切换回内网。由于流媒体有缓存,切换网络的过程,播放音乐不会中断。

音流的各方面都很像网易云。首页按最新专辑、每日推荐、最近播放、最常播放和随机专辑依次排列。其中,每日推荐是随机的五十首音乐。若是觉得这五十首不合现在的心情,还可以立刻刷新换一批,是个不错的功能。

播放页面可以左滑进入推荐,右滑进入歌词。音流支持读取音乐中内嵌的歌词,并以双语上下两行显示。

歌词

群友告诉我说有一款开源的歌词 / 封面 API 程序「LrcApi」,可以直接用在音流上.

根据官方介绍,Lr­cApi 为音流量身打造。支持酷狗 / 聚合 API 获取 LRC 歌词,支持获取音乐 / 专辑 / 艺术家封面。安装倒也很简单,Com­pose 一把:

version: "3.9"
services:

  lyricapi:
    image: hisatri/lyricapi:latest
    container_name: lyricapi
    ports:
      - 28883:28883
    environment:
      - TZ=Asia/Shanghai
      # - API_AUTH=自定义一个鉴权key
    volumes:
      - /volume1/media/music:/music:ro #和Navidrome一致的音乐路径
    restart: unless-stopped

关于 volumes 挂载部分,如果你正在使用 Navidrome,可以将 Navidrome 的音乐路径映射到容器中,这样 Lr­cApi 可以直接使用你本地已存在的的 LRC 歌词。直接解决了 Navidrome 不能使用本地歌词的问题。

关于环境变量中 API_AUTH 的部分,如果你公开创建了 Lr­cApi 但是不想让别人白嫖,那么就可以填写这个环境变量,为 Lr­cApi 加上一个密码(header 鉴权),只有密码正确才能在音流中使用。

接着再配合 Ng­inx 反向代理。你可以把 Lr­cApi 放在 Navidrome 同一个 Ng­inx 配置里:

location /jsonapi {
    proxy_pass http://lyricapi:28883/jsonapi;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
}

这样,就可以直接通过你的 Navidrome 的链接加上 /jsonapi 来访问这个 API。

或者,你不喜欢用 /jsonapi 访问,只要将 location /jsonapi 中的 /jsonapi 改成你喜欢的就行了。比如改成 /lrc 。你就可以在音流中填写 https://navidrome.you.domain/lrc 来使用 Lr­cApi。

不过, Lr­cApi 目前还不支持获取带译文的歌词,希望后续能支持使用网易云音乐的歌词源。所以,如果使用 Navidrome ,并且本地保存了不少 LRC 歌词的话,还是自建一个 Lr­cApi ,效果会比较好。

就到这了,音流目前已经十分完善,足够让 Navidrome 容光焕发了。其余的功能就请诸位自行发现和体验吧!

参考

 线路自动切换在正式版中为付费功能。

 

 

 


 


No comments:

Post a Comment