基于树莓派的AirPlay功能实现


手里有一个第一代的树莓派开发板,很长时间都没有使用过。今天尝试着搭建一个支持AirPlay的服务。顺便回顾一下树莓派的烧录、配置、远程登录等操作。

概述

AirPlay是苹果公司的在iOS4.2及OS X Mountain Lion中加入的一种播放技术,可以将iPhone、iPod touch、iPad及Mac(需要OS X Mountain Lion或更新版)上的视频镜像传送到支持Airplay的设备

前一段时间购买了“Beats X”这个耳机,被苹果设备间切换的流畅与无缝所吸引。想着时候可以让其他的音频设备也实现这样的无缝切换。查资料发现苹果自家的AirPlay技术可以实现这样的流畅体验(AirPlay与Beats X耳机的实现原理不同。前者是基于无线局域网,后者是蓝牙和icloud的协同配合。但是用户体方面很像,可以在苹果设备的控制中心控制)。基于网上的相关教程,通过树莓派运行一个Airplay服务,配合小音响实现相应的功能。

烧录系统

树莓派支持很多系统,这里选用的官方的raspbian系统。

下载后得到raspbian-jessie.zip 的压缩包,解压得到系统镜像raspbian-jessie.img 。通过 Win32DiskImager 软件烧录镜像到一张空白SD卡上。

待烧录完毕,插入树莓派,上电即可开机。


登陆

一般来说,登陆到树莓派的系统有三种方式:
1. 开发板外接显示器和键盘鼠标。
2. 通过VNC远程桌面登陆
3. 通过SSH登陆

这次用树莓派,只是需要搭建AirPlay服务,所以SSH远程登陆时最省时省力的方式。

SSH登陆

目前的树莓派系统默认是关闭SSH服务的,所以无法在第一次直接使用SSH登陆,首先在刚才烧录好SD卡的根目录下建立一个名为SSH文件(大写,且没有后缀名)。之后再插卡上电就可以使用了。

通过网线将树莓派和路由器相连,登陆路由器后台可以查询树莓派获得的IP地址。

知道树莓派的IP后可以通过软件PuTTY进行登陆。

Host Name(or IP address)这里填写刚才查到的IP地址,Connection type选择SSH。其他选项默认,点击Open。依次输入树莓派的账户和密码:

VNC登陆

在SSH登陆的基础上,可以配置实现远程桌面登陆(图形化界面)。
由于系统中默认没有安装相关服务,所以首先需要安装。
执行如下命令:

sudo apt-get install tightvncserver

安装完毕后设置密码

vncpasswd

启动服务

tightvncserver -geometry 800x600 :1

通过软件RealVNC Viewer 远程登陆图形化界面

VNC Server 这里填写IP地址:控制台号码。刚才命令tightvncserver -geometry 800x600 :1 表示以800x600的分辨率开启1号控制台。所以这里输入192.168.123.5:1。之后点击登陆,输入密码就可以看到以图形化界面访问到树莓派。

如果希望每次都使用VNC登陆树莓派,可以配置其开机启动。具体方法可以参考文章《VNC远程登录树莓派的图形界面》。其中有详细的配置方法。

无线链接

刚才的是通过网线使树莓派和电脑在同一个局域网下的。第一代的树莓派默认硬件是不支持无线网络的(貌似新的树莓派支持无线)。我采用了树莓派默认免驱的无线网卡RTL8188CUS。通过USB接口和树莓派相连。在SSH登陆的情况下(SSH登陆对网络质量要求低)。通过命令:

lsusb

可以显示是否识别到了无线网卡

同时执行命令:

ifconfig

也可以查询无线网卡的信息(Wlan0)

通过一下命令, 搜素当前环境的无线网络。

sudo iwlist wlan0 scan | grep ESSID

通过如下命令备份原始文件。

sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.bak   

通过命令

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf   

修改其中的内容

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=GB

network={
        ssid="your_wfi_Name"
        psk="your_wifi_PassWord"
        key_mgmt=WPA-PSK
}

这里ssid psk key_mgmt 分别指无线网的名称、密码、加密方式。更改完后,CTRL+O 保存更改, CTRL+X退出编辑器。

如果你用VNC的形式登录树莓派,则配置Wifi只要点击远程桌面右上角的Wifi图表进行连接即可。


更新软件

更改软件源

树莓派默认的软件源地址比较慢(亲测只有20~30 kb/s)。所以普遍会更关国内的镜像源
SSH方式登录树莓派

输入以下命令

nano /etc/apt/sources.list

复制一下内容在其中,并且通过#号注销原来的地址

deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib

效果如下

之后通过CTRL+O 保存更改, CTRL+X退出编辑器。

执行更新

执行如下命令,进行更新系统软件。

sudo apt-get update && apt-get upgrade -y

安装Airplay服务

