Airplay屬於局域網內異構設備之間分享多媒體數據的一種通訊協議。Airplay設備有客戶端和服務器之分,通常將小屏IOS設備實現爲Airplay客戶端,大屏幕設備實現爲Airplay服務器。即iPhone, iPad, iPod通常爲Airplay客戶端,iTV, Macbook設計爲Airplay服務器,在小屏和大屏之間分享視頻、照片和音樂。Airplay屬於私有協議,版權Apple公司全部。linux
IOS設備的保有量很是大,若是Android機頂盒可以支持IOS設備的Airplay協議,實現爲Airplay服務器,可以接收和處理來自IOS設備的多媒體數據(視頻、照片和音樂),將能提升Android機頂盒的競爭力。windows
技術點分析:Airplay服務器端包含3個服務:DNS服務發現服務;基於HTTP協議的Airplay服務和基於UDP的Airtunes服務。DNS服務發現服務,在linux系統中有開源的AVAHI庫,其餘兩個服務須要基於Airplay協議去實現。服務器
1 Airplay概念圖網絡
Airplay客戶端:iPhone, iPad, iPod等IOS設備app
Airplay服務器:iTV, Macbook, AndriodTVBoxgoogle
網絡:Wifi無線局域網 .net
Airplay服務端包含的協議:DNS服務發現協議、HTTP協議、TCP/UDP協議、Airplay協議設計
Airplay服務端包含的服務:DNS服務發現服務、Airplay服務和Airtunes服務code
2 部分Airplay開源代碼(Android平臺的較少哦)視頻
Servers
Name
Description
Open
The best app for turning your Mac into an AirPlay screen
-
Turn your Mac or PC into an AirPlay screen
-
Another app to turn your Mac into and AirPlay screen
-
Mac AirPlay receiever
R
Turns you Macintosh into an Airplay receiver (Objective C)
R
C# based AirPlay screen for windows and AirPlay server source code
R
An AirPlay server written in Python
R
3 Android平臺上Airplay的實現
簡要說明一下:實現Airplay,最重要的有兩步,第一步是:Airplay服務發佈,讓IOS設備能發現你;第二步:實現Airplay協議應答, 讓IOS設備能和你交互。Airplay發佈服務,Linux系統中原生的Zeroconf協議,用於發佈網絡服務。Android平臺上並不支持Zeroconf協議。因此須要安裝Linux版本的Avahi,Avahi是Zeroconf協議的Linux實現。Avahi服務發佈管理系統,支持跨進程發佈,其中跨進程的數據交互是經過DBUS-Service的。DBUS服務,Android原生系統就自帶。
上面介紹了一下系統庫的依賴關係,下面介紹一下如何實現吧。
(1) 修改DUBS-Service(Andriod)服務的權限,默認是藍牙才能訪問,設置爲系統級程序均可以訪問。
(2) 編寫一個新的服務【零配置網絡發佈服務ZeroconfAvahiService】,其中簡單封裝一下Avahi服務和Avahi-client。並在Android配置文件中,讓該服務自啓動。
(3) AirplayServer程序中,建立Avahi-client,發佈Airplay服務。若是IOS設備能發現您的Android設備,恭喜服務發佈成功。
(4) 實現AirplayServer實現Airplay協議,完成與IOS設備的圖像、視頻數據的交互。Coding, Debugging, 總會成功的。
4 感想
學會了Android平臺Airplay的實現方法,屌絲設備能和高富帥設備交互,仍是有一絲驚豔的。不過Airplay不是惟一技術,DLNA,WifiDisplay也有相似功能。
【編輯推薦】