将软路由、服务器、NAS等搭建airplayer
喜欢听歌的大虾们对本地点播情有独钟,毕竟现在的音乐软件对版权收得越来越紧,原来能听歌的许多软件纷纷删库And Run。
小米手机可以直接用妙享在小爱音箱上播放,直接有airplay的感觉,无延迟,比蓝牙好得太多了,但想把家里的软件路由和Ubuntu服务器也作为播放器,就可以将原先淘汰下来的传统有源音箱作为听歌利器了。
万能的github找到airplay2播放器库:shairport
地址:https://github.com/mikebrady/shairport-sync
一、软路由安装
Openwrt直接安装airplay2插件即可
二、ubuntu服务器安装
1、编译安装
安装操作系统的步骤,我就不在这里赘述了,网上一大堆,挑个自己看着顺眼的教程一步步做就好了。
第一步:安装软件依赖软件包:
sudo apt-get install build-essential git
autoconf automake libtool libdaemon-dev libasound2-dev libpopt-dev libconfig-dev
avahi-daemon libavahi-client-dev
libssl-dev
libpolarssl-dev
libsoxr-dev
第二步:克隆github的源代码到本地
第三步:编译安装shariport
cd shairport-sync
autoreconf -i -f
./configure --with-alsa --with-avahi --with-ssl=openssl --with-metadata --with-soxr --with-systemd --with-systemdsystemunitdir=/lib/systemd/system
注:configure的参数,作者主页的写的不全,少了–with-systemdsystemunitdir=/lib/systemd/system这一行,我给补上了。否则编译会出错,其实就是没把变量带进去,导致cp失败
make
sudo make install
getent group shairport-sync &>/dev/null || sudo groupadd -r shairport-sync >/dev/null
getent passwd shairport-sync &> /dev/null || sudo useradd -r -M -g shairport-sync -s /usr/bin/nologin -G audio shairport-sync >/dev/null
以上和作者主页的基本一致,需要补充的命令如下:
sudo cp scripts/shairport-sync /etc/init.d/
sudo update-rc.d shairport-sync defaults 90 10
注:由于新版linux采用systemd取代旧的systemV,所以新版linux已经没有chkconfig命令来配置开机启动了,新版的命令就是update-rc.d。
编辑配置文件:
vi /etc/shairport-sync.conf
general = {
name = "Mike's Boombox";
};
alsa = {
output_device = "hw:0";
mixer_control_name = "PCM";
};
注:配置文件主要设置general和alsa这两部分就可以运行了,如果想深入研究其他参数,可以看看他配置文件里面的注释。
name = “Mike’s Boombox”; #这个就是你手机里要显示的设备名称,如下图所示(我用的是Shairport Sync Player):
output_device = “hw:0”; #这里要配置音频输出的设备编号。
这个编号怎么获得呢,要通过这个命令:
aplay -l
显示如下:
大家看一下device的id,比如:
hw:0 代表的是我第一个设备,系统默认的声卡 #一般都是选这个
hw:3 代表我第二个设备HDMI #因为shairport只支持声音的传输,所以不选这个
注:如果aplay命令没有输出或者出现错误提示,一种可能是你声卡禁用了,还有就是你的声卡驱动,linux不支持。解决办法就是自己下载编译alsa驱动,网上有这方面帖子。
mixer_control_name = “PCM”; #这个就是要制定音量控制器的名称,如果你不懂的话就是选默认PCM就好了,瞎选程序启动会有问题
保存好配置之后,运行:
sudo /etc/init.d/shairport-sync start
大功告成 ,拿出iphone从屏幕下方呼出菜单,看到Airplay的字样了吧 :
选择好你搭建好的设备(第二个):
打开QQ音乐,选一首歌试试吧 。由于本人不是发烧友,所以此篇文章只算是抛砖引玉,这个东西可以玩儿的很灵活,没有MiniPC的可以买个蓝莓派,而且官方也是推荐用这个。音频处理这块可以自行添加USB声卡什么的。。。usb音频设备的ID选择可以参考文章
Docker安装(最喜欢的方式,绿色无污染,卸载简单)
Shairport Sync Docker Image
Available at: https://hub.docker.com/r/mikebrady/shairport-sync
Docker Run
To run the latest release of Shairport Sync, which provides AirPlay 2 service:
$ docker run -d --restart unless-stopped --net host --device /dev/snd \
mikebrady/shairport-sync:latest
To run the classic version:
$ docker run -d --restart unless-stopped --net host --device /dev/snd \
mikebrady/shairport-sync:latest-classic
Options
Command line options will be passed to Shairport Sync. Here is an example:
$ docker run -d --restart unless-stopped --net host --device /dev/snd \
mikebrady/shairport-sync:latest \
-v --statistics -a DenSystem -- -d hw:0 -c PCM
This will send audio to alsa hardware device hw:0
and make use of the that device’s mixer control called PCM
. The service will be visible as DenSystem
on the network.
The image is built with PulseAudio backend support. To use it, refer to docker-compose.yaml
for required environment variables and mounts. You might need to adjust authentication on your PulseAudio server (PA documentation) and set default backend to pa
via either command line option -o
or general.output_backend
field in config file.
Configuration File
To get access to the full range of configuration options, pass the configuration file to /etc/shairport-sync.conf
in the container using the -v
option or docker compose.
安卓手机投放
安卓手机想要投放歌曲,就用ALLConnect软件投放
docker-compose.yaml:
# Example docker compose config.
services:
shairport-sync:
image: mikebrady/shairport-sync:latest
network_mode: host
restart: unless-stopped
# environment:
# PULSE_SERVER: unix:/tmp/pulseaudio.socket # Path for PulseAudio socket
# PULSE_COOKIE: /tmp/pulseaudio.cookie # Path for PulseAudio cookie
devices:
- "/dev/snd" # ALSA device
# volumes:
# - ./volumes/shairport-sync/shairport-sync.conf:/etc/shairport-sync.conf # Customised Shairport Sync configuration file.
# - /run/user/1000/pulse/native:/tmp/pulseaudio.socket # PulseAudio socket when using that backend
logging:
options:
max-size: "320k"
max-file: "10"
sudo docker-compose up -d
docker安装即可
一次重装系统后播放无声音
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC662 rev3 Analog [ALC662 rev3 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
授权:
sudo chmod -R a+rwx /dev/snd
命令播放音乐:
madplay /tmp/extroot/mp3/xx.mp3
调整音量
alsamixer
两款小工具,让 Windows 和 Android 也能推流音频到 AirPlay
https://sspai.com/post/68654#!
Windows 的解决方案:TuneBlade
Android 的解决方案:AirMusic
虽然很多 Android 设备商都提供了类似 AirPlay 的推流解决方案,但最大的问题依旧是「没有统一规范」,有的在系统层级原生支持 DLNA,有的却只支持 Google Cast。如果家中音箱设备只支持 AirPlay,那就只能通过第三方软件来实现类似 iPhone 的推流效果。
AirMusic 就是这样一款可以将 Android 上正在播放的音频流推送到局域网 AirPlay 音箱的小工具,除了支持 AirPlay 之外,它还额外支持 DLNA、Google Cast、Sonos、Denon HEOS 等设备。
受制于 Android 系统限制(不允许应用之间互相监听音频),这样的音频流推流操作往往需要对设备进行 root 操作;但如果你的系统版本在 Android 10 以上,那么也可以免 root 进行推流。
打开 AirMusic 后,软件会扫描当前局域网下所有支持推流的音响设备,并且会在设备名前面列出设备对应的协议。将手机上正在播放的音频投射到这些设备也很简单——点击列表中想要投射的设备,然后在弹出的对话框选择「立即开始」,稍等几秒钟,原本手机上的正在播放的音频就被投射到对应的音箱中了。
你可以在当前 Android 设备的通知中看到 AirMusic 服务的运行情况、控制音量大小,如果你想结束投射那么只需要点击「闪电」按钮来断开,这时候正在播放的音频就会回到 Android 设备中继续播放。
AirMusic 也提供了非常丰富的设置项目,其中基础的设置项包括了音频投射的方式,音频控制以及音量大小控制的粒度等等。此外对于不同的协议还可以进行单独的设置,比如说 AirPlay 中你可以设定音频延迟的时间,对于 Sonos 则可以调整音频转换的格式等等。针对 Spotify 这样特定的应用甚至还有其他的解决方案(虽然通过 Spotify Connect 也可实现类似的效果)。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 vault@coolxy.cn