2013年12月3日 星期二

AirPlay 原理


基本概念


AirPlay 是一個用來與 Apple TV溝通的協定,可用 iOS 設備或 itunes將資料交給 Apple TV進行播放,其實作使用 Multicast DNS, HTTP, RTSP, RTP or NTP 等協定,並加上些許的修改。

 尋找設備

使用 Bonjour 協定,透過Publication告知網路本機器扮演的腳色為何,
並且可以透過 MDNS(multicast DNS) 找到支援 AirPlay 的設備。
Bonjour 簡介可參考 http://albert-oma.blogspot.tw/2012/07/blog-post.html
以 APPLE TV 而言,會廣播通知網路上所有機器,告知其本身提供兩種服務。
  • RAOP (Remote Audio Output Protocol) is used for audio streaming, 
  • AirPlay service is used for photo and video content.
此處提供一個範例(BonjourWeb),可以尋找網路上支援 Bonjour 的設備。只需改寫下列定義,便可以直接找到 AppleTV 
#define kWebServiceType @"_http._tcp"

 

播放圖片

直接透過 HTTP 取得對應的 JPEG,在 APPLE TV 上進行撥放
 

播放影片

使用 HTTP 告知 Apple TV,欲撥放的影片連結,請 Apple TV 自行至此連結取得 Video 進行播放。因此若 Apple TV無法解開的影片,便無法在 Apple TV 上進行撥放,以下為一個 iphone 的例子 
 1 POST /play HTTP/1.1
 2 X-Transmit-Date: 2012-03-16T14:20:39.656533Z
 3 Content-Type: application/x-apple-binary-plist
 4 Content-Length: 491
 5 User-Agent: MediaControl/1.0
 6 X-Apple-Session-ID: 368e90a4-5de6-4196-9e58-9917bdd4ffd7
 7 
 8 <BINARY PLIST DATA>
 9 <?xml version="1.0" encoding="UTF-8"?>
10 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
11  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
12 <plist version="1.0">
13  <dict>
14   <key>Content-Location</key>
15   <string>http://redirector.c.youtube.com/videoplayback?...</string>
16   <key>Start-Position</key>
17   <real>0.024613151326775551</real>
18  </dict>
19 </plist>

播放聲音

使用 RTSP 直接進行聲音的串流撥放

Airplay Mirroring

iOS設備將螢幕畫面壓縮成 H.264格式,並透過 HTTP 持續傳送 H.264 封包,以 NTP 協定進行時間校正。
   
參考資料
  1. http://nto.github.io/AirPlay.html
  2. https://developer.apple.com/airplay/