DLNA第一步UPnP協(xié)議棧_第1頁(yè)
DLNA第一步UPnP協(xié)議棧_第2頁(yè)
DLNA第一步UPnP協(xié)議棧_第3頁(yè)
DLNA第一步UPnP協(xié)議棧_第4頁(yè)
DLNA第一步UPnP協(xié)議棧_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、DLNA 第一步 UPnP 協(xié)議棧前面公司有DLNA 項(xiàng)目, 研究了一下, 在網(wǎng)上關(guān)于DLNA的資源很少,就將自己的心得寫(xiě)出來(lái),以供參考。其它的關(guān)于DLNA 的介紹就不多說(shuō),要了解DLNA 需要了解 upnp, 因?yàn)镈LNA 在 upnp 之上,初學(xué)者可以從 下載 upnp 的資料 .也歡迎大家加入197683240 DLNA 交流群。upnp 分為四步:發(fā)現(xiàn) 、描述 、控制 、事件 發(fā)現(xiàn)當(dāng)一個(gè) UPnP 的設(shè)備加入網(wǎng)絡(luò),并想知道什么 UPnP 服務(wù)在網(wǎng)絡(luò)上可用,它發(fā)送一個(gè)發(fā)現(xiàn)消息多播地址50端口 1900 通過(guò) UDP 協(xié)議。此消

2、息包含一個(gè)頭,類(lèi)似于一個(gè)HTTP 請(qǐng)求。 該協(xié)議有時(shí)被稱(chēng)為為 HTTPU( HTTP 通過(guò) UDP ) :M-SEARCH * HTTP/1.1ST: upnp:rootdeviceMX: 3MAN: ssdp:discover 所有其他 UPnP 設(shè)備或方案都必須回應(yīng)此消息類(lèi)似的消息發(fā)送回設(shè)備,使用 UDP 單播,宣布該設(shè)備或程序?qū)崿F(xiàn)的 UPnP 型材。 一個(gè)有趣的怪癖: 發(fā)送 UDP 單播設(shè)備發(fā)現(xiàn)消息被送往港口。對(duì)于每一個(gè)配置文件,它實(shí)現(xiàn)發(fā)送一條消息: HTTP/1.1 200 OKST:upnp:rootdeviceUSN:uuid:1d8ec8a7-4736-4598-9950-971

3、0c992e471:upnp:root deviceLocation:05:2869/upnphost/udhisapi.dll?conte nt=uuid:1d8ec8a7-4736-4598-9950-9710c992e471OPT:/upnp/1/0/;ns=0101-NLS:a06cdf4dcc4f213129a39f9b2ae98977Cache-Control:max-age=3200Server:Microsoft-Windows-NT/5.1UPnP/1.0UPnP-Device-Host/1.0 在

4、定期間隔的 UPnP 功能的設(shè) 備或程序發(fā)送一條消息,宣布他們的服務(wù)。一個(gè)通知消息是或多或少相同, 但發(fā)現(xiàn)響應(yīng)消息發(fā)送到 50 組播地址通過(guò) UDP 1900端口上的 UPnP有ST頭,取而代之的是一個(gè)類(lèi)似頭 NT 頭。 描述每個(gè)配置文件提供了本身的描述和它提供的服務(wù),并通過(guò)XML 提供。從發(fā)現(xiàn)階段的響應(yīng)消息中包含一個(gè)頭稱(chēng)為位置(不區(qū)分大小寫(xiě)) , 這是一個(gè) XML 格式的文件可以下載的網(wǎng)址。這個(gè)文件描述(或相當(dāng):應(yīng)說(shuō)明)配置文件,設(shè)備或計(jì)劃實(shí)施,控制和事件相應(yīng)命令發(fā)送到專(zhuān)門(mén)的網(wǎng)址,但也可能是其他有關(guān)設(shè)備的元信息,如圖標(biāo),這應(yīng)該是顯示 Windows資源管理器,設(shè)備制

5、造商,依此類(lèi)推。 有沒(méi)有這個(gè)頭文件的默認(rèn)值。事實(shí)上,在一些設(shè)備,尤其是對(duì)一個(gè)Broadcom芯片為基礎(chǔ)的,它被設(shè)置在啟動(dòng)時(shí)動(dòng)態(tài)。唯一的方法是完全肯定的是永遠(yuǎn)做設(shè)備發(fā)現(xiàn)??刂圃谠搮f(xié)議的第三步是“控制” :設(shè)備或程序可以要求其他設(shè)備或程序執(zhí)行客戶(hù)的名義采取行動(dòng),使用 SOAP 。 SOAP 是 一個(gè)協(xié)議,運(yùn)行在HTTP 上使用 XML 來(lái)描述遠(yuǎn)程過(guò)程調(diào)用服務(wù)器和從這些調(diào)用的返回結(jié)果。 SOAP 主要用于基于網(wǎng)絡(luò)的服務(wù)。 對(duì)于每一個(gè)主要的編程語(yǔ)言庫(kù), 可以用來(lái)實(shí)現(xiàn)SOAP請(qǐng)求和處理SOAP 響應(yīng)。 請(qǐng)求服務(wù)是通過(guò)發(fā)送一個(gè)SOAP請(qǐng)求到正確的參數(shù),所謂的“控制 URL ”的控制點(diǎn)。為控制特定的配置文件

