Airplay協(xié)議研究(含shairport交叉編譯、移植與調(diào)試)_第1頁(yè)
Airplay協(xié)議研究(含shairport交叉編譯、移植與調(diào)試)_第2頁(yè)
Airplay協(xié)議研究(含shairport交叉編譯、移植與調(diào)試)_第3頁(yè)
Airplay協(xié)議研究(含shairport交叉編譯、移植與調(diào)試)_第4頁(yè)
Airplay協(xié)議研究(含shairport交叉編譯、移植與調(diào)試)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

一、介紹

AIRPLAY協(xié)議AIRPLAYAppleTV上掃瞄iPhoneiPodtouch、iPad〔硬件設(shè)備〕或者iTunes〔軟件〕中的各種媒體內(nèi)容。AirPlay支持如下幾種使用場(chǎng)景:iOS設(shè)備上傳輸并顯示照片、幻燈片;iOS設(shè)備或者Itunes軟件中傳輸并播放音頻;iOS設(shè)備或者Itunes軟件中傳輸并播放視頻;iOS設(shè)備或者OSXMountainLion進(jìn)展屏幕鏡像。由于此功能需要硬件的硬解碼支持,所以只能在iPad2、iPhone4S、帶SandyBridgeCPUMac電腦〔或更的設(shè)備〕上支持。AirTunes,只支持音頻流播放。后來(lái)蘋果開發(fā)AppleTV時(shí),對(duì)AIRPLAYAIRPLAY協(xié)議基于一MulticastDNS、、RTSP、RTPNTP以及其他的一些自定義擴(kuò)展。由于我們只關(guān)注音頻局部,所以下面爭(zhēng)論的重點(diǎn)是AirTunes效勞。二、實(shí)現(xiàn)機(jī)制Bonjou(multicastDNS的開放性ZeroconfBonjou(multicastDNS的開放性Zeroconf標(biāo)準(zhǔn)Zeroconf(零設(shè)置網(wǎng)絡(luò)標(biāo)準(zhǔn)):全稱為Zeroconfigurationnetworking,中文名則為零配置IP地址的網(wǎng)絡(luò)技術(shù),不需要額外的手動(dòng)配置和專屬的配置效勞器?!傲闩渲镁W(wǎng)絡(luò)”如計(jì)算機(jī),打印機(jī)等。整個(gè)搭建網(wǎng)絡(luò)的過(guò)程都是通過(guò)程式自動(dòng)化實(shí)現(xiàn)。假設(shè)沒有zeroconf,用戶必需手動(dòng)配置一些效勞,例如DHCP、DNS,計(jì)算機(jī)網(wǎng)絡(luò)的其他設(shè)置等。這些對(duì)非技術(shù)用戶和用戶們來(lái)說(shuō)是很難的事情。具體例子為:用戶擁有一臺(tái)appletv和一臺(tái)iPhone4s,那之只要都連入到同一個(gè)無(wú)線局域網(wǎng)內(nèi),iphone4s就會(huì)自動(dòng)找出appletv,那么在播放音樂(lè)或者視頻時(shí)候,用戶只要點(diǎn)擊推送,就可以講音樂(lè)和視頻推送到appletv上播放。BonjourZeroconf協(xié)議的還有Avahihowl。下面以AirTunes效勞為例來(lái)具體看是假照實(shí)現(xiàn)效勞覺察的RAO〔RemoteAudioAccessProtocol〕效勞,其格式如下:namename字段由設(shè)備的MAC地址和遠(yuǎn)程設(shè)備的名稱組成〔通常就在客戶端上顯示此設(shè)備名稱〕TXT參數(shù)中包含以下字段:AudioAudiocodecs〔音頻編碼〕EncryptionEncryptionTypesApExApExiTunes傳輸MetadataMetadataTypesRAOPRAOPRTS不過(guò)增加了基于身份驗(yàn)證懇求-應(yīng)答的一步。實(shí)時(shí)流協(xié)議是應(yīng)用層協(xié)議,用來(lái)實(shí)現(xiàn)和掌握實(shí)時(shí)數(shù)據(jù)的傳送。RAOP效勞用兩個(gè)信道實(shí)現(xiàn)流媒體音樂(lè):一個(gè)是用實(shí)時(shí)流協(xié)議的掌握信道;另一個(gè)是數(shù)據(jù)信道用來(lái)發(fā)送原始數(shù)據(jù)iTunes〔v6.0.和AirportExpress〔簡(jiǎn)稱RAOP效勞過(guò)程如下所示:iTunes到ApEx傳輸從上面可以看出從上面可以看出iTunes22byte的加密的蘋ApExApEx回復(fù)一個(gè)響應(yīng),這個(gè)響應(yīng)是由儲(chǔ)存在ApEx的私鑰加密后的懇求參數(shù)。然后iTunes用非對(duì)稱密鑰對(duì)的公鑰對(duì)該值進(jìn)展驗(yàn)證〔這種私鑰加密公鑰驗(yàn)證的方法具體實(shí)現(xiàn)細(xì)節(jié)如果感興趣可以參考iTunes用來(lái)驗(yàn)證是否正在與一個(gè)ApEx對(duì)話。在這一步溝通過(guò)后上述連接斷開。接下來(lái),iTunesiTunes用來(lái)驗(yàn)證是否正在與一個(gè)ApEx對(duì)話。在這一步溝通過(guò)后上述連接斷開。接下來(lái),iTunes在同一個(gè)端口建立另外一個(gè)與ApExRTSP連接,同時(shí)供給一個(gè)隨機(jī)產(chǎn)生的AES密鑰給ApExAES密鑰是經(jīng)過(guò)RSAiTunes供給〔即非對(duì)稱密鑰對(duì)的公鑰ApEx的私鑰解密來(lái)驗(yàn)證是否正在跟一個(gè)iTunes對(duì)話。值得欣喜的是目前通過(guò)逆向工程已經(jīng)破解了非對(duì)稱密鑰對(duì)。上述過(guò)程如下所示:iTunes到ApEx傳輸然后,ApEx告知iTunes哪一個(gè)端口用于數(shù)據(jù)連接(server_port,6000)。iTunes到ApEx傳輸ApExiTunes傳輸ApExiTunes傳輸在掌握包里的在掌握包里的RTSP序列和時(shí)間戳的交換如下所示:iTunes到ApEx傳輸ApExiTunes傳輸下面展現(xiàn)假設(shè)調(diào)整音量參數(shù):下面展現(xiàn)假設(shè)調(diào)整音量參數(shù):iTunes到ApEx傳輸ApExiTunes傳輸最終展現(xiàn)是如何關(guān)閉會(huì)話的:最終展現(xiàn)是如何關(guān)閉會(huì)話的:iTunes到ApEx傳輸ApExApExiTunes傳輸重來(lái)看以下圖:知知ApEx支持的方法有:ANNOUNCE,SETUP,RECORD,PAUSE,FLUSH,TEARDOWN,OPTIONS,GET_PARAMETERSET_PARAMETER。ANNOUNCE:ANNOUNCERTSP效勞器音頻流使用的是會(huì)話描述協(xié)議。并且也會(huì)ANNOUNCEforAppleLosslessaudiofromiTunesSETUPSETUP:SETUP會(huì)初始化一個(gè)記錄會(huì)話,發(fā)送必要的傳輸信息建立三個(gè)UDP信道:協(xié)議交互如下:協(xié)議交互如下:setuparecordsessionRECORDRECORD:RECORD啟動(dòng)音頻流,RTP-Info頭文件里包含了下面的參數(shù):?jiǎn)?dòng)音頻流的協(xié)議交互如下:FLUSHFLUSH:FLUSH關(guān)閉音頻流。其協(xié)議交互如下:TEARDOWNTEARDOWN:TEARDOWN完畢RTSP會(huì)話,其協(xié)議交互上面已經(jīng)有圖介紹過(guò)。假設(shè)想有更深入的了解可以參考“://nto.github.io/AirPlay.html#audio-rtsprequests“://nto.github.io/AirPlay.html#audio-rtsprequests中關(guān)于音頻的局部。三、AIRPLAY協(xié)議的實(shí)現(xiàn)、移植與調(diào)試:linuxAIRPLAYshairport、xmbc〔其音頻局部實(shí)現(xiàn)機(jī)制也是基于shairport的。shairport是一個(gè)模擬ApExiTunes和其他兼容設(shè)備的音樂(lè)的目的。它是作為支持RAOP的一個(gè)效勞端。其0.X版本是perl腳本寫的,但目前shairport已經(jīng)更至1.0-dev,該版本已經(jīng)去除perl腳本局部,改為完全由C寫成,這更便利bug。1.0-dev版本后必需的依靠庫(kù)是OpenSS,可選的依靠庫(kù)有l(wèi)iba、PulseAudi、avah〔或者h(yuǎn)ow。過(guò)分析知,假設(shè)libao和PulseAudio安裝后shairport將有5個(gè)輸出后端〔alsaaopusle、dummy、pipe〕libao和PulseAudio,shairport3個(gè)輸出后端〔即alsdummpip,不影響shairport的功能〔播放時(shí)會(huì)產(chǎn)生延遲的音質(zhì)最好還是要安裝PulseAudio。通過(guò)不斷的嘗試,可以選擇穿插編譯OpenSSL和howl,以避開簡(jiǎn)單的穿插編譯??偣残枰M(jìn)展穿插編譯的有alsa-lib、OpenSSL、howl、zlib和shairport1.0-dev穿插編譯前照舊是先建安裝名目shairpor,并商定名目〔在shairport名目下進(jìn)展: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時(shí)消滅以下錯(cuò)誤: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<alsa-lib-1.0.24.1-uclibc-missing-versionsort.patch3.下面又消滅問(wèn)題:aserver.o:Infunction`pcm_shm_cmd”:aserver.c:(.text+0x25f0):warning:Warning:snd_pcm_hwsyncisdeprecated,considertousesnd_pcm_avail../src/.libs/libasound.so:undefinedreferenceto`atomic_sub”../src/.libs/libasound.so:undefinedreferenceto`atomic_add”collect2:ldreturned1exitstatusmake[1]:***[aserver]Error1make[1]:Leavingdirectory`/home/wcy/shairport/alsa-lib-1.0.24.1/aserver”make:***[all-recursive]Error1alsa-lib-1.0.24\includeiatomic.hmipsatomic_add和atomic_sub函數(shù)的實(shí)現(xiàn)時(shí),將extern改為static。穿插編譯openssl1../configsharedno-asm--prefix=/home/wcy/shairport/--openssldir=/home/wcy/shairport/openssl-1.0.1e2.修改Makefile:CC=mips-linux-gccRANLIB=/home/wcy/Lsdk/build/gcc-4.3.3/build_mips/staging_dir/usr/binNM=mips-linux-nmAR=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時(shí)消滅錯(cuò)誤解決方法如下:即:進(jìn)入src/autoipd 執(zhí)行命令makelinux_autoip.loposix_main.lo穿插編譯zlib./configureprefix=../../Lsdk/build/gcc-4.3.3/build_mips/staging_dir/usrMakefile: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=../../Lsdk/build/gcc-4.3.3/build_mips/staging_dir/usr/bin/mips-linux-gccconfig.mk:刪去CONFIG_PULSE=yes修改CFLAGSLDFLAGS:CFLAGS+= -D_REENTRANT-I/../../Lsdk/build/gcc-4.3.3/build_mips/staging_dir/usr/include/alsaLDFLAGS+=-L/../../Lsdk/build/gcc-4.3.3/build_mips/staging_dir/usr/lib-lm-lpthread-lssl-ldl-L/../lib-lz-lasound-lcryptoconfig.h:刪去#defineCONFIG_PULSEmDNSRespond

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論