Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 合同模板 > Airplay协议研究(含shairport交叉编译、移植与调试)

Airplay协议研究(含shairport交叉编译、移植与调试)

收藏

本作品内容为Airplay协议研究(含shairport交叉编译、移植与调试),格式为 docx ,大小 298377 KB ,页数为 11页

Airplay协议研究(含shairport交叉编译、移植与调试)


('AIRPLAY协议一、介绍AIRPLAY是由苹果公司实现的一套协议族,用来实现在AppleTV上浏览iPhone、iPodtouch、iPad(硬件设备)或者iTunes(软件)中的各种媒体内容。AirPlay支持如下几种使用场景:\uf0b7从iOS设备上传输并显示照片、幻灯片;\uf0b7从iOS设备或者Itunes软件中传输并播放音频;\uf0b7从iOS设备或者Itunes软件中传输并播放视频;\uf0b7对iOS设备或者OSXMountainLion进行屏幕镜像。由于此功能需要硬件的硬解码支持,所以只能在iPad2、iPhone4S、带SandyBridgeCPU的Mac电脑(或更新的设备)上支持。最初这套协议名字叫AirTunes,只支持音频流播放。后来苹果开发AppleTV时,对此协议进行了扩充和改进,加入了视频支持,并改名叫做AIRPLAY。AIRPLAY协议基于一些知名的网络标准协议,如MulticastDNS、HTTP、RTSP、RTP或NTP以及其他的一些自定义扩展。由于我们只关注音频部分,所以下面研究的重点是AirTunes服务。二、实现机制实现AIRPLAY协议的软件不需要再做任何配置就能发现同一网络中的相关设备,这主要得益于Bonjour(基于M-DNS协议实现)Bonjour:苹果为基于组播域名服务(multicastDNS)的开放性Zeroconf标准所起的名字。Zeroconf(零设置网络标准):全称为Zeroconfigurationnetworking,中文名则为零配置网络服务标准,是一种用于自动生成可用IP地址的网络技术,不需要额外的手动配置和专属的配置服务器。“零配置网络”的目标,是让非专业用户也能便捷的连接各种网络设备例如计算机,打印机等。整个搭建网络的过程都是通过程式自动化实现。如果没有zeroconf,用户必须手动配置一些服务,例如DHCP、DNS,计算机网络的其他设置等。这些对非技术用户和新用户们来说是很难的事情。具体例子为:用户拥有一台appletv和一台iPhone4s,那之只要都连入到同一个无线局域网内,iphone4s就会自动找出appletv,那么在播放音乐或者视频时候,用户只要点击推送,就可以讲音乐和视频推送到appletv上播放。除了Bonjour以外,实现Zeroconf协议的还有Avahi和howl。下面以AirTunes服务为例来具体看是如果实现服务发现的。首先发布RAOP(RemoteAudioAccessProtocol)服务,其格式如下:name字段由设备的MAC地址和远程设备的名称组成(通常就在客户端上显示此设备名称)TXT参数中包含以下字段:Audiocodecs(音频编码)EncryptionTypesMetadataTypesRAOP从本质上来说是实时流协议(RTSP,其内容为实时流传输协议和控制协议),只不过增加了基于身份验证请求-应答的一步。实时流协议是应用层协议,用来实现和控制实时数据的传送。RAOP服务用两个信道实现流媒体音乐:一个是用实时流协议的控制信道;另一个是数据信道用来发送原始数据。以iTunes客户端(v6.0.4)和AirportExpress路由器(简称ApEx)之间的数据交换为例分析RAOP服务过程如下所示:从iTunes到ApEx传输从ApEx到iTunes传输从上面可以看出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对话。在这一步交流过后上述连接断开。接下来,iTunes在同一个端口建立另外一个与ApEx相连的RTSP连接,同时提供一个随机产生的AES密钥给ApEx。这个AES密钥是经过RSA加密过的,其密钥由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传输最后展示是如何关闭会话的:从iTunes到ApEx传输从ApEx到iTunes传输重新来看下图:知ApEx支持的方法有:ANNOUNCE,SETUP,RECORD,PAUSE,FLUSH,TEARDOWN,OPTIONS,GET_PARAMETER和SET_PARAMETER。ANNOUNCE:ANNOUNCE会告诉RTSP服务器音频流使用的是会话描述协议。并且也会告知相关的编码信息和加密密钥信息。协议交互如下:ANNOUNCEforAppleLosslessaudiofromiTunesSETUP:SETUP会初始化一个记录会话,发送必要的传输信息建立三个UDP信道:协议交互如下:setuparecordsessionRECORD:RECORD启动音频流,RTP-Info头文件里包含了下面的参数:启动音频流的协议交互如下:FLUSH:FLUSH关闭音频流。其协议交互如下:TEARDOWN:TEARDOWN结束RTSP会话,其协议交互上面已经有图介绍过。如果想有更深入的了解可以参考http://nto.github.io/AirPlay.html#audio-rtsprequests中关于音频的部分。三、AIRPLAY协议的实现、移植与调试:在linux下实现AIRPLAY协议的开源软件有shairport、xmbc(其音频部分实现机制也是基于shairport的)。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、pusle、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_INC="$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--build=i686-linux--disable-alisp--disable-python--disable-old-symbols--disable-seq--disable-rawmidi2.make时出现以下错误:parser.c:Infunction\'uc_mgr_scan_master_configs\':parser.c:1138:error:\'versionsort\'undeclared(firstuseinthisfunction)parser.c:1138:error:(Eachundeclaredidentifierisreportedonlyonceparser.c:1138:error:foreachfunctionitappearsin.)make[2]:[parser.lo]Error1解决方法:patch-p1


  • 编号:1700635586
  • 分类:合同模板
  • 软件: wps,office word
  • 大小:11页
  • 格式:docx
  • 风格:商务
  • PPT页数:298377 KB
  • 标签:

广告位推荐

相关合同模板更多>