6、的 URL 地址, 可以發(fā)現(xiàn)在XML 文件的 URL在 Location 頭從描述階段發(fā)現(xiàn)內(nèi)的 <service> 標(biāo)簽。 配置 文件標(biāo)記看起來(lái)像這樣: <service><serviceType>urn:dmc-samsung-com:service:SyncManag er:1</serviceType><serviceId>urn:dmc-samsung-com:serviceId:SyncManage r</serviceId><controlURL>/upnphost/udhisapi.dll?con

7、trol=uuid:1d8ec 8a7-4736-4598-9950-9710c992e471+urn:dmc-samsung-com:ser viceId:SyncManager</controlURL><eventSubURL>/upnphost/udhisapi.dll?event=uuid:1d8ec8a7-4736-4598-9950-9710c992e471+urn:dmc-samsung-com:ser viceId:SyncManager</eventSubURL><SCPDURL>/upnphost/udhisapi.dll?c

8、ontent=uuid:bdccc2ab-dcdf-4c18-beee-226cc7df1f94</SCPDURL></service>只發(fā)送 SOAP 請(qǐng)求 URL 內(nèi) controlURL 標(biāo)簽是必要的。這取決于哪些行動(dòng)可以執(zhí)行的配置文件。在在 SCPDURL 標(biāo)記的URL 的 URL 是所謂的 “服務(wù)描述的 URL ”。 它描述了 SOAP 方法可以進(jìn)行該配置什么所謂的狀態(tài)變量配置文件。在這個(gè)文件是什么,應(yīng)符合設(shè)備提供服務(wù),但在實(shí)踐中,他們似乎總是不相匹配。 事件UPnP 中有這樣的概念,被稱(chēng)為“狀態(tài)變量” 。這些變量,因?yàn)檫@個(gè)名字說(shuō),用于保持某種形式的狀態(tài)中的

9、UPnP 設(shè)備和方案。一個(gè)程序可以訂閱狀態(tài)的變化:當(dāng)狀態(tài)變量改變時(shí),新的狀態(tài)被發(fā)送到所有程序/ 設(shè)備已訂閱的事件。程序/設(shè)備可以訂閱一個(gè)服務(wù)的狀態(tài)變量,并簽署一個(gè)網(wǎng)址,可以發(fā)現(xiàn)所指出的位置的 URL 。 <service><serviceType>urn:dmc-samsung-com:service:SyncManag er:1</serviceType><serviceId>urn:dmc-samsung-com:serviceId:SyncManage r</serviceId><controlURL>/upnpho

10、st/udhisapi.dll?control=uuid:1d8ec 8a7-4736-4598-9950-9710c992e471+urn:dmc-samsung-com:ser viceId:SyncManager</controlURL><eventSubURL>/upnphost/udhisapi.dll?event=uuid:1d8ec 8a7-4736-4598-9950-9710c992e471+urn:dmc-samsung-com:ser viceId:SyncManager</eventSubURL><SCPDURL>/upn

11、phost/udhisapi.dll?content=uuid:bdccc2 ab-dcdf-4c18-beee-226cc7df1f94</SCPDURL></service>描述文件如:<?xml version=1.0 ?><root xmlns=urn:schemas-upnp-org:device-1-0><specVersion><major>1</major><minor>0</minor></specVersion><device><devi

12、ceType>urn:dmc-samsung-com:device:SyncServer:1</deviceType><friendlyName>QPC-20120228LBE</friendlyName&g t;<manufacturer>Samsung-Electronics</manufacturer&g t;<manufacturerURL></manufa cturerURL><modelDescription>QPC-20120228LBE-Laptop</mod elDescripti

13、on><modelName>Kies Sync Server</modelName><modelNumber>1.0</modelNumber><modelURL></modelURL&g t;<UDN>uuid:1d8ec8a7-4736-4598-9950-9710c992e471&l t;/UDN><serviceList><service><serviceType>urn:dmc-samsung-com:service:SyncManag er:1</se

14、rviceType><serviceId>urn:dmc-samsung-com:serviceId:SyncManage r</serviceId><controlURL>/upnphost/udhisapi.dll?control=uuid:1d8ec 8a7-4736-4598-9950-9710c992e471+urn:dmc-samsung-com:ser viceId:SyncManager</controlURL><eventSubURL>/upnphost/udhisapi.dll?event=uuid:1d8e

