Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 說說android端實現Airplay多屏互動(一)

說說android端實現Airplay多屏互動(一)

編輯:關於Android編程

前段時間剛做完Airplay的相關應用,現在就開發的一點經驗和大家分享一下。

首先,說說Airplay吧,Airplay可以將iPhone,iPad或iPodtouch等設備上的視頻、音頻以及圖片傳輸到第三方認證設備上,一般是在AppleTV或Air port設備上,但其實,現在很多第三方的android設備也可以支持Airplay了,像阿裡雲或小米的盒子都支持Airplay投影了,而且效果都還不錯。

其實,Airplay算是蘋果公司定義的一種協議,或是一種技術吧,所以,按照慣例,這項技術是不開源的,對外封閉。而Android端,可以使用一套的多屏互動方案的,叫做DLAN,即Digital Living Network Alliance,它的協議是公開的。在次,得感謝諸多技術大牛,破解了Airplay,包括音頻投影服務中使用的RSA私鑰,和一份具體的協議說明(http://nto.github.io/AirPlay.html)。

下面,就Airplay協議內容大概的說明一下,當然,大家直接看上述地址中的內容也許更清楚,本人能力有限,大概的說說我的部分理解。

1.使用multicastDNS協議來進行服務發現,在android端可以用JmDNS來實現。

一般我們會發布兩個服務:AirTunes service(RAOP)和AirPlay Service,前者用於音頻流的投影,後者用於圖片和視頻內容的投影。

2.協議內容(一):AirTunesService

2.1.協議中的音頻流支持RTSP協議。

1)IOS設備向服務端發送的RTSP請求包括

ANNOUNCE:告訴RTSP服務器關於流的各種屬性
SETUP:告訴RTSP服務器初始化一個record session,同時通知必要的傳輸信息。
RECORD:請求服務器開始流的傳輸
FLUSH:請求停止傳輸
TEARDOWN:請求結束RTSP會話
PAUSE, OPTIONS,
GET_PARAMETER,
SET_PARAMETER:可用於音量控制,Metadata:其中包括音頻曲名,歌手名,專輯名,封面圖片,播放進度信息……
POST and GET

2)RTP流,用於傳輸音頻數據等。(如果說,RTSP用於發起/終結流媒體,那麼RTP則傳輸流媒體數據 )

這裡音頻包是幾乎完全兼容RTP協議。RTP包按有效載荷的不同類型分為以下幾種:

Audio packets:其有效載荷為經過加密的audio data

Sync packets:服務端每秒鐘會收到一個同步包,來將RTP中的timestamps與用於始終同步的NTP time關聯起來

Retransmit packets:對丟失的audio packets進行重傳

Timing packets:用於音頻的主時鐘同步

2.2音頻數據加密解密

Client:客戶端首先會用RSA公鑰,利用OAEP加密方式自動生成一個隨機的128位AES key,然後和rsaaes key,aesiv一起發送給Server。

Sever:服務端利用指定的RSA私鑰來解密AES key,然後將解密結果返回給Client。

Client:客戶端利用RSA公鑰要解密收到的數據,若解密結果和之前自動生成的隨機數一致,則表明服務端解密成功。

其中,PEM-encodedPKCS#8格式的私鑰為

