Linux下实现苹果AirPlay音频服务器
一、背景
- 背景:在华清学习之余,自行研究了智能家居的东西,为了解决智能家居中背景音乐问题研究如下:调查发现现有技术中有DLNA、AirPlay、Miracast三种。文章后有些项并未验证,后续慢慢实验。
其中DLAN应用最多,但是DLNA不是实时传输,而是在传输数据之前,会先缓冲一小段时间,因此DLNA只能传输移动设备上的图片、视频、音乐等。无法实现多屏同步显示的镜像功能,这是DLNA标准最大的缺陷所在。
Miracast(WiFi-Display)是实时的,它可以实时传输源端(Source)的输出。源端任何屏幕的操作都会被传输到接收(Sink)端。如果源端是播放媒体文件,源端负责先对媒体文件解码,然后再编码成H.264的格式。接收端只需要做H.264的解码就可以了。相对DLNA,Miracast对于WiFi通路的要求要更高一些。
出于技术考虑,DLAN<AirPlay<Miracast,但各自都有局限性。就体验而言,苹果的AirPlay体验最好。支持多设备同时播放。但是苹果的限制极高,在进行下列实验时,需要有苹果设备或者iTunes软件才可以进行。
- 技术定位:初级
- 整体思路:主要利用shairport-sync来实现
二、操作步骤
2.1 开发前的准备工作
准备工作一
- 更新软件,安装依赖
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install autoconf automake libtool
$ sudo apt-get install avahi-daemon
$ sudo apt-get install libltdl-dev libao-dev libavahi-compat-libdnssd-dev
$ sudo apt-get install build-essential git xmltoman autoconf automake libtool libdaemon-dev libpopt-dev libconfig-dev libasound2-dev avahi-daemon libavahi-client-dev libssl-dev
使用sudo apt-get install <packgename>时出现提示无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
可以换个命令sudo aptitude install <packgename>,因为aptitude会自动把所有依赖的库都帮你顺着找到,并下载好。而apt-get下载某个包中它的所有依赖项都必须存在,这就是为什么我们每次执行apt-get的时候都需要先apt-get update的更新软件包的原因。
如果提示找不到aptitude,可以先使用sudo apt-get install aptitude进行下载
准备工作二
- 关闭WiFi节能(非必要)
$ sudo iwconfig wlan0 poweroff
2.2 编译安装 shairport-sync
- 下载、编译、安装
$ git clone https://github.com/mikebrady/shairport-sync.git
$ cd shairport-sync
$ autoreconf -i -f
$ sudo ./configure --sysconfdir=/etc --with-alsa --with-avahi --with-ssl=openssl --with-systemd
$ make
$ sudo make install
2.3 设置开机自启并启动
$ sudo iwconfig wlan0 poweroff
2.4更改设备名称
Shairport-sync的配置文件在:/etc/shairport-sync.conf
编辑这个文件,更改:name = "名称",然后重启服务:
sudo systemctl restart shairport-sync.service
或者直接sudo reboot重启也行 iφ(゜▽゜*)♪
2.4切换声卡(未验证)
如果你用的不是树莓派的板载声卡而是外接的usb声卡,那么你需要配置一下才能实现音乐播放,否则播放的时候是没有声音的或者没有声音从声卡传出来;
树莓派使用的是alsa的音频架构, alsa的配置文件是alsa.conf,它位于/usr/share/alsa目录下,通常还有/usr/share/alsa/card和/usr/shara/alsa/pcm两个子目录用来设置card相关的参数、别名以及一些PCM默认设置。一般不修改里面的内容。
alsa.conf 引用了/etc/asound.conf 和 ~/.asoundrc两个文件,这两个文件可以配置默认声卡和指定音频输入和输出声卡。
通过修改/etc/asound.conf的内容,可以修改默认的声卡信息,也可以指定特定的MIC和Speack。
defaults.pcm.card 1
defaults.pcm.device 0//一定要设置device号码
defaults.ctl.card 1
pcm.!default {type asymplayback.pcm {type plugslave.pcm "hw:0,0"}capture.pcm {type plugslave.pcm "hw:1,0"
}
三、总结
- 通过此次实验主要学会了使用aptitude指令来解决依赖问题,整个实验难度不高,但是却卡在了依赖问题上。
- 缺少依赖倒置编译无法生成make包进而无法make。
- 最后我在树莓派4上成果运行,效果还可以,Windows下的iTunes可以同步播放,基本听不出延迟,于homepod延迟接近。(小米网络收音机虽然也支持airplay但是不会和电脑播放的同步,会提前于电脑)。但是声音比较小(可能存在个体差异),暂时没有发现解决方法。
参考:WIFI-Direct(Wifi直连)、AirPlay、DLAN、Miracast功能介绍
https://github.com/mikebrady/shairport-sync/blob/master/INSTALL.md
树莓派airplay_weixin_33887443的博客-CSDN博客
软件包间的依赖关系
基于树莓派的手机音频播放功能实现_zhonglunshun的专栏-CSDN博客_树莓派aux
四、后续
4.1直接安装(已验证)
可以直接用apt-get安装,已经实验可行性(在乌班图服务器和乌班图桌面版均好使)。ubuntu 16.04 的软件仓库里已经集成了 shairport-sync,这样只需要执行 apt install 就可以安装了,安装后自动开机自启。
但是 shairport 还需要 avahi-daemon 这个服务,avahi-daemon 是开源的,它实现了苹果的 mDNS 协议(在苹果的设备上对应的服务是 Banjour)。shairport 需要在 avahi 上注册自己。
按照_weixin_39978444的博客-CSDN博客的方法直接使用sudo apt install avahi-daemon;sudo apt install shairport-sync这两条指令。
$ sudo apt-get install libssl-dev libavahi-client-dev libasound2-dev libao-dev libpulse-dev
$ sudo apt-get install shairport-sync
Ubuntu配置机顶盒踩坑记录(Airplay/DLNA)/UPuP/Miracast
关于Raspbian上安装AirPlay服务之后的问题_鸟不知把小绿带到哪里去了-CSDN博客
4.2 路由器安装shairplay(未验证)
小度路由添加airplay_u014682756的专栏-CSDN博客
4.3 STM32(未验证)
基于STM32和W5500实现AirPlay音频播放_WIZnet2012专栏-CSDN博客
Linux下实现苹果AirPlay音频服务器相关推荐
- Linux下利用rsync实现多服务器文件同步
Linux下利用rsync实现多服务器文件同步 目标:多服务器文件同步 环境:2台centos5.6 Web端:192.168.20.20 Backup端:192.168.20.21 需要备份目录为: ...
- Linux下的主辅DNS服务器同步
Linux下的主辅DNS服务器同步 一.系统环境介绍 二.辅助DNS搭建 1.安装yum包 2.设置服务自启 3.编辑dns主配置文件 4.编辑区域文件 5.配置正向文件 6.配置反向文件 7.重启服 ...
- 怎么在linux下使用ftp服务器,怎么在Linux下建立安全的FTP服务器?
怎么在Linux下建立安全的FTP服务器? 2018-08-31 15:53 分享人:老牛 学习Linux系统时,你可能会遇到网络服务的问题,这里将介绍linux FTP服务器安全及DHCP服务的实现 ...
- Linux下安装多个Tomcat服务器
目录 QUESTION:阿里云服务器Linux下安装多个Tomcat服务器的方法 ANSWER: 一.安装前的下载相关文件 1.1下载tomcat 1.2准备工具 二.登陆linux服务器进行安装 2 ...
- linux mysql多实例启动_Mysql实例Linux下启动多个mysql服务器例子
<Mysql实例Linux下启动多个mysql服务器例子>要点: 本文介绍了Mysql实例Linux下启动多个mysql服务器例子,希望对您有用.如果有疑问,可以联系我们. MYSQL教程 ...
- linux日志采集配置,linux下配置rsyslog日志收集服务器案例
原标题:linux下配置rsyslog日志收集服务器案例 环境配置 centos6系统 client1:192.168.1.33 centos7系统 client2:192.168.1.44 cent ...
- linux下新增ftp账号,【转】Linux下添加FTP账号和服务器、增加密码和用户,更改FTP目录...
转自:http://blog.csdn.net/cloudday/article/details/8640234 1. 启动VSFTP服务器 A:cenos下运行:yum install vsft ...
- linux下使用苹果dmg格式文件 目前状态
linux下使用苹果dmg格式文件 MAC应用属于 FreeBSD (Unix),Unix 是需要付费的,Linux想要免费用暂时就别想了. MAC应用属于 FreeBSD (Unix),Unix 是 ...
- linux进行校时ntp,Linux下快速搭建ntp时间同步服务器
Linux下快速搭建ntp时间同步服务器 背景: 服务器多了,时间是否一致以及是否准备就显得格外重要,虽然这个问题总是被忽略,但是统一时间是很有必要的,因为时间问题导致服务出现问题也是司空见惯,本文简 ...
最新文章
- 自动驾驶中的机器学习
- C#对话框-使用打开和保存对话框
- java 日期及别的小技巧
- python第四章单元测试_Python 单元测试
- 比目鱼搜索不能用了_win10搜索功能失效解决办法
- Quartz学习总结(2)——定时任务框架Quartz详解
- 百度人脸识别离线SDK_Android版_在线激活失败:not enough param_解决方案---百度人脸识别技术应用005
- JSONString 与 JSONData 与字典或者数组互相转化
- 利用 Kubernetes Service 的 selector 无痛运维在线 pod
- html希腊字符,希腊字母
- TT 的旅行日记 Week7作业B题
- siteground主机黑五优惠最低2折-2.99美元每月-vps主机-WordPress主机服务器
- 数模论文排版—从第三页设置页码,页码格式为page X of Y
- mac uvc相机_Mac相机无法正常工作? 这是解决方法
- 舒缓肩颈酸痛,温暖呵护颈椎,宾多康智能颈椎按摩仪体验
- 输入数字转换成英文输出
- 【数位DP】Windy数
- 简述运用计算机思维解决问题的步骤,计算思维能力主要包括问题及问题求解过程的符号表示、逻辑思维与抽象思维、形式化证明、建立模型和模型计算、利用计算机技术等能力 答案:√...
- 心脏流血(Heartbleed )漏洞详解
- 电脑插入USB鼠标unknown device问题解决方案
热门文章
- 初探DirectShow
- 【STC15控制WS2812 RGB彩灯级联】
- 如何禁止Windows Defender自动扫描
- SETUP FACTORY安装完成后自动运行软件
- linux内核版本指什么意思,Linux的内核版本是怎么回事
- 上帝之眼——GIS技术的决定性作用
- 打开bat文件闪退以及‘java‘不是内部或外部命令,也不是可运行的程序或批处理文件【本人亲测解决方法】
- 只有程序员才能看懂的16张高端漫画
- Codeforces868F Yet Another MinimizationProblem
- iOS Safari阅读模式分析过程