15、c 8a7-4736-4598-9950-9710c992e471+urn:dmc-samsung-com:ser viceId:SyncManager</eventSubURL><SCPDURL>/upnphost/udhisapi.dll?content=uuid:bdccc2 ab-dcdf-4c18-beee-226cc7df1f94</SCPDURL></service></serviceList></device></root>UPnP 中 ControlPoint 的基本流程1 .搜索目前網(wǎng)絡(luò)上的

16、UPnP 設(shè)備。 Control Point 生成一個(gè)MulticastSocket ,綁定多播地址50 1900 端口,然后發(fā)送一個(gè)搜索請(qǐng)求,默認(rèn)將TimeToLive 設(shè)為 4 , 該請(qǐng)求在 UPnP Device Architecture 中是如下定義的:M-SEARCH *HTTP/1.1HOST: 50:1900MAN: ssdp:discoverMX: seconds to delay responseST: search target要注意的一點(diǎn),該請(qǐng)求基于 HTTPMU ( HTTP Multicast overUDP ) ,

17、上面這些信息都是屬于 HTTP Header ,沒(méi)有 HTTPBody ,而HTTP Header 和 HTTP Body 之間是有一個(gè)空白行分隔的, 通過(guò) Socket 發(fā)送出去的時(shí)候不要忘了發(fā)送那個(gè)空白行,以后提到的消息也都請(qǐng)注意這一點(diǎn)。UPnP 設(shè)備收到該請(qǐng)求后會(huì)延時(shí)相當(dāng)于 Random.nextInt(MX)返回響應(yīng),以便Control Point 能夠有充足時(shí)間來(lái)處理請(qǐng)求;ST 是要搜索的目標(biāo),如果搜索所有的設(shè)備和服務(wù),則為ssdp:all ,如果是搜索根設(shè)備,則為upnp:rootdevice ,象大部分程序中使用 UPnP 是為了找到支持UPnP 的網(wǎng)關(guān)來(lái)動(dòng)態(tài)映射端口,則可以賦為

18、urn:schemas-upnp-org:device:InternetGatewayDevice:1 。下面是一個(gè)示例,搜索所有的根設(shè)備,這些設(shè)備收到該消息后應(yīng)該在03秒內(nèi)返回響應(yīng):M-SEARCH* HTTP/1.1HOST: 50:1900MAN: ssdp:discoverMX: 3ST: upnp:rootdevice2 .網(wǎng)絡(luò)上的UPnP設(shè)備返回響應(yīng)。如果該UPnP設(shè)備和要搜索的 UPnP 設(shè)備匹配,則該設(shè)備會(huì)返回一個(gè)響應(yīng),響應(yīng)的格式在 UPnP Device Architecture 中是如下定義的:HTTP/1.1200 OKCACHE-CONTROL

19、: max-age = seconds untiladvertisementexpiresDATE: when response was generatedEXT:LOCATION: URL for UPnP description for root deviceSERVER: OS/version UPnP/1.0 product/versionST: search targetUSN: advertisement UUIDmax-age 表示收到該消息后若干秒內(nèi)沒(méi)有收到該設(shè)備發(fā)出的任何通知消息,就認(rèn)為該設(shè)備已經(jīng)不存在網(wǎng)絡(luò)上了;LOCATION 表示該設(shè)備的描述文件, 用于確定該設(shè)備包含哪些

20、邏輯設(shè)備和哪些服務(wù)等等; USN 表示 Unique ServiceName。比如對(duì)于上面那條示例搜索消息, 我的 ADSL 返回的響應(yīng)是:HTTP/1.1 200 OKCACHE-CONTROL:max-age=1800EXT:LOCATION:38:80/IGD.xmlSERVER:SpeedTouch 510 .1 UPnP/1.0 (14E31Y7)ST:upnp:rootdeviceUSN:uuid:UPnP-SpeedTouch510-1_00-90-D0-7F-AD-37:upnp:rootdevice3 .接下來(lái)就是取得該設(shè)備的描述文件

21、,用于確定該設(shè)備信息和所支持的 功能。 通過(guò)上面的響應(yīng)信息的 LOCATION 屬性,可以得到一個(gè)URL ,可以通過(guò)HTTP 請(qǐng)求該 URL 得到該設(shè)備的描述文件。注意,僅僅在搜索和通知的時(shí)候是基于 UDP的,其余的都是基于 TCP 的。設(shè)備描述文件定義可在UPnPDevice Architecture 中找到,比較長(zhǎng)就不貼了。比如上面我的 ADSL 返回 LOCATION 是05:80/IGD.xml ,訪(fǎng)問(wèn)該地址,返回的一個(gè)XML 片斷是:<?xmlversion=1.0 ?><root xmlns=urn:schemas-upnp-or

