基於DLNA實現iOS,Android投屏:基本概念

BrikerMan發表於2016-04-26

基於DLNA實現iOS,Android投屏:基本概念

由於我司需求,需要在iOS和安卓客戶端實現DLNA投屏和控制。經過一番折騰,決定由我來研究DLNA。說起來又興奮又緊張,興奮希望自己能夠弄出來然後跟安卓組講解原理,緊張是因為怕自己能力不足做不出來。

DLNA網上的資料比較籠統不好入門,官方資料直接是每個1000多頁的10幾個PDF文件,根本無從下手。相關開源專案有名的有 Platinum UPnP,但是由於它是基於C++實現的,相關文件並不全面。iOS相關開源專案都三四年沒更新的,找來找去只好自己去啃自己去實現了。還好買到一本不錯的書《智慧家庭網路:技術、標準與應用實現》。通過近倆星期的研究,搞懂了DLNA核心協議UPnP基本邏輯,實現了投屏和控制功能的Demo。

下面就整理一下實現基本概念,實現過程和一些坑。

如果要直接看實現過程,請看以下三篇文章

基礎概念

DLNA

DLNA的全稱是DIGITAL LIVING NETWORK ALLIANCE(數字生活網路聯盟), 其宗旨是Enjoy your music, photos and videos, anywhere anytime, DLNA(Digital Living Network Alliance) 由索尼、英特爾、微軟等發起成立、旨在解決個人PC,消費電器,移動裝置在內的無線網路和有線網路的互聯互通,使得數字媒體和內容服務的無限制的共享和增長成為可能,目前成員公司已達280多家。

DLNA標準包括多項協議及標準,其中最重要的部分是UPnP。對於我們目前的需求UPnP就能滿足全部要求。

UPnP

通用即插即用(英語:Universal Plug and Play,簡稱UPnP)是由“通用即插即用論壇”(UPnP™ Forum)推廣的一套網路協議。該協議的目標是使家庭網路(資料共享、通訊和娛樂)和公司網路中的各種裝置能夠相互無縫連線,並簡化相關網路的實現。UPnP通過定義和釋出基於開放、因特網通訊網協議標準的UPnP裝置控制協議來實現這一目標。

UPnP這個概念是從即插即用(Plug-and-play)派生而來的,即插即用是一種熱拔插技術。

協議棧

UPnP裝置體系結構包含了裝置之間、控制點之間、裝置和控制點之間的通訊。完整的UPnP由裝置定址、裝置發現、裝置描述、裝置控制、事件通知和基於Html的描述介面幾部分構成。

基於DLNA實現iOS,Android投屏:基本概念

  1. UPnP是一個多層協議構成的框架體系,每一層都以相鄰的下層為基礎,同時又是相鄰上層的基礎。直至達到應用層為止。該圖中的最下面是就是IP和TCP,共兩層,負責裝置的IP地址。
  2. 三層是HTTP、HTTPU、HTTPMU,這一層,屬於傳送協議層。傳送的是內容都經過“封裝”後,存放在特定的XML檔案中的。對應的SSDP、GENA、SOAP指的是儲存在XML檔案中的資料格式。到這一層,已經解決了UPnP裝置的IP地址和傳送資訊問題。
  3. 第四層是UPnP裝置體系定義,僅僅是一個抽象的、公用的裝置模型。任何UPnP裝置都必須使用這一層。
  4. 第五層是UPnP論壇的各個專業委員會的裝置定義層,在這個論壇中,不同電器裝置由不同的專業委員會定義,例如:電視委員會只負責定義網路電視裝置部分,空調器委員會只負責定義網路空調裝置部分,依此類推。所有的不同型別的裝置都被定義成一個專門的架構或者模板,供建立裝置的時候使用。可以推知,進入這一層,裝置已經被指定了明確用途。當然,這些都必須遵守標準化的規範。從目前看,UPnP已經可以支援大部分的裝置:從電腦、電腦外設,移動裝置和家用消費類電子裝置等等,無所不包,隨著這個體系的普及,將可能有更多的廠家承認這一標準,最終,可能演化為公認的行業標準。
  5. 最上層,也就是應用層,由UPnP裝置製造廠商定義的部分。這一層的資訊是由裝置製造廠商來“填充” 的,這部分一般有裝置廠商提供的、對裝置控制和操作的底層程式碼,然後,就是名稱序列號呀,廠商資訊之類的東西。

裝置

裝置是提供服務的網路實體,是一個邏輯概念,一個屋裡裝置可以包含一個或者多個邏輯裝置。例如一臺PC可以有兩個邏輯裝置———視訊播放器和圖片瀏覽器。

服務

服務是UPnP中最小的可控單元,它包括一系列可控制而動作和一組記錄該服務目前情況的狀態。服務是依賴於裝置存在的。

控制點

控制UPnP裝置工作的網路終端,主要功能包括獲取裝置描述和相關服務列表;獲取感興趣的服務描述;發出控制訊息控制裝置動作;向感興趣的服務發出訂閱訊息,以便當服務狀態改變時,自動獲得時間通知。

基於DLNA實現iOS,Android投屏:基本概念

一些術語

UUID

UUID含義是通用唯一識別碼(Universally Unique Identifier),其目的是讓分散式系統中的所有元素,都有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。其格式為xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),分別為當前日期和時間,時鐘序列,全域性唯一的IEEE機器識別號,如果有網路卡,從網路卡mac地址獲得,沒有網路卡以其他方式獲得。

UDN

單一裝置名(Unique Device Name),基於UUID,表示一個裝置。在不同的時間,對於同一個裝置此值應該是唯一的。

URI

Web上可用的每種資源 – HTML文件、影像、視訊片段、程式等 – 由一個通用資源標誌符(Universal Resource Identifier,簡稱”URI”)進行定位。 URI一般由三部分組成:訪問資源的命名機制;存放資源的主機名;資源自身的名稱,由路徑表示。考慮下面的URI,它表示了當前的HTML 4.0規範:http://www.webmonkey.com.cn/html/html40/它表示一個可通過HTTP協議訪問的資源,位於主機www.webmonkey.com.cn上,通過路徑/html/html40訪問。

URL

URL是URI命名機制的一個子集,URL是Uniform Resource Location的縮寫,譯為“統一資源定位符”。通俗地說,URL是Internet上用來描述資訊資源的字串,主要用在各種www客戶程式和伺服器程式上。採用URL可以用一種統一的格式來描述各種資訊資源,包括檔案、伺服器的地址和目錄等。

URN

URN:URL的一種更新形式,統一資源名稱(URN,Uniform Resource Name)。唯一標識一個實體的識別符號,但是不能給出實體的位置。標識永續性Internet資源。URN可以提供一種機制,用於查詢和檢索定義特定名稱空間的架構檔案。儘管普通的URL可以提供類似的功能,但是在這方面,URN 更加強大並且更容易管理,因為 URN 可以引用多個 URL。

實現

工作機制

UPnP裝置的發現和控制分為6個步驟:定址、發現、描述、控制、事件及展現。

基於DLNA實現iOS,Android投屏:基本概念
這三點分別在以下三篇文章中介紹

整體流程

整體工作流程如下:
基於DLNA實現iOS,Android投屏:基本概念

參考

相關文章