AirPlay无线技术研究

来源:互联网 发布:大气数据系统 编辑:程序博客网 时间:2024/05/17 23:33

文章的类型应该转载为主,原创为辅,还有少量的翻译 :)
最近由于业务需要,进行的调研,参考了很多文章,也以自己的认识,加以通俗化描述。

前言

虽然这次是研究AirPlay技术,但是还是花一点点篇幅,顺带提下当前支持这种无线技术的其他协议。

AirPlay、DLNA、Miracast三大无线技术介绍:

AirPlay

AirPlay 是苹果开发的一种无线技术,可以通过WiFi将iPhone 、iPad、iPod touch 等iOS 设备上的包括图片、音频、视频通过无线的方式传输到支持AirPlay 设备(IOS8后,AirPlay可使用P2P直连,绕过了WIFI,具体有待深入)。现在一些传统的家庭影院和HIFI如马兰士和天龙的新品功放和网络播放器已经支持AirPlay功能。

AirPlay 还有一个非常牛逼的功能,这一功能叫AirPlay镜像,配合上Apple TV这以功能可以将iPhone 或者iPad 上的画面无线传输到电视上,也就是说你设备显示的是什么电视屏幕显示就就是什么,而不仅限于图片和视频。所以用这一个功能来玩游戏是非常酷的,你可以拿着iPad 来当做方向盘,然后看着大屏玩游戏。

DLNA

DNLA,Digital Living Network Alliance,是索尼、英特尔、微软等发起的一套 PC、移动设备、消费电器之间互联互通的协议。它们的宗旨是“随时随地享受音乐、照片和视频”。据说苹果当时也是DLNA联盟的成员,而后来退出了并自立门户。

Miracast

Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连为基础的无线显示标准。支持此标准的设备可通过无线方式分享视频画面,例如手机可通过Miracast将影片或照片直接在电视或其他装置播放而无需受到连接线缆长度的影响。
与DLNA不同的是,Miracast 也有类似于AirPlay 的镜像功能,可以将手机中屏幕内容直接投放到高清电视屏幕里,这样你也可以通过电视屏幕来玩游戏了。

三种技术的总结:

AirPlay是苹果自家的,对IOS设备支持的完美,也是这次研究的重点。DLNA是设备厂商之间的一种通信协议,所支持的功能不够完善。Miracast从技术层面上,最接近AirPlay,但是技术比较新,支持的设备不多,但是它比较全面,以后在智能家居,物联设备上有发展空间。通俗来说,AirPlay是苹果自己一个人玩转自己的产品。DLNA是其他厂家也想玩,但是玩不开,就拉其他厂商一起玩。Miracast才是带其他设备厂商一起玩的大哥,只是这个大哥被推出来的时间晚了点,支持的小弟不多。

AIRPLAY协议

介绍

AIRPLAY是由苹果公司实现的一套协议族,用来实现在Apple TV上浏览 iPhone、iPod touch、iPad(硬件设备)或者iTunes(软件)中的各种媒体内容。 AirPlay支持如下几种使用场景:

  • 从iOS设备上传输并显示照片、幻灯片;
  • 从iOS设备或者Itunes软件中传输并播放音频;
  • 从iOS设备或者Itunes软件中传输并播放视频;
  • 对iOS设备或者OS X Mountain Lion进行屏幕镜像。由于此功能需要硬件的硬解码支持,所以只能在iPad 2、iPhone 4S、带Sandy Bridge CPU的Mac电脑(或更新的设备)上支持。

最初这套协议名字叫AirTunes,只支持音频流播放。 后来苹果开发Apple TV时,对此协议进行了扩充和改进,加入了视频支持,并改名叫做AIRPLAY。AIRPLAY协议基于一些知名的网络标准协议,如Multicast DNS、HTTP、RTSP、RTP或NTP以及其他的一些自定义扩展。

实现机制

实现AIRPLAY协议的软件不需要再做任何配置就能发现同一网络中的相关设备,这主要得益于Bonjour(基于M-DNS协议实现)

Bonjour:苹果为基于组播域名服务(multicast DNS)的开放性Zeroconf标准所起的名字。

