DLNA第一步UPnP协议栈_第1页
DLNA第一步UPnP协议栈_第2页
DLNA第一步UPnP协议栈_第3页
DLNA第一步UPnP协议栈_第4页
DLNA第一步UPnP协议栈_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DLNA 第一步 UPnP 协议栈前面公司有DLNA 项目, 研究了一下, 在网上关于DLNA的资源很少,就将自己的心得写出来,以供参考。其它的关于DLNA 的介绍就不多说,要了解DLNA 需要了解 upnp, 因为DLNA 在 upnp 之上,初学者可以从 下载 upnp 的资料 .也欢迎大家加入197683240 DLNA 交流群。upnp 分为四步:发现 、描述 、控制 、事件 发现当一个 UPnP 的设备加入网络,并想知道什么 UPnP 服务在网络上可用,它发送一个发现消息多播地址50端口 1900 通过 UDP 协议。此消

2、息包含一个头,类似于一个HTTP 请求。 该协议有时被称为为 HTTPU( HTTP 通过 UDP ) :M-SEARCH * HTTP/1.1ST: upnp:rootdeviceMX: 3MAN: ssdp:discover 所有其他 UPnP 设备或方案都必须回应此消息类似的消息发送回设备,使用 UDP 单播,宣布该设备或程序实现的 UPnP 型材。 一个有趣的怪癖: 发送 UDP 单播设备发现消息被送往港口。对于每一个配置文件,它实现发送一条消息: 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 功能的设 备或程序发送一条消息,宣布他们的服务。一个通知消息是或多或少相同, 但发现响应消息发送到 50 组播地址通过 UDP 1900端口上的 UPnP有ST头,取而代之的是一个类似头 NT 头。 描述每个配置文件提供了本身的描述和它提供的服务,并通过XML 提供。从发现阶段的响应消息中包含一个头称为位置(不区分大小写) , 这是一个 XML 格式的文件可以下载的网址。这个文件描述(或相当:应说明)配置文件,设备或计划实施,控制和事件相应命令发送到专门的网址,但也可能是其他有关设备的元信息,如图标,这应该是显示 Windows资源管理器,设备制

5、造商,依此类推。 有没有这个头文件的默认值。事实上,在一些设备,尤其是对一个Broadcom芯片为基础的,它被设置在启动时动态。唯一的方法是完全肯定的是永远做设备发现。控制在该协议的第三步是“控制” :设备或程序可以要求其他设备或程序执行客户的名义采取行动,使用 SOAP 。 SOAP 是 一个协议,运行在HTTP 上使用 XML 来描述远程过程调用服务器和从这些调用的返回结果。 SOAP 主要用于基于网络的服务。 对于每一个主要的编程语言库, 可以用来实现SOAP请求和处理SOAP 响应。 请求服务是通过发送一个SOAP请求到正确的参数,所谓的“控制 URL ”的控制点。为控制特定的配置文件

6、的 URL 地址, 可以发现在XML 文件的 URL在 Location 头从描述阶段发现内的 <service> 标签。 配置 文件标记看起来像这样: <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>只发送 SOAP 请求 URL 内 controlURL 标签是必要的。这取决于哪些行动可以执行的配置文件。在在 SCPDURL 标记的URL 的 URL 是所谓的 “服务描述的 URL ”。 它描述了 SOAP 方法可以进行该配置什么所谓的状态变量配置文件。在这个文件是什么,应符合设备提供服务,但在实践中,他们似乎总是不相匹配。 事件UPnP 中有这样的概念,被称为“状态变量” 。这些变量,因为这个名字说,用于保持某种形式的状态中的

9、UPnP 设备和方案。一个程序可以订阅状态的变化:当状态变量改变时,新的状态被发送到所有程序/ 设备已订阅的事件。程序/设备可以订阅一个服务的状态变量,并签署一个网址,可以发现所指出的位置的 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 .搜索目前网络上的

16、UPnP 设备。 Control Point 生成一个MulticastSocket ,绑定多播地址50 1900 端口,然后发送一个搜索请求,默认将TimeToLive 设为 4 , 该请求在 UPnP Device Architecture 中是如下定义的:M-SEARCH *HTTP/1.1HOST: 50:1900MAN: ssdp:discoverMX: seconds to delay responseST: search target要注意的一点,该请求基于 HTTPMU ( HTTP Multicast overUDP ) ,

17、上面这些信息都是属于 HTTP Header ,没有 HTTPBody ,而HTTP Header 和 HTTP Body 之间是有一个空白行分隔的, 通过 Socket 发送出去的时候不要忘了发送那个空白行,以后提到的消息也都请注意这一点。UPnP 设备收到该请求后会延时相当于 Random.nextInt(MX)返回响应,以便Control Point 能够有充足时间来处理请求;ST 是要搜索的目标,如果搜索所有的设备和服务,则为ssdp:all ,如果是搜索根设备,则为upnp:rootdevice ,象大部分程序中使用 UPnP 是为了找到支持UPnP 的网关来动态映射端口,则可以赋为

18、urn:schemas-upnp-org:device:InternetGatewayDevice:1 。下面是一个示例,搜索所有的根设备,这些设备收到该消息后应该在03秒内返回响应:M-SEARCH* HTTP/1.1HOST: 50:1900MAN: ssdp:discoverMX: 3ST: upnp:rootdevice2 .网络上的UPnP设备返回响应。如果该UPnP设备和要搜索的 UPnP 设备匹配,则该设备会返回一个响应,响应的格式在 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 表示收到该消息后若干秒内没有收到该设备发出的任何通知消息,就认为该设备已经不存在网络上了;LOCATION 表示该设备的描述文件, 用于确定该设备包含哪些

20、逻辑设备和哪些服务等等; USN 表示 Unique ServiceName。比如对于上面那条示例搜索消息, 我的 ADSL 返回的响应是: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 .接下来就是取得该设备的描述文件

21、,用于确定该设备信息和所支持的 功能。 通过上面的响应信息的 LOCATION 属性,可以得到一个URL ,可以通过HTTP 请求该 URL 得到该设备的描述文件。注意,仅仅在搜索和通知的时候是基于 UDP的,其余的都是基于 TCP 的。设备描述文件定义可在UPnPDevice Architecture 中找到,比较长就不贴了。比如上面我的 ADSL 返回 LOCATION 是05:80/IGD.xml ,访问该地址,返回的一个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 规范中规定,一个设备可以包含若干的嵌入设备和服务。 比如对于最常用到的 InternetGateway Device 中, UPnPInternetGatewayDevice 模板中规定可以看到在根设备中包含了 Layer3 Forwarding Service 和两个嵌入设备: WANDevice 和 LANDevice ,而 WANDevice 下面又包含了若干 WANConnectionDevice 等等。4 .得到设备所提供的服务描述

27、。在刚才的设备描述中有一个ServiceList 节点,该节点下每个Service 节点都包含一个SCPDURL 节点,这个就是服务描述文件所在的位置,比如上面我的 ADSL 中 Layer3 Forwarding Service 服务描述文件的位置就是/Layer3Forwarding.xml ,再组合 URLBase 节点属性值 05 ,即得到该服务描述文件URL 为05/Layer3Forwarding.xml ,该文件详细的描 述了该服务所提供的操作列表以及相应的参数和参数范围。5 .调用服务所提供的操作。调用是通过发

28、送相应SOAP 消息到该服务的控制 URL 上来完成的。该信息在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 设备上增加端口映射这个操作来举例, 将网关的5678 端口映射到内网 的 8765 端口,该操作被发送的 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>操作成功,设备的返回值是:HTTP/1.0200

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论