UPNP: Universal Plug and Playhtml
UPnP 是一種分佈式的,開放的網絡架構。UPnP 是獨立的媒介。在任何操做系統中,利用任何編程語言均可以使用 UPnP 設備。UPnP規範基於TCP/IP協議和針對設備彼此間通信而制訂的新的Internet協議。、編程
在 UPnP 架構中沒有設備驅動程序,取而代之的是普通協議。一個 UPnP 設備可以自動跟一個網絡鏈接上、並自動得到一個 IP 地址、傳送出本身的權能並獲悉其它已經鏈接上的設備及其權能。最後,此設備能自動順利地切斷網絡鏈接,而且不會引發意想不到的問題。服務器
大多數無線路由器的UPnP默認爲關閉,用戶可手動開啓該功能,重啓路由器後便可生效。網絡
特色:架構
1. 以網絡爲應用環境,不考慮「孤島」中的計算機。編程語言
2. 以TCP/IP和整個Internet爲基礎。這樣是「中立」的,不依附於任何操做系統或應用程序,不使用特定的API函數,不受程序設計語言的侷限。能夠無縫地接入傳統網絡。分佈式
3. 設備能夠動態地進入網絡中,隨後得到IP地址,「學習」 或查找本身應當進行的操做和服務的信息;「感知」別的設備是否存在以及它們的做用和當前的狀態 。全部這些,都應當是可自動完成的。函數
4. 每一個設備均可讀取屬於本身的、特定的狀態和參數;完成控制操做後應當發出「操做完成」的響應信號。若是失敗,則應發出控制失敗的信號。學習
UPnP最大的願景是但願任何設備一旦鏈接上網絡,全部在網絡上的設備立刻就能知道有新設備加入,這些設備彼此之間能互相通訊,更能直接使用或者控制它,一切都不須要人工設置,徹底的即插即用。spa
基本協議:UPnP所定義的基本協議(如SSDP、GENA、SOAP等)
HTTPU: 基於HTTP
HTTPMU: Multicast UDP
設備 服務 控制點
簡單服務發現協議(Simple Service Discovery Protocol:SSDP),是內建在HTTPU/HTTPMU裏,定義如何讓網絡上有的服務被發現的協議。具體包括控制點如何發現網絡上有哪些服務,以及這些服務的資訊,還有控制點自己宣告他提供哪些服務。該協議運用在UPnP工做流程的設備發現部分。
簡單對象訪問協議(Simple Object Access Protocol:SOAP)定義如何使用XML與HTTP來執行遠程過程調用(Remote Procedure Call)。包括控制點如何發送命令消息給設備,設備收到命令消息後如何發送響應消息給控制點。該協議運用在UPnP工做流程的設備控制部分。
通用事件通知架構(Generic Event Notification Architecture:GENA)定義在控制點想要監聽設備的某個服務狀態變量的情況時,控制點如何傳送訂閱信息並如何接收這些信息,該協議運用在UPnP工做流程的事件訂閱部分。
一、 首先控制點和設備都先獲取IP地址後才能進行下一步的工做;
二、 控制點首先要尋找整個網絡上的UPnP設備,同時網絡上的設備也要宣告自身的存在;
三、 控制點要取得設備的描述,包括這些設備提供什麼樣的服務;
四、 控制點發出動做信息給設備;
五、 控制點監聽設備的狀態,當狀態改變時做出相應的處理動做;
獲取IP 地址。
設備發現是由簡單發現協議SSDP來完成的。
1)添加新的設備時:發現過程容許設備向網絡上的控制節點告知它提供的服務 (advertise)
2)添加一個控制點時:發現過程容許控制點尋找網絡上感興趣的設備。 search & responce
在控制點發現一臺設備後,控制點對該設備可能僅僅知道設備或者服務的UPnP類型,設備的UUID和設備描述的URL地址,還須要知道更多的信息。控制點能夠從發現消息中獲得設備描述的URL,經過URL取回設備描述的信息。
設備描述 & 服務描述。
4, DLNA 原理交互過程
交互過程:
媒體播放器和媒體服務器之間基於http(標配)或rtsp(可選)進行媒體文件傳輸,控制點不參與媒體傳輸過程,控制點主要是來協調媒體服務器和媒體播放器之間的互操做功能的,好比選擇二者都支持的傳輸協議和媒體格式,一般會有個UI界面來操做各自提供的接口(UPnP Action),好比手機,遙控器等,下面描述控制點播放視頻的交互過程。
1. 發現DLNA網絡中的音視頻設備(媒體服務器和媒體播放器):控制點會自動經過UPnP的發現機制來檢測到網絡中的媒體服務器和媒體呈現器,一種經過手機以組播的形式發送UPnP M-SEARCH命令來查找設備,另外是網絡中的音視頻設備會間隔地發送ssdp:alive消息告訴控制點其設備信息和其提供的服務。
2. 查找、瀏覽網絡中媒體服務器的視頻:調用媒體服務器提供的內容目錄服務接口ContentDirectory::Search()或Browser(),媒體服務器會以didl-lite規範返回目錄及文件信息,其中包括支持的傳輸協議和格式
3. 獲取媒體播放器的協議信息:控制點調用媒體播放器鏈接管理服務的接口ConnectionManager::GetProtocolInfo()來獲取傳輸協議和支持的數據格式列表。
4. 匹配傳輸協議和數據格式:控制點在第2步從媒體服務器獲取到的視頻格式和支持的傳輸協議,在第3步一樣獲取到媒體播放器支持的傳輸協議和媒體數據格式,經過比較選擇二者都支持的協議和數據格式。
5. 配置媒體服務器和媒體播放器:DLNA中媒體服務器和媒體播放器必須都支持鏈接管理服務,控制點經過調用ConnectionManger::PrepareForConnection()接口來作預配置處理並返回傳輸服務(AVTransport)的實例Id,以方便多個控制點操做狀態的管理
6. 選取要播放的視頻:控制點根據第2步中返回的視頻列表中選擇要播放的視頻,調用音視頻傳輸服務AVTransport::SetAVTransportURI()接口來告訴媒體播放器資源存儲地址。
7. 開始視頻傳輸:控制點調用媒體播放器的音視頻傳輸服務AVTransport:play() /stop()接口進行控制操做,這個時候實際就是媒體播放器從媒體服務器上下載視頻播放,控制點不參與視頻數據的傳輸過程。
8. 視頻顯示控制:控制點調用媒體播放器的呈現控制服務RendringControl的接口來調整顯示效果,如控制亮度,對比度,聲音大小等。
9. 重複選擇下一個視頻:控制點經過調用AVTransport::SetAVTransportURI() 或者AVTransport::SetNextAVTransportURI()接口來重複上面的過程播放下一個視頻。
10. 播放結束:當控制點不想再播放視頻時,就能夠調用鏈接管理服務ConnectionManager::ConnectionComplete()接口來結束媒體服務器和媒體播放器。
參考資料:
http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Five/Home/Catalog/201206/747039_97665_0.htm
DLNA 相關:內容比較贊
http://www.codekk.com/open-source-project-analysis/detail/Android/kevinshine/Cling%20%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90
DLNA交互流程:
http://blog.sina.com.cn/s/blog_6dce99b10101jt8f.html