以下的整个安装都是基于一个开源项目进行的,这是项目主页(https://github.com/juhovh/shairplay)。

其中给出了详细的安装方法。

安装依赖环境

通过SSH登录树莓派,分别执行如下命令

sudo apt-get install autoconf automake libtool
sudo apt-get install libltdl-dev libao-dev libavahi-compat-libdnssd-dev
sudo apt-get install avahi-daemon

从GitHub上获取源码

git clone https://github.com/juhovh/shairplay.git

编译和安装

进入对应的目录

cd shairplay

依次执行如下四条指令,进行代码的编译和安装

./autogen.sh
./configure
make
sudo make install

启动

进入软件的当前目录 /home/pi/shairplay 。执行如下命令即可开启服务

shairplay -a your_AirPlay_Name

此时ios设备或者Mac设备连接在同一个Wifi下,便可看到支持AirPlay的设备,名称就是your_AirPlay_Name。点击连接后,苹果设备的音频信号就通过Wifi传输到树莓派的3.5mm音频口。这里可以接入音响的信号输入口。


完善

为了使树莓派每次上电后可以自动开启AirPlay服务。需要配置自启动,另外消除噪声。

自启动

创建启动脚本文件

依次执行如下命令,建立一个启动脚本文件。

cd /etc/init.d/
touch shairplay
nano shairplay

在其中复制一下内容

#!/bin/bash
#
# This starts and stops shairplay
#
### BEGIN INIT INFO
# Provides: shairplay
# Required-Start: $network
# Required-Stop:
# Short-Description: Free portable AirPlay server implementation similar to ShairPort.
# Description: Free portable AirPlay server implementation similar to ShairPort.
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO


# Source function library.
. /lib/lsb/init-functions

DAEMON="/usr/local/bin/shairplay"
DAEMON_ARGS="-a your_AirPlay_Name"
AIRPORT_KEY_DIR="/usr/local/share/shairplay"

[ -x $binary ] || exit 0

RETVAL=0

start() {
 echo -n "Starting shairplay: "
 start-stop-daemon --start --quiet --chdir $AIRPORT_KEY_DIR \
 --exec "$DAEMON" -b --oknodo -- $DAEMON_ARGS
 log_end_msg $?
}

stop() {
 echo -n "Shutting down shairplay: "
 start-stop-daemon --stop --quiet --exec "$DAEMON" \
 --retry 1 --oknodo
 log_end_msg $?
}

restart() {
 stop
 sleep 1
 start
}

case "$1" in
 start)
 start
 ;;
 stop)
 stop
 ;;
 status)
 status shairplay
 ;;
 restart)
 restart
 ;;
 *)
 echo "Usage: $0 {start|stop|status|restart}"
 ;;
esac
exit 0

其中刚才的脚本文件中的DAEMON_ARGS="-a your_AirPlay_Name"可以设置自己的名字。

DAEMON="/usr/local/bin/shairplay"
DAEMON_ARGS="-a your_AirPlay_Name"
AIRPORT_KEY_DIR="/usr/local/share/shairplay"

之后通过CTRL+O 保存更改, CTRL+X退出编辑器。

加入执行权限

依次执行如下命令。赋予脚本执行权限,并且更新配置信息。

chmod +x /etc/init.d/shairplay
update-rc.d shairplay defaults

执行如下命令,切换到用户目录

cd ~

依次执行如下命令,拷贝airport.key

mkdir /usr/local/share/shairplay
cp shairplay/airport.key /usr/local/share/shairplay

输入一下命令,在etc/rc.local中添加内容

 nano /etc/rc.local

添加的内容如下(在exit 0之前)。

# Don't run multiple instances - start just one screen, named "shairplay":
[[ $(screen -list | grep shairplay) == '' ]] &&
 screen -dmS shairplay sh
# Keep shairplay perpetually running. When it crashes, we can just SIGKILL it, and it comes back:
[[ $(ps aux | grep -v grep | grep pts | grep '/usr/bin/shairplay') == '' ]] &&
 screen -S shairplay -p 0 -X stuff "while true; do /usr/bin/shairplay --apname=Airamaplay --ao_devicename=default; sleep 2s; done
"

之后通过CTRL+O 保存更改, CTRL+X退出编辑器。

之后通过重启树莓派,就直接可以在苹果设备中选择AirPlay服务了。

消除噪音

如果音响输出有噪声,可以尝试树莓派Audio的pwm模式。
执行如下命令

sudo nano /boot/config.txt

在最后增加如下配置参数

dtparam=audio=on
audio_pwm_mode=2

之后通过CTRL+O 保存更改, CTRL+X退出编辑器。


感谢以下文章提供的帮助:
* VNC远程登录树莓派的图形界面
* 树莓派连接无线网设置wifi方法
* 跟着上手树莓派(三)—— 让你的有线音箱从此无拘无束


本文也发在我的个人微博(http://www.hhyqhh.top/)中,欢迎访问!

你可能感兴趣的:(技巧)