使用 Zeya 播放您的音乐
您是否一直想建立自己的音乐站,将最新的音乐收藏流式传输给朋友或同事?您最近是否一直在考虑设置一个始终在线的音乐流媒体服务器,以便您可以打开 Web 浏览器并收听您喜欢的曲目?音乐服务器在宿舍、实验室或办公室中非常有用,文件服务器可以兼作音乐服务器!我将向您展示如何使用 Zeya 实现这一点。
让我们快速开始并快速流式传输音乐。主要地,我们将关注 Zeya,但我们也将简要了解您可能考虑的除 Zeya 之外的其他一些选项。
音乐服务器提供音乐,就像 Web 服务器提供网页一样。Zeya 服务器是用纯 Python 编写的。您最好使用 Python 2.6+,但 Python 2.5+ 也应该可以工作。Zeya 使用外部编码和解码软件来处理各种音频格式。因此,如果计划流式传输这些格式的音频文件,则应在系统上安装 Ogg Vorbis 编码器 (oggenc) 以及 'flac' (flac) 和 'mp3' (mpg123) 格式的解码器。
目前,Zeya 服务器已知的正式版本可在 Ubuntu 9.04+ 和 Debian testing 上正常工作。在撰写本文的过程中,我还发现 Zeya 在 Arch Linux 2009.08+ 版本上也能正常工作。由于 Zeya 没有使用任何特定于发行版的功能,因此它也应该可以在其他 Linux 发行版上工作。
Zeya 在 Debian testing 和 unstable 中可用,可以使用以下命令安装
# aptitude install zeya
如果您决定使用 Debian 软件包,我们将从源代码安装 Zeya,在运行 Zeya 时使用命令 "zeya" 而不是 "./zeya.py"(见下文)。
要从源代码获取 Zeya:从 git 存储库克隆 Zeya 源代码(有关 git 版本控制系统的基本指南,请参阅资源部分中的链接)
$ git clone http://web.psung.name/git/zeya.git
您现在应该有一个 'zeya' 子目录,其中包含 Zeya 服务器的源代码。在启动 Zeya 之前,您应该确保已安装上述编码器和解码器。通常,它们将在您的发行版的软件包存储库中提供。安装完成后,启动 Zeya 服务器。使用 '--path' 选项调用 Zeya,以指定音乐文件在本地文件系统上的位置。例如
$ ./zeya.py --path=/home/r00t/Music/
您应该看到
Using 'dir' backend.
Scanning for music in '/home/r00t/Music'...
Loading library...
Listening on port 8080
我们将更详细地介绍这一点,但重点是如果您看到上述输出,则 Zeya 服务器已启动并正在运行。打开支持 HTML5 的浏览器(见下文)并导航到 http://127.0.0.1:8080,如果您从远程计算机访问,则导航到 http://<您的系统 IP 地址>:8080。图 1 显示了 Web 客户端中正在播放的音乐。