22、g:device-1-0><specVersion><major>1</major><minor>0</minor></specVersion><URLBase>05</URLBase><device><deviceType>urn:schemas-upnp-org:device:InternetGatew ayDevice:1</deviceType><friendlyName>SpeedTouch 510(1

23、4E31Y7)</friendlyName><manufacturer>THOMSONmultimedia</manufacturer><manufacturerURL>http:/www.thomson- </manufacturerURL><modelDescription>DSL InternetGateway</modelDescription><modelName>SpeedTouch</modelName><modelNumber>510</modelNum

24、ber><modelURL></modelURL ><serialNumber>14E31Y7</serialNumber><UDN>uuid:UPnP-SpeedTouch510-1_00-90-D0-7F-AD- 37</UDN><presentationURL>/index.htm</presentationURL><serviceList><service><serviceType>urn:schemas-upnp-org:service:Layer

25、3Forw arding:1</serviceType><serviceId>urn:upnp-org:serviceId:layer3f</serviceId& gt;<controlURL>/upnp/control/layer3f</controlURL><eventSubURL>/upnp/event/layer3f</eventSubURL&g t;<SCPDURL>/Layer3Forwarding.xml</SCPDURL></service></serviceLis

26、t><deviceList></deviceList></device></root>在 UPnP 規(guī)范中規(guī)定,一個(gè)設(shè)備可以包含若干的嵌入設(shè)備和服務(wù)。 比如對(duì)于最常用到的 InternetGateway Device 中, UPnPInternetGatewayDevice 模板中規(guī)定可以看到在根設(shè)備中包含了 Layer3 Forwarding Service 和兩個(gè)嵌入設(shè)備: WANDevice 和 LANDevice ,而 WANDevice 下面又包含了若干 WANConnectionDevice 等等。4 .得到設(shè)備所提供的服務(wù)描述

27、。在剛才的設(shè)備描述中有一個(gè)ServiceList 節(jié)點(diǎn),該節(jié)點(diǎn)下每個(gè)Service 節(jié)點(diǎn)都包含一個(gè)SCPDURL 節(jié)點(diǎn),這個(gè)就是服務(wù)描述文件所在的位置,比如上面我的 ADSL 中 Layer3 Forwarding Service 服務(wù)描述文件的位置就是/Layer3Forwarding.xml ,再組合 URLBase 節(jié)點(diǎn)屬性值 05 ,即得到該服務(wù)描述文件URL 為05/Layer3Forwarding.xml ,該文件詳細(xì)的描 述了該服務(wù)所提供的操作列表以及相應(yīng)的參數(shù)和參數(shù)范圍。5 .調(diào)用服務(wù)所提供的操作。調(diào)用是通過(guò)發(fā)

28、送相應(yīng)SOAP 消息到該服務(wù)的控制 URL 上來(lái)完成的。該信息在UPnP DeviceArchitecture 中是如下定義的:POST path of control URL HTTP/1.1HOST: host of control URL:portof control URLCONTENT-LENGTH: bytes in bodyCONTENT-TYPE: text/xml; charset=utf-8SOAPACTION:urn:schemas-upnp-org:service:serviceType:v#actionName<s:Envelopexmlns:s=http:/s

29、/soap/envelope/s:encodingStyle=/soap/encoding/& gt;<s:Body><u:actionNamexmlns:u=urn:schemas-upnp-org:service:serviceType:v><argumentName>in argvalue</argumentName>otherin args and their values go here, if any</u:actionName><

30、/s:Body></s:Envelope>就用在 IGD 設(shè)備上增加端口映射這個(gè)操作來(lái)舉例, 將網(wǎng)關(guān)的5678 端口映射到內(nèi)網(wǎng) 的 8765 端口,該操作被發(fā)送的 SOAP 消息如下:POST/upnp/control/wanpppcpppoe HTTP/1.0CONTENT-TYPE: text/xml; charset=utf-8HOST: 05:80CONTENT-LENGTH: 649SOAPACTION:urn:schemas-upnp-org:service:WANPPPConnection:1#AddPor tMappin

31、g<?xmlversion=1.0 encoding=utf-8?><s:Envelopexmlns:s=/soap/envelope/s:encodingStyle=/soap/encoding/& gt;<s:Body><u:AddPortMappingxmlns:u=urn:schemas-upnp-org:service: WANPPPConnection:1><NewRemoteHost></NewRemoteHost>

32、<NewExternalPort>5678</NewExternalPort><NewProtocol>tcp</NewProtocol><NewInternalPort>8765</NewInternalPort><NewInternalClient></NewInternalClient><NewEnabled></NewEnabled><NewPortMappingDescription></NewPortMappingDes cription><NewLeaseDuration></NewLeaseDuration></u:AddPortMapping></s:Body></s:Envelope>操作成功,設(shè)備的返回值是:HTTP/1.0200

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論