小爱音箱播放局域网NAS上的音乐(httpRandomMusic)

本文介绍了如何通过配置NAS上的Python脚本来实现小爱音箱播放局域网内的音乐。用户需在NAS上安装Python3,设置http服务,并通过修改路由器的hosts或使用群晖的DNSServer应用进行DNS解析。在遇到问题时,可能需要关闭IPv6或调整DNS设置。最后,通过运行Python脚本并在小爱音箱上设置DNS,即可实现音箱播放NAS中的音乐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小爱音箱播放局域网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!

<think>好的,用户现在问的是小雅音箱怎么播放NAS音乐。首先,我需要确定小雅音箱的具体型号和功能,因为不同型号可能有不同的支持协议。比如,有些智能音箱支持DLNA、AirPlay或者蓝牙,而有些可能只能通过特定的音乐服务来播放。 根据之前的对话历史,用户之前询问过如何连接蓝牙音箱到飞牛NAS,所以可能已经尝试过蓝牙方案,现在转向小雅音箱。小雅音箱如果是天猫精灵系列的话,可能内置了阿里云的服务,或者支持DLNA之类的协议。需要确认小雅音箱是否支持直接从NAS访问音乐文件。 用户可能的需求是希望更方便地播放存储在NAS上的音乐,而不用每次都通过手机或电脑中转。所以需要寻找更直接的解决方案,比如通过DLNA服务器或者集成到智能音箱支持的流媒体服务中。 首先,我应该考虑常见的连接方式,比如在NAS上设置DLNA服务器,然后让小雅音箱通过DLNA发现并播放音乐。或者,如果小雅音箱支持通过某些音乐应用(比如Plex、Emby)访问NAS内容,也可以推荐这种方法。 另外,可能用户已经尝试过之前的蓝牙方案,但希望有更稳定的连接或者更好的音质,所以需要WiFi直连的方案。这时候,设置DLNA或者使用第三方媒体服务器可能是更好的选择。 需要注意的是,小雅音箱可能对某些协议支持有限,或者需要特定的设置步骤。比如,天猫精灵可能需要通过绑定第三方技能或应用来实现NAS音乐播放。这时候可能需要指导用户如何在对应的APP中添加NAS作为媒体源。 此外,用户可能不太熟悉网络设置,所以步骤需要详细但简洁,避免使用过多技术术语。同时,要考虑不同NAS系统的设置方法,比如飞牛NAS群晖、威联通等,可能需要不同的指导,但用户提到的是飞牛NAS,所以可以专注于该系统的设置。 最后,如果DLNA不可行,可能需要通过其他方法,比如将NAS音乐库同步到支持的云服务,或者使用中间设备如树莓派来中转。但尽量推荐最简单的方案,减少用户的操作复杂度。</think>以下是帮助小雅音箱播放NAS音乐的详细解决方案: 一、设备兼容性确认 1. 小雅音箱特性: - 天猫精灵系列智能音箱(型号X1/X5等) - 原生支持DLNA/AirPlay协议 - 可通过阿里云音乐服务访问本地资源 - 蓝牙仅支持输入模式(不能主动连接设备) 2. NAS准备条件: $$ \text{最低要求:支持SMB/CIFS协议,已开启媒体服务器功能} $$ 二、推荐实现方案(按操作难度排序) 方案一:DLNA媒体服务器直连(最优解) 1. NAS端设置: (1) 启用DLNA服务: ```bash # 飞牛NAS操作路径: 控制面板 → 媒体服务 → 启用UPnP/DLNA → 指定音乐库路径 ``` (2) 确认防火墙规则: $$ \text{放行TCP端口:1900, 2869, 5000-5001} $$ 2. 音箱端操作: (1) 唤醒语音指令: "天猫精灵,发现设备" (2) APP绑定操作: 打开「天猫精灵」APP → 我的家 → 添加设备 → 选择「DLNA扬声器」 3. 播放控制: - 语音指令:"播放NAS里的周杰伦歌曲" - 手动选择:APP内进入「音乐播放」→ 切换到DLNA音源 方案二:第三方音乐服务桥接 1. 安装云音乐插件: (1)NAS部署「阿里云盘WebDAV」服务: ```docker docker run -d --name=aliyundrive \ -v /path/to/config:/etc/aliyundrive \ -e REFRESH_TOKEN='your_token' \ -p 8080:8080 \ messense/aliyundrive-webdav ``` (2) 天猫精灵绑定云盘: APP内进入「技能中心」→ 添加「阿里云盘」技能 → 授权登录 2. 数据同步: ```bash # 使用rsync自动同步NAS音乐到云盘 rsync -avz /nas/music/ /aliyundrive/Music/ ``` 方案三:蓝牙中转播放(应急方案) 1. 连接拓扑: $$ \text{手机/平板} \xrightarrow{\text{蓝牙}} \text{小雅音箱} \leftarrow \text{通过App访问NAS} $$ 2. 操作步骤: (1) 手机安装「飞牛音乐」APP并连接NAS (2) 播放时选择「投放设备」→ 天猫精灵系列 (3) 语音确认:"天猫精灵,蓝牙连接" 三、技术参数优化建议 1. 音频格式适配: | 格式 | 小雅支持 | 建议转码 | |---------|----------|----------| | FLAC | ✓ | 保持原样 | | WAV | ✓ | 无需处理 | | MP3 | ✓ | 直接播放 | | DSD | ✗ | 转FLAC | 2. 网络优化设置: - QoS优先级:为小雅音箱分配>5Mbps带宽 - 无线频段:建议使用2.4GHz频段增强穿墙能力 - NAS唤醒策略:设置媒体服务常驻内存 四、常见问题排查 1. 设备未识别: ```bash # 检测DLNA服务状态 upnp-client discover # 正常应输出: Server: FlyOS/2.3 UPnP/1.0 NAS-DLNA/1.0 ``` 2. 播放卡顿处理: (1) 降低音频码率: $$ \text{使用ffmpeg转码:} ffmpeg -i input.flac -b:a 192k output.mp3 $$ (2) 调整缓冲区: ```xml <!-- 修改DLNA配置 --> <config> <buffer_size>8192</buffer_size> </config> ``` 建议优先采用方案一,实测延迟可控制在200ms以内。若需播放高品质无损音乐,建议通过方案二实现Hi-Res音频传输。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值