/**
	 * The AirTunes private key in PEM-encoded PKCS#8 format.
	 * Original Key from shairport was in PEM-encoded PKCS#1 format
	 */
	private static final String PrivateKeyData =
		"MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDn10TyouJ4i2wf\n" +
		"VaCOtwVEqPp5RaqL5sYs5fUcvdTcaEL+PRCD3S7ewb/UJS3ALm85i98OYUjqhIVe\n" +
		"LkQtptYmZPZ0ofMEkpreT2iT7y325xGox3oNkcnZgIIuUNEpIq/qQOqfDhTA92k4\n" +
		"xfOIL8AyPdn+VRVfUbtZIcIBYp/XM1LV4u+qv5ugSNe4E6K2dn9sPM8etM5nPQN7\n" +
		"DS6jDF//6wb40Ird5AlXGpxon+8QcohV3Yz7movvXIlD7ztfqhXd5pi+3fNZlgPr\n" +
		"Pm9hNyu2KPZVn1maeL9QBoeqf0l2wFYtQSlW+JieGKY1W9gVl4JeD8h1ND7HghF2\n" +
		"Jc2/mER7AgMBAAECggEBAOXwDHL1d9YEuaTOQSKqhLAXQ+yZWs/Mf0qyfAsYf5Bm\n" +
		"W+NZ3xJZgY3u7XnTse+EXk3d2smhVTc7XicNjhMVABouUn1UzfkACldovJjURGs3\n" +
		"u70Asp3YtTBiEzsqbnf07jJQViKQTacg+xwSwDmW2nE6BQYJjtvt7Pk20PqcvVkp\n" +
		"q7Dto1eZUC+YlNy4/FaaiS0XeAMkorbDFm40ZwkTS4VAQbhncGtY/vKg25Ird2KL\n" +
		"aOaWk8evQ78qc9C3Mjd6C6F7RPBR6b95hJ3LMzJXH9inCTPC1gvexHmTSj2spAu2\n" +
		"8vN8Cp0HEG6tyLNpoD8vQciACY6K3UYkDaxozFNU82ECgYEA9+C/Wh5nGDGai2IJ\n" +
		"wxcURARZ+XOFZhOxeuFQi7PmMW5rf0YtL31kQSuEt2vCPysMNWJFUnmyQ6n3MW+V\n" +
		"gAezTGH3aOLUTtX/KycoF+wys+STkpIo+ueOd0yg9169adWSAnmPEW42DGQ4sy4b\n" +
		"2LncHjIy8NMJGIg8xD743aIsNpECgYEA72//+ZTx5WRBqgA1/RmgyNbwI3jHBYDZ\n" +
		"xIQgeR30B8WR+26/yjIsMIbdkB/S+uGuu2St9rt5/4BRvr0M2CCriYdABgGnsv6T\n" +
		"kMrMmsq47Sv5HRhtj2lkPX7+D11W33V3otA16lQT/JjY8/kI2gWaN52kscw48V1W\n" +
		"CoPMMXFTyEsCgYEA0OuvvEAluoGMdXAjNDhOj2lvgE16oOd2TlB7t9Pf78fWeMZo\n" +
		"LT+tcTRBvurnJKCewJvcO8BwnJEz1Ins4qUa3QUxJ0kPkobRc8ikBU3CCldcfkwM\n" +
		"mDT0od6HSRej5ADq+IUGLbXLfjQ2iecR91/ng9fhkZL9dpzVQr6kuQEH7NECgYB/\n" +
		"QBjcfeopLaUwQjhvMQWgd4rcbz3mkNordMUFWYPt9XRmGi/Xt96AU8zA4gjwyKxi\n" +
		"b1l9PZnSzlGjezmuS36e8sB18L89g8rNMtqWkZLCiZI1glwH0c0yWaGQbNzUmcth\n" +
		"PiLJTLHqlxkGYJ3xsPSLBj8XNyA0NpSZtf35cO9EDQKBgQCQTukg+UTvWq98lCCg\n" +
		"D16bSAgsC4Tg+7XdoqImd9+3uEiNsr7mTJvdPKxm+jIOdvcc4q8icru9dsq5TghK\n" +
		"DEHZsHcdxjNAwazPWonaAbQ3mG8mnPDCFuFeoUoDjNppKvDrbbAOeIArkyUgTS0g\n" +
		"Aoo/jLE0aOgPZBiOEEa6G+RYpg==\n" +
		"";

3.協議內容(二):AirPlay Service

/reverse:協商請求

/scrub: POST方式為seek請求, GET方式為獲取播放位置

/volume: 設置音量:0.000000為靜音,1.000000為最大

/play: 播放請求:攜帶播放鏈接,本地文件播放為http,網絡文件播放為m3u8地址

/rate: 播放與暫停:0.000000為暫停,1.000000為播放

/stop: 停止播放

/photo: 推送圖片:在HTTP的Body發送實際圖片

/playback-info: 獲取播放端的狀態:總時長、緩沖時長、播放位置、播放器狀態(LOADING、PLAYING、PAUSED、STOP)等信息

/server-info: 獲取服務器信息:主要是mac地址信息

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved