之前看到过一篇文章《TL-WR703N刷PulseAudio固件实现伪AirPlay》,但那毕竟是“伪”的,于是就想着实现真正的AirPlay播放,借助于强大的Google和自己不懈的努力测试,终于算是完成了,这里分享给大家。
要实现的目标:wr703n有线口用来连接电脑进行安装调试,完成之后不再使用,wr703n通过无线连接家里已有的无线网络,iPad也在同一无线网络内,可以AirPlay到wr703n实现音频输出。
需要准备的硬件:wr703一个,因为wr703n的flash只有4MB,无法满足安装软件的要求,所以需要一个U盘(几百兆的就可以了)来扩展,USB HUB一个,USB声卡一个,苹果设备一个,可以AirPlay输出测试。其他诸如音频连接线和音箱等就不做赘述。下图是我准备的东西,给大家做个参考,因为我的USB声卡额外提供了一个USB接口,所以我把U盘插到声卡上,省了一个USB HUB。
下面开始安装,用网线把电脑和wr703n连接起来,把电脑的IP设置为192.168.1.2,开始操作。
1、如果是原厂固件,直接用openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin升级
2、如果已经是Openwrt,那么在Openwrt下恢复固件:
#cd /tmp
#mtd -r write openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.binfirmware
刷完重启之后,通过telnet192.168.1.1来登录,更改密码passwd,退出,以后就可以用ssh来登录了。
接下来我们做些准备工作,首先修改opkg的更新源为本地服务器。
#vi /etc/opkg.conf
把第一行和最后一行注释掉,再添加一行
因为wr703n只有4M空间,无法安装所需要的软件,所以我们要把系统挂载到U盘上,依次执行下列命令,这里会把U盘格式化成ext4文件系统。
#mke2fs -j /dev/sda
#mount /dev/sda /mnt
#mkdir /tmp/root
#mount -o bind / /tmp/root
#cp /tmp/root/* /mnt -a
#umount /tmp/root
完成后,修改/etc/config/fstab文件的相应字段,其他字段不动,让系统启动自动挂载。
config mount
option target /
option device /dev/sda
option fstype ext4
option options rw,sync
option enabled 1
option enabled_fsck 0
执行如下命令让其开机生效
#/etc/init.d/fstab enable
reboot重启,df -h看根分区容量是不是变大了,这样就成功把系统挂载到u盘上了。
现在我们要把wr703n连接到家里的无线网,这里贴出/etc/config/network和wireless文件的例子,请根据实际情况自行修改。
#vi /etc/config/network
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config interface 'lan'
option ifname 'eth0'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask'255.255.255.0'
config interface 'wlan'
option proto 'dhcp'
option hostname'ShairPort'
#vi /etc/config/wireless
config wifi-device radio0
option type mac80211
option channel auto
option macaddr 38:83:45:36:41:42
option hwmode 11ng
option htmode HT20
list ht_capab SHORT-GI-20
list ht_capab SHORT-GI-40
list ht_capab RX-STBC1
list ht_capab DSSS_CCK-40
config wifi-iface
option device radio0
option network wlan
option mode sta #无线的模式,不要选错
option ssid Tomato #家里无线网络的SSID名称,根据实际情况修改
option encryption psk2 #加密方式,根据对端来选择,建议使用WPA2/AES
option key 12345678 #无线连接密码,根据实际情况修改
修改完成之后就可以重启网络了/etc/init.d/network restart,然后执行ifconfig,看看wlan0口是否已经获取到IP地址了。
下面我们安装一下USB声卡和声音控制的组件
#cd /tmp
#opkg update
#opkg install kmod-usb-audio
#ls /dev #显示audio、dsp表示声卡安装成功
#opkg install alsa-utils
#alsamixer #图形界面调节音量, 用上下箭头调节,调节音量至合适大小(建议30)
需要注意的是如果音量最大会出现单声道和爆音的情况,而且Openwrt每次重启之后声卡默认音量都是最大声,所以我们需要设置开机自动减小音量。
#vi /etc/rc.local在exit 0之前添加一行
amixer set PCM 30% #让声卡音量为30%,防止单声道和爆音
这里的PCM要根据实际情况修改,运行amixer可以列出当前有哪些声卡
然后开始正式安装ShairPort模拟Airplay
#opkg install shairport
#opkg install shairport-perl
安装完成之后,我们需要修改/usr/bin/shairport.pl文件的第52行为如下内容,或者可以自己定义名字:
my $apname = "ShairPort";
修改/etc/init.d/shairport文件
#!/bin/sh /etc/rc.common
START=49
start() {
perl /usr/bin/shairport.pl -D
}
stop() {
killall perl
}
把其中的START=49 改为69,也就是保证在dbus和avahi-daemon启动之后再启动shairport
iPad上的音乐采样率是44.1KHz,创建一个ALSA配置文件,将采样率从48KHz降低到44.1KHz,使声音不会“颤抖”:
#touch /etc/asound.conf
#vi /etc/asound.conf
写入以下内容:
defaults.pcm.dmix.rate 44100 # Force 44.1 KHz
defaults.pcm.dmix.format S16_LE # Force 16 bits
最后我们设置开机启动
#/etc/init.d/dbus enable
#/etc/init.d/avahi-daemon enable
#/etc/init.d/shairport enable
reboot重启,等到wr703n的灯不再闪烁的时候,打开iPad,看看Airplay目标里有没有多一个”ShairPort”,打开音乐,享受音乐吧!