小爱音箱播放局域网NAS上的音乐(httpRandomMusic)
手上有一个小爱音箱Pro,拿来给小朋友玩,顺带查下天气,控制下家里电视、空调等家电,一直使用挺方便的。老早以前听歌都是百度一首首下载,然后放在电脑上用千千静听播放,后来版权的重视及在线音乐流行,用网易云音乐、QQ音乐等播放器在线听歌逐渐流行起来,原来下载的歌一直放在电脑上也没播放过。随着小爱音箱搭配的QQ音乐能听的歌越来越少,听歌就只能开着电脑用蓝牙播放,每次播放都得开电脑是个挺麻烦的事情。家里有个群晖NAS一直待机,一直期待小爱官方能够开放播放本地音乐这个功能。期待了很久,官方论坛也翻了不少,发现很多人期待这个功能,官方也没有迹象表达要实现这个功能的意思。近期看到github上有个项目让小爱音箱播放局域网NAS上的音乐,项目是用python写的,博主应该是对相关配置比较熟悉,README说明写的相对简略,折腾了几天才算简单实现,略做记录,有相同需求的朋友可以参考。
作者github项目地址:GitHub - zanjie1999/httpRandomMusic: 让小爱音箱播放局域网NAS上的音乐
无法访问github,移动云盘下载链接:https://caiyun.139.com/m/i?0O5CrOaRKuBVK
提取码:7vTa
基本配置:1、群晖NAS 2、小爱音箱
实现目标:小爱音箱播放局域网NAS上的音乐
原理:在NAS上实现http服务,op.lan解析为NAS的局域网地址,语音操作小爱同学去访问音乐。具体为何是op.lan这个域名,原理不详。原作者写的比较简略,讲讲我遇到的问题及解决办法。
1、nas上安装Python3
群晖的套件中心有python3,套件中心搜索python3直接安装即可。
2、下载并打开`httpRandomMusic.py`,编辑`fileDir`变量,填写你存放音乐的文件夹的完整路径。群晖NAS打开SMB功能后,在文件夹路径直接访问\\192.168.0.101\Files 即可访问文件夹,或者如下图PC访问共享文件夹地址来访问。一直以为程序中fileDir用这个地址可以直接访问,实际在python文件中fileDir为 /volume1/Files 这种格式。
3、修改路由器的hosts,加入这样一行,或者直接将服务器主机名改成`op`
修改路由器hosts 可以用软路由直接配置。我用的是TL-WDR5620千兆版,查找了很多资料没找到普通路由器修改hosts的方法。搜到了一个网页:使用群晖的DNS Server应用搭建内网DNS服务器,可以实现内网DNS解析,解析不了的再用公网DNS就可以了。
参考链接: 使用群晖的DNS Server应用搭建内网DNS服务器|日新博客
进入套件中心安装DNS Server应用
安装完成后,打开DNS Server
左侧菜单选择区域 然后选择新增master区域
在创建Master区域内填写想要解析的域名,op.lan,主DNS服务器填写群晖的IP地址。在路由器DHCP选项设置IP地址绑定,让自己的群晖都设置一个固定的IP地址方便管理,以后可以通过自己设定的域名访问群晖。
4、设置成功后,修改电脑DNS用nslookup 测试是否能够正常解析
上图所示为正常解析。
测试过程中出现如上图所示直接用nslookup op.lan解析失败,但是用nslookup op.lan 192.168.0.104可以正常解析为群晖DNS地址。这种问题,我这解决方案是把IPV6关掉就可以了。
5、群晖控制面板启用ssh或者telnet功能,连接NAS后,用管理员账户密码登陆终端提示符为$符,然后用sudo -i同样的账户密码切换到管理员模式,终端提示符为#符。
6、修改NAS本机resolv.conf文件,屏蔽第一行nameserver那一行,新增op.lan 192.168.0.104
root@chen-synology:~# vi /etc/resolv.conf
#nameserver 192.168.1.1
op.lan 192.168.0.104
~
"/etc/resolv.conf" 2L, 45C written
root@chen-synology:~# nslookup op.lan
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: op.lan
Address: 192.168.0.104
默认NAS的解析地址为192.168.1.1 修改为192.168.0.104
7、运行httpRandomMusic脚本,注意脚本是python3语言。我的NAS装了Python3后,python2和python3都有,指令要使用python3。使用python2会提示报错。如果执行正常,会输出提示文件夹内有xxfiles。在电脑上用浏览器访问http://op.lan:65533 ,可以看到一个播放器界面,能够正常播放出fileDir设置的那个目录里的音乐。确保小爱音箱重新获取ip地址后DNS设置为NAS的地址。我登陆不了小爱的shell,直接把路由器DHCP的DNS设置为NAS的IP地址,小爱断电重主启。
root@chen-synology:/volume1/Files# python3 httpRandomMusic.py
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: op.lan
Address: 192.168.0.104
12 files
/
192.168.0.110 - - [20/Jul/2023 20:57:35] "GET / HTTP/1.1" 302 -
/Walkin%20in%20the%20Air.mp3
/volume1/music/Oceanborn/Walkin in the Air.mp3
192.168.0.110 - - [20/Jul/2023 20:57:35] "GET /Walkin%20in%20the%20Air.mp3 HTTP/1.1" 200 -
----------------------------------------
Exception happened during processing of request from ('192.168.0.110', 39748)
Traceback (most recent call last):
File "/var/packages/py3k/target/usr/local/lib/python3.8/socketserver.py", line 316, in _handle_request_noblock
self.process_request(request, client_address)
File "/var/packages/py3k/target/usr/local/lib/python3.8/socketserver.py", line 347, in process_request
self.finish_request(request, client_address)
File "/var/packages/py3k/target/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/var/packages/py3k/target/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
self.handle()
File "/var/packages/py3k/target/usr/local/lib/python3.8/http/server.py", line 427, in handle
self.handle_one_request()
File "/var/packages/py3k/target/usr/local/lib/python3.8/http/server.py", line 415, in handle_one_request
method()
File "httpRandomMusic.py", line 108, in do_GET
shutil.copyfileobj(f, self.wfile)
File "/var/packages/py3k/target/usr/local/lib/python3.8/shutil.py", line 205, in copyfileobj
fdst_write(buf)
File "/var/packages/py3k/target/usr/local/lib/python3.8/socketserver.py", line 799, in write
self._sock.sendall(b)
BrokenPipeError: [Errno 32] Broken pipe
8、如何使用
小爱同学
打开小怪
然后以下三条指令三选一
指令 | 功能 |
播放服务器的音乐 | 按着上次的进度继续播放(没有进度就是从头放) |
从头播放服务器的音乐 | 按修改时间倒序播放(先放最后放进文件夹的文件) |
随机播放服务器的音乐 | 随机播放(播放列表打乱,不会重复随机到同一首) |
查看了作者的说明,需要注意指令的准确性。
Enjoy!
本文链接:https://my.lmcjl.com/post/14621.html
4 评论