ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:260.46KB ,
资源ID:7423289      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7423289.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Airplay协议研究含shairport交叉编译移植与调试.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Airplay协议研究含shairport交叉编译移植与调试.docx

1、Airplay协议研究含shairport交叉编译移植与调试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

2、 Bridge CPU的Mac电脑(或更新的设备)上支持。最初这套协议名字叫AirTunes,只支持音频流播放。 后来苹果开发Apple TV时,对此协议进行了扩充和改进,加入了视频支持,并改名叫做AIRPLAY。AIRPLAY协议基于一些知名的网络标准协议,如Multicast DNS、HTTP、RTSP、RTP或NTP以及其他的一些自定义扩展。由于我们只关注音频部分,所以下面研究的重点是AirTunes服务。二、实现机制实现AIRPLAY协议的软件不需要再做任何配置就能发现同一网络中的相关设备,这主要得益于Bonjour(基于M-DNS协议实现)Bonjour:苹果为基于组播域名服务(mu

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

4、hone4s,那之只要都连入到同一个无线局域网内,iphone4s就会自动找出apple tv,那么在播放音乐或者视频时候,用户只要点击推送,就可以讲音乐和视频推送到apple tv上播放。除了Bonjour以外,实现Zeroconf协议的还有Avahi和howl。下面以AirTunes服务为例来具体看是如果实现服务发现的。首先发布RAOP(Remote Audio Access Protocol)服务,其格式如下:name字段由设备的MAC地址和远程设备的名称组成(通常就在客户端上显示此设备名称)TXT参数中包含以下字段:Audio codecs(音频编码)Encryption TypesM

5、etadata TypesRAOP从本质上来说是实时流协议(RTSP,其内容为实时流传输协议和控制协议),只不过增加了基于身份验证请求-应答的一步。实时流协议是应用层协议,用来实现和控制实时数据的传送。RAOP服务用两个信道实现流媒体音乐:一个是用实时流协议的控制信道;另一个是数据信道用来发送原始数据。以iTunes客户端(v6.0.4)和Airport Express路由器(简称ApEx)之间的数据交换为例分析RAOP服务过程如下所示:从iTunes 到 ApEx传输从ApEx到iTunes传输从上面可以看出iTunes客户端提供自己的版本号和一个随机生成的22byte的加密的苹果请求参数给

6、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对话。在这一步交流过后上述连接断开。接下来,iTunes在同一个端口建立另外一个与ApEx相连的RTSP连接,同时提供一个随机产生的AES密钥给ApEx。这个AES密钥是经过RSA加密过的,其密钥

7、由iTunes提供(即非对称密钥对的公钥)。然后通过ApEx的私钥解密来验证是否正在跟一个iTunes对话。值得欣喜的是目前通过逆向工程已经破解了非对称密钥对。上述过程如下所示:从iTunes 到 ApEx传输从ApEx到iTunes传输然后,ApEx告诉iTunes哪一个端口用于数据连接(server_port,6000)。从iTunes 到 ApEx传输从ApEx到iTunes传输 在控制包里的RTSP序列和时间戳的交换如下所示:从iTunes 到 ApEx传输从ApEx到iTunes传输 下面展示如果调整音量参数:从iTunes 到 ApEx传输 从ApEx到iTunes传输 最后展示是

8、如何关闭会话的:从iTunes 到 ApEx传输 从ApEx到iTunes传输 重新来看下图:知ApEx支持的方法有:ANNOUNCE,SETUP,RECORD,PAUSE,FLUSH,TEARDOWN,OPTIONS,GET_PARAMETER和SET_PARAMETER。ANNOUNCE:ANNOUNCE会告诉RTSP服务器音频流使用的是会话描述协议。并且也会告知相关的编码信息和加密密钥信息。协议交互如下:ANNOUNCEforApple Losslessaudio from iTunesSETUP:SETUP 会初始化一个记录会话,发送必要的传输信息建立三个UDP信道:协议交互如下:se

9、tup a record sessionRECORD:RECORD启动音频流,RTP-Info头文件里包含了下面的参数:启动音频流的协议交互如下:FLUSH:FLUSH关闭音频流。其协议交互如下:TEARDOWN:TEARDOWN结束RTSP会话,其协议交互上面已经有图介绍过。如果想有更深入的了解可以参考http:/nto.github.io/AirPlay.html#audio-rtsprequests中关于音频的部分。三、 AIRPLAY协议的实现、移植与调试: 在linux下实现AIRPLAY协议的开源软件有shairport、xmbc(其音频部分实现机制也是基于shairport的)。

10、 shairport是一个模拟ApEx路由器的软件,用以达到传输来自iTunes和其他兼容设备的音乐的目的。它是作为支持RAOP的一个服务端。其0.X版本是perl脚本写的,但目前shairport已经更新至1.0-dev,该版本已经去除perl脚本部分,改为完全由C写成,这更方便了我们进行移植工作。但是目前其还在开发中,还没正式发布,潜在着bug。1.0-dev版本后必需的依赖库是OpenSSL,可选的依赖库有 libao、 PulseAudio、 avahi(或者howl)。通过分析知,如果libao和PulseAudio 安装后shairport将有5个输出后端(即alsa、ao、pus

11、le、dummy、pipe)可以选择,而即便不安装libao和PulseAudio,shairport将仍有3个输出后端(即alsa、dummy、pipe),不影响shairport的功能(播放时会产生延迟),如果追求高质量的音质最好还是要安装PulseAudio。通过不断的尝试,可以选择交叉编译OpenSSL和howl,以避免复杂的交叉编译。 总共需要进行交叉编译的有alsa-lib、 OpenSSL、howl、zlib和shairport1.0-dev交叉编译前依然是先新建安装目录shairport,并约定目录(在shairport目录下进行):WORK_DIR=$PWDTARGET_IN

12、C=$WORK_DIR/includeTARGET_LIBS=$WORK_DIR/libTARGET_BIN=$WORK_DIR/binTARGET_SBIN=$WORK_DIR/sbin交叉编译alsa-lib:1./configure -prefix=$WORK_DIR -bindir=$TARGET_BIN -sbindir=$TARGET_BIN -libexecdir=$TARGET_BIN -libdir=$TARGET_LIBS -includedir=$TARGET_INC -enable-shared -disable-static -host=mips-linux -bui

13、ld=i686-linux -disable-alisp -disable-python -disable-old-symbols -disable-seq -disable-rawmidi 2.make时出现以下错误:parser.c: In function uc_mgr_scan_master_configs:parser.c:1138: error: versionsort undeclared (first use in this function)parser.c:1138: error: (Each undeclared identifier is reported only o

14、nceparser.c:1138: error: for each function it appears in.)make2: * parser.lo Error 1解决方法:patch -p1 alsa-lib-1.0.24.1-uclibc-missing-versionsort.patch3.下面又出现问题:aserver.o: In function pcm_shm_cmd:aserver.c:(.text+0x25f0): warning: Warning: snd_pcm_hwsync() is deprecated, consider to use snd_pcm_avail(

15、)./src/.libs/libasound.so: undefined reference to atomic_sub./src/.libs/libasound.so: undefined reference to atomic_addcollect2: ld returned 1 exit statusmake1: * aserver Error 1make1: Leaving directory /home/wcy/shairport/alsa-lib-1.0.24.1/aservermake: * all-recursive Error 1解决方法:在alsa-lib-1.0.24in

16、clude中的iatomic.h中定义的有关mips架构的atomic_add和atomic_sub函数的实现时,将extern改为static。交叉编译openssl1./configsharedno-asm-prefix=/home/wcy/shairport/ -openssldir=/home/wcy/shairport/openssl-1.0.1e2. 修改Makefile: CC=mips-linux-gcc RANLIB=/home/wcy/Lsdk/build/gcc-4.3.3/build_mips/staging_dir/usr/binNM=mips-linux-nm AR

17、=mips-linux-ar交叉编译howl1./configure -prefix=$WORK_DIR -bindir=$TARGET_BIN -sbindir=$TARGET_BIN -libexecdir=$TARGET_BIN -libdir=$TARGET_LIBS -includedir=$TARGET_INC -host=mips-linux -build=i686-linux2. make时出现错误解决方法如下:即:进入src/autoipd 执行命令make linux_autoip.lo posix_main.lo交叉编译zlib ./configure prefix=./

18、./ Lsdk/build/gcc-4.3.3/build_mips/staging_dir/usr修改Makefile:CC=././Lsdk/build/gcc-4.3.3/build_mips/staging_dir/usr/bin/mips-linux-gccCPP=mips-linux-gccAR=mips-linux-arRANLIB=mips-linux-ranlibprefix =././Lsdk/build/gcc-4.3.3/build_mips/staging_dir/usr交叉编译shairport./configure之后修改Makefile:添加CC=././Lsd

19、k/build/gcc-4.3.3/build_mips/staging_dir/usr/bin/mips-linux-gcc修改config.mk:删去CONFIG_PULSE=yes修改CFLAGS和LDFLAGS:CFLAGS+= -D_REENTRANT -I/././Lsdk/build/gcc-4.3.3/build_mips/staging_dir/usr/include/alsa LDFLAGS+= -L/././Lsdk/build/gcc-4.3.3/build_mips/staging_dir/usr/lib -lm -lpthread -lssl -ldl -L/./l

20、ib -lz -lasound -lcrypto 修改config.h:删去#define CONFIG_PULSE移植到板子上需要三个可执行文件,分别是mDNSResponder、mDNSPublish和shairport(三者的大小加起来175kb),且总共需要移植的动态库有10个(大小总共加起来有6.59mb)如下图所示:动态库放在/lib,可执行程序放在/bin中即可。调试过程中如果出现“can not load *.so.*,可通过创建Symbolic Link来解决。调试的结果是程序正常运行,协议交互正常,音频播放功能暂时还没办法测试有待完善(需求带音频部分的板子和外接音箱)测试环境为win 7 iTunes和芯片9341tplink的路由器。测试原理:由于路由器和win7在同一个网络中,所以win7下当iTunes软件开启时将能发现路由器中的扬声器设备(虚拟)即图中的蓝色矩形框中会显示相应的小喇叭,其名字对应于开启服务时的输入,这里为“gdpisen”图中78DC5128A107为路由器的MAC地址,_raop._tcp为协议类型,5002为端口号。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1