900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 基于树莓派的AirPlay功能实现

基于树莓派的AirPlay功能实现

时间:2021-01-24 13:41:08

相关推荐

基于树莓派的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=netdevupdate_config=1country=GBnetwork={ssid="your_wfi_Name"psk="your_wifi_PassWord"key_mgmt=WPA-PSK}

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

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

更新软件

更改软件源

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

SSH方式登录树莓派

输入以下命令

nano /etc/apt/sources.list

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

deb /raspbian/raspbian/ jessie main non-free contribdeb-src /raspbian/raspbian/ jessie main non-free contrib

效果如下

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

执行更新

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

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

安装Airplay服务

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

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

安装依赖环境

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

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

从GitHub上获取源码

git clone /juhovh/shairplay.git

编译和安装

进入对应的目录

cd shairplay

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

./autogen.sh./configuremakesudo 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 shairplaynano 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-functionsDAEMON="/usr/local/bin/shairplay"DAEMON_ARGS="-a your_AirPlay_Name"AIRPORT_KEY_DIR="/usr/local/share/shairplay"[ -x $binary ] || exit 0RETVAL=0start() {echo -n "Starting shairplay: "start-stop-daemon --start --quiet --chdir $AIRPORT_KEY_DIR \--exec "$DAEMON" -b --oknodo -- $DAEMON_ARGSlog_end_msg $?}stop() {echo -n "Shutting down shairplay: "start-stop-daemon --stop --quiet --exec "$DAEMON" \--retry 1 --oknodolog_end_msg $?}restart() {stopsleep 1start}case "$1" instart)start;;stop)stop;;status)status shairplay;;restart)restart;;*)echo "Usage: $0 {start|stop|status|restart}";;esacexit 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/shairplayupdate-rc.d shairplay defaults

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

cd ~

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

mkdir /usr/local/share/shairplaycp 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=onaudio_pwm_mode=2

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

感谢以下文章提供的帮助:

* VNC远程登录树莓派的图形界面

* 树莓派连接无线网设置wifi方法

* 跟着上手树莓派(三)—— 让你的有线音箱从此无拘无束

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。