多屏互動(dòng),AirPlay,無(wú)線投屏,AirPlay投屏 Airplay的鏡像的發(fā)現(xiàn)過(guò)程
使用Bonjour,可以參考mDNSResponder,jmdns,注冊(cè)兩個(gè)服務(wù):airtunes和airplay,AirplayTxt以及RaopTxt照著demo填寫(xiě)就可以了,也可以根據(jù)自己的要求修改其中的值,
需要注意的如下:
airtunes:?? “12345@wirelessdisplay” , ”_raop._tcp.”airplay:??? “wirelessdisplay” , ”_airplay._tcp.”
參數(shù)中”_airplay._tcp.”和’’_raop._tcp.”不可修改。
發(fā)布了服務(wù)之后,ios設(shè)備中應(yīng)該就可以搜索到Server端了
協(xié)商過(guò)程
c-s: pair-setup
s-c: xxx
c-s: pair-verify
s-c: xxx
c-s: fp-setup
s-c: xxx
c-s: fp-setup
s-c: xxx
setup
setup response
setup
setup respnose
pair-setup,pair-verify配對(duì)驗(yàn)證,Server端根據(jù)收到的信息進(jìn)行回復(fù),格式類似RTSP
fp-setup(第一次和第二次),Fairplay相關(guān)。
第一次setup階段會(huì)收到一大串?dāng)?shù)據(jù),是按照plist格式生成的,用相應(yīng)的方法進(jìn)行解析可以得到ekey和eiv等信息,用于后續(xù)的解密。
第二次setup階段獲得type,通過(guò)type來(lái)判斷視頻數(shù)據(jù)或音頻數(shù)據(jù),通知接收端建立傳輸通道準(zhǔn)備進(jìn)行音視頻數(shù)據(jù)的發(fā)送,加密過(guò)的屏幕鏡像數(shù)據(jù)通過(guò)指定的端口(一般為7100)發(fā)送到接收端。
接收端收到發(fā)送過(guò)來(lái)的數(shù)據(jù)后進(jìn)行解密,解密后的數(shù)據(jù)就可以進(jìn)行播放了。
中間也可能會(huì)有GET_PARAMETER,SET_PARAMETER來(lái)調(diào)整音量等信息。
解密部分目前主要有兩種方法:
1.從apptv或macOS獲取。
2.從市面上已有的可投屏產(chǎn)品中獲取。
AIRPLAY鏡像投屏過(guò)程中,音視頻數(shù)據(jù)都是加密過(guò)的,對(duì)于接收端來(lái)說(shuō),需要正確解密后才能對(duì)音視頻數(shù)據(jù)進(jìn)行處理,音頻和視頻的解密過(guò)程還不一樣。音頻相對(duì)簡(jiǎn)單一點(diǎn),視頻會(huì)復(fù)雜一些。這一塊的解密過(guò)程是沒(méi)有公開(kāi)的,是蘋(píng)果自身的Fairplay DRM協(xié)議部分。現(xiàn)在市面上的第三方Airplay接收端無(wú)非都是通過(guò)逆向過(guò)程破解了相關(guān)部分。
本文針對(duì)音頻的處理做一個(gè)介紹,音頻部分的處理相對(duì)簡(jiǎn)單一點(diǎn)。