Zeroconf (零设置网络标准):全称为Zero configuration networking,中文名则为零配置网络服务标准,是一种用于自动生成可用IP地址的网络技术,不需要额外的手动配置和专属的配置服务器。“零配置网络”的目标,是让非专业用户也能便捷的连接各种网络设备,例如计算机,打印机等。整个搭建网络的过程都是通过程式自动化实现。如果没有zeroconf,用户必须手动配置一些服务,例如DHCP、DNS,计算机网络的其他设置等。这些对非技术用户和新用户们来说是很难的事情。

具体例子为:用户拥有一台apple tv和一台iPhone4s,那之只要都连入到同一个无线局域网内,iphone4s就会自动找出apple tv,那么在播放音乐或者视频时候,用户只要点击推送,就可以讲音乐和视频推送到apple tv上播放。

除了Bonjour以外,实现Zeroconf协议的还有Avahi和howl。
下面以AirTunes服务为例来具体看是如果实现服务发现的。首先发布RAOP(Remote Audio Access Protocol )服务,其格式如下:

name字段由设备的MAC地址和远程设备的名称组成(通常就在客户端上显示此设备名称)

TXT参数中包含以下字段:

Audio codecs(音频编码)

Encryption Types

Metadata Types

RAOP从本质上来说是实时流协议(RTSP,其内容为实时流传输协议和控制协议),只不过增加了基于身份验证请求-应答的一步。实时流协议是应用层协议,用来实现和控制实时数据的传送。

RAOP服务用两个信道实现流媒体音乐:一个是用实时流协议的控制信道;另一个是数据信道用来发送原始数据。以iTunes客户端(v6.0.4)和Airport Express路由器(简称ApEx)之间的数据交换为例分析RAOP服务过程如下所示:

步骤1:

iTunes客户端提供自己的版本号和一个随机生成的22byte的加密的苹果请求参数给ApEx。然后ApEx回复一个响应,这个响应是由储存在ApEx的私钥加密后的请求参数。然后iTunes用非对称密钥对的公钥对该值进行验证(这种私钥加密公钥验证的方法具体实现细节如果感兴趣可以参考http://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95)。这一步目的是iTunes用来验证是否正在与一个ApEx对话。在这一步交流过后上述连接断开。

步骤2:

接下来,iTunes在同一个端口建立另外一个与ApEx相连的RTSP连接,同时提供一个随机产生的AES密钥给ApEx。这个AES密钥是经过RSA加密过的,其密钥由iTunes提供(即非对称密钥对的公钥)。然后通过ApEx的私钥解密来验证是否正在跟一个iTunes对话。值得欣喜的是目前通过逆向工程已经破解了非对称密钥对。

步骤3:

ApEx告诉iTunes哪一个端口用于数据连接(server_port,6000)。

步骤4:

在控制包里的RTSP序列和时间戳的交换

已知ApEx支持的方法有:

ANNOUNCE:ANNOUNCE会告诉RTSP服务器音频流使用的是会话描述协议 SETUP:SETUP 会初始化一个记录会话,发送必要的传输信息建立三个UDP信道RECORD:RECORD:启动音频流,RTP-Info头文件里包含了参数PAUSE:音频暂停FLUSH:关闭音频流TEARDOWN:TEARDOWN结束RTSP会话OPTIONS, GET_PARAMETER和SET_PARAMETER等

如果想有更深入的了解可以参考http://nto.github.io/AirPlay.html#audio-rtsprequests中关于音频的部分。

AIRPLAY协议的总结:

首先基于zeroconf(零设置网络标准),由服务端发出,然后同wifi网内的设备就可以自动得到分配的IP地址,然后建立RAOP协议链接。(RAOP实时流协议,增加了身份验证 请求-应答),这个服务有两个信道,一个是实时流协议的控制信道,另一是数据信道用来发送原始数据。链接建立成功后,就是RTSP协议链接,数据端口的确定,之后就可以通过协议约定好的方法,实现所需功能。

参考的网址

已知的支持AirPlay协议的服务器或者客户端软件:https://github.com/jamesdlow/open-airplay

Shairport4w+Aerodrom免费在Windows电脑上使用苹果AirPlay:http://www.iplaysoft.com/airplay-for-windows.html

Reflector 已测试过的win软件:http://www.sdifenzhou.com/Reflector.html

Android平台Airplay的实现方法:http://blog.csdn.net/shareviews/article/details/8729686

AirPlay 镜像 :https://www.aorensoftware.com/blog/2011/08/20/exploring-airplay-mirroring-internals/

0 0
原创粉丝点击