图 1. Zeya 的 Web 客户端
Zeya 使用 HTML5 功能,该功能允许音频嵌入,因此上面的浏览器要求不是笔误:您需要一个支持 HTML5 某些功能的浏览器。目前已知可以工作的浏览器有 Firefox(3.5 或更高版本,推荐 3.6+)、Google Chrome 或 Chromium(最新版本,4.0.223+,在 4.0.249.30+ 版本中效果最佳)以及带有 Google Chrome Frame 插件的 IE 6-8。安装文件包含有关浏览器要求的更多信息。
如您所见,音乐播放客户端非常基本的功能 - 播放、暂停、下一首、上一首和搜索都存在。在我撰写本文时,还添加了“随机播放”功能。大多数功能都是客户端的一部分,而不是服务器的一部分。客户端是用 JavaScript 编写的。
不依赖 Flash
如果您对 HTML5 有一些了解,那么您就会知道其动机之一是消除对富媒体专有插件的需求。因此,Zeya 服务器没有在浏览器中要求 Flash 插件,而是使用了 HTML5 标准的音频嵌入功能,该功能允许您使用 <audio> </audio> 标签嵌入 ogg 文件(请参阅 https://w3schools.org.cn/html5/tag_audio.asp)。Zeya 服务器解码非 Ogg 格式的音乐文件,并将您的音乐重新编码为 Ogg 流并提供服务。(因此需要 flac 和 mp3 解码器。)
使用 zeya.py
您可能已经猜到,zeya.py 是 Zeya 服务器的起点。目前,zeya.py 从命令行接受以下选项
$ ./zeya.py --help
Usage: zeya.py [OPTIONS]
Options:
-h, --help
Display this help message.
--backend=BACKEND
Specify the backend to use. Acceptable values:
dir: (default) read a directory's contents recursively;
see --path
rhythmbox: read from current user's Rhythmbox library
--path=PATH
Directory in which to look for music, under --backend=dir.
(Default: ./)
-b, --bitrate=N
Specify the bitrate for output streams, in kbits/sec.
(default: 64)
-p, --port=PORT
Listen for requests on the specified port. (default: 8080)
--basic_auth_file=FILENAME
Require basic HTTP authentication and only allow users named in
the specified file. The file should be in 'htpasswd' format.
选项值如下:
- 后端:Zeya 支持两种后端来提供音乐。您可以要求 Zeya
从文件系统上包含音乐文件的目录中提供音乐。默认情况下,Zeya 假定这是后端,并在 Zeya 服务器启动的位置查找音乐文件。另一个选项是告诉 Zeya 从当前用户的 Rhythmbox 库中读取要提供的音乐(在这种情况下,您必须拥有 Rhythmbox 库)。
- path:'path' 选项用于指定音乐文件的位置,
如果您使用的是目录后端。
- port:如您在上面看到的,Zeya 默认绑定到端口 8080。您可以更改
使用选项 '--port' 进行设置
bitrate:音频流式传输到客户端的比特率
- basic_auth_file:您可以通过指定一个
‘htpasswd’ 文件格式的用户/密码文件来使用基本的 HTTP 身份验证。启用此选项后,您可以控制谁能够访问 Zeya 的服务。一旦启用此选项,身份验证对话框将在浏览器中弹出,只有在身份验证成功后,Zeya 才会开始流式传输音乐。
Zeya 的音乐数据库
如果您使用目录后端来提供音乐,您会注意到音乐目录中有一个文件 'zeya.db'。这是 Zeya 的音乐数据库。它包含目录中每个音乐文件的三元组(艺术家、专辑、标题)。它使用此信息在客户端中加载音乐库。Zeya 使用 TagPy 库从音乐文件中获取此信息。
Zeya 源代码导览
现在我们已经从用户的角度了解了 Zeya,我想带您浏览一下 Zeya 的源代码。具备 Python、基本 JavaScript 和 HTML 的中级知识,简单的客户端-服务器计算概念,您就可以开始了。不用说,如果您在阅读本文的同时浏览源代码,您将从中获得最大的收益。让我们开始吧。
按字母顺序排列,这些是 Python 源代码文件及其作用
- backends.py:此文件中的代码充当与受支持后端的接口。
所有后端都应实现此文件中定义的 Python 接口 'LibraryBackend'。
common.py:包含一些实用程序函数的小文件
- decoders.py:此文件中的代码与系统的解码器接口
用于 mp3 和 flac 文件。
directory.py:这实现了 Zeya 的目录后端。
- options.py:这处理命令行选项解析、错误
处理并设置选项的默认值。
rhythmbox.py:此文件实现了 Rhythmbox 后端
- zeyaclient.py:这是非 Web、基本
Zeya 命令行客户端的示例实现。
- zeya.py:这是 Zeya 的主要代码,负责
通过调用前面文件中的各种函数来为客户端提供音乐服务。
zeyatest.py:这是 Zeya 测试套件。
- resources/library.html:这是基于 Web 的客户端的 HTML 页面,当您
在浏览器中打开 Zeya 的 URL 时看到的页面。
- resources/zeya.js:这是一个 JavaScript 文件,它实现了基于 Web 的
客户端功能,用于与 Zeya 服务器通信。
testdata/:此子目录包含测试套件的一些测试数据。
doc/:此子目录包含 Zeya 手册页的 Docbook 源代码。
您还可以通过创建 init 样式脚本在启动时启动 Zeya。例如,在 Ubuntu 或其他使用 Upstart 的系统上,您可以在 '/etc/init' 中编写一个 upstart 作业。将以下行写入文件 /etc/init/zeya.conf
# Start zeya
#
description "Start Zeya music server"
start on startup
task
exec python /home/r00t/zeya/zeya.py --path=/home/r00t/Music
这将使 Zeya 服务器在启动时启动。
现在我们已经详细了解了 Zeya,我将简要介绍开源领域中的其他一些软件,这些软件允许您设置音乐服务器。了解还有什么可用的总是好的!
音乐播放器守护程序
音乐播放守护程序 (mpd) 是一个为连接的客户端提供音乐服务的守护程序。与 Zeya 相比,'mpd' 功能更丰富。mpd 已知可在所有主要的 Linux 发行版和其他 Unix 系统(如 OpenSolaris、FreeBSD、NetBSD 和 MacOS X)上运行。
mpd 的客户端以桌面客户端、命令行实用程序和 Web 应用程序的形式存在。它在音乐爱好者社区中非常受欢迎,并且项目网站上记录了许多用于执行炫酷操作的技巧。有关 mpd 的更多详细信息,请参阅资源。
GNUMP3D
GNUMP3D 是 MP3、OGG vorbis 文件、电影和其他媒体格式的流媒体服务器。它从几年前开始不再维护,但源代码仍然可以尝试。它完全用 Perl 编写。它非常易于设置和使用,就像 Zeya 一样。
请查找资源中给出的 GNUMP3D 主页。
Ampache
Ampache 是一个 PHP Web 应用程序,可以设置为通过 HTTP 提供音乐服务。它需要 Apache Web 服务器和 MySQL 数据库。它也可以设置为充当音乐播放守护程序 (mpd) 的客户端。
安装和配置的复杂度适中,详细的指南可以在资源中给出的项目网站上找到。
请注意,以上三个项目中的每一个都需要在客户端安装 Flash 浏览器插件。
我真正喜欢 Zeya 的几件事是它的“无需 Flash”要求(非要求?)以及设计的简洁性。作为用户,我希望有更多功能,希望这些功能会在未来出现。
请注意,Zeya 仍在开发中,在您阅读本文时,一些细微之处可能会发生变化。如果您遇到错误或需要功能,请在 Zeya 邮件列表中报告它们。
- Zeya 项目主页: http://web.psung.name/zeya/
- Zeya 错误跟踪和邮件列表: https://launchpad.net/zeya
- 音乐播放器守护程序: http://mpd.wikia.com/
- GNUMP3D: https://gnu.ac.cn/software/gnump3d/
- Ampache: http://www.ampache.org
- 日常 git: https://linuxkernel.org.cn/pub/software/scm/git/docs/everyday.html
- oggenc: http://linux.die.net/man/1/oggenc
- flac: http://flac.sourceforge.net/
- mpg123: http://www.mpg123.de/
- HTML5: http://dev.w3.org/html5/spec/Overview.html
- JavaScript 教程: https://w3schools.org.cn/JS/default.asp
作者感谢 Zeya 的其他开发人员为源代码的最初想法提供的帮助,并感谢 Suryajith 在 Arch Linux 上测试 Zeya。