基於樹莓派的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服務
其中給出了詳細的安裝方法。
安裝依賴環境
通過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
退出編輯器。