Platinum UPnP
http://www.plutinosoft.com/platinum
http://blog.csdn.net/lancees/article/details/9178385
Note that Platinum SDK links with Neptune C++ Runtime
UpnP 包含一下五个基本部分/阶段(Phases):
1、发现(Discovery):这是第一阶段,控制点搜索设备和服务,类似的,设备广播他
所能提供的服务通告。
2、描述(Description):一旦控制点发现了他感兴趣的设备或服务,他将请求该设备提
供该设备本身、其他组件成员设备以及他们提供的服务的完整描述。
3、控制(Control):本阶段允许控制点通过改变设备的状态来控制设备上提供的一个或
多个服务。
4、事件(Eventing):本阶段允许控制点与其感兴趣的服务状态保持同步,控制点向事
件服务器订阅一个特定的服务,当该服务状态改变时,接收事件通告。
5、表示(Presentation):表示阶段允许设备保持一份文档,该文档采用标准 HTML 语言
编写,他可以是该设备的一个用户界面。
1.1.1、发现(Discovery)
在发现阶段,控制点采用 SSDP(简单服务发现协议:Simple Service Discovery
Protocol)发现设备和服务而设备采用 SSDP 向控制点宣告他们的存在。SSDP 采用 HTTP 的
一种变体以 UDP 多播的方式来进行广播,并采用另一种 HTTP 变体通过 UDP 单播来进行应
答。
一个设备可能包含其他设备,每个设备都有他自己的服务。设备采用其类型和一个唯一
的标志符来进行标识。服务则用他们的类型来标识。
为了搜索网络上的设备或服务,控制点使用 UDP 多播包向地址 239.255.255.250:1900 发送
HTTP 的 M-SEARCH 命令。任何网络上服务控制点搜索条件的设备发回一个 UDP 单播进行
应答,该应答中包含了指向其描述文档(参加 1.1.2 节)的 URL 地址。如果一个控制点收到
一个或多个可接受的应答,他将转入描述阶段(description phase).
一个控制点发出一个搜索请求时,该请求在 SSDP 头中包含了他愿意等待的时间长度。匹配
的设备将在响应之前随机等待一段时间(原因?),该时间介于 0 和控制点指示的时间之间。如果控制点
在他的搜索时间超时之前没有收到任何应答,他就认为当前网络上没有匹配的设备。
设备没必要等待控制点来搜索他们的服务。他们可以采用向 239.255.255.250:1900 多播地址发
送 SSDP 的 NOTIFY 命令来宣告他们的设备可用性。当控制点获得该 NOTIFY 多播,他们就可以
使用标准的 HTTP GET 命令来向 NOTIFY 消息中提供的 URL 地址发出请求以获得设备的描述文
档。设备必须在他们的服务不可用时发出一个通告信息。
1.1.2、描述(Description)
当控制点定位一个服务后他希望了解更多,因而他将请求描述文档。描述是一个
XML 文档用来描述一个设备,包括:
● 制造商信息,版本,其他。
● 可被设备采用的图标的 URL 地址。
● 嵌入式设备列表。
● 设备提供的服务列表。
想得到关于描述文档的格式的更多信息,请参见文档《Universal Plug and Play
Device Architecture》(《通用即插即用设备架构》)。
控制点采用基于TCP的HTTP来请求描述文档。控制点执行标准的HTTP GET命令(与检索
Web页面类似)。在服务器端,设备运行一个标准的HTTP服务--可以是完全的Web服务器如
Apache也可以是迷你服务器。描述文档中的很多条目都是URL地址。这些条目也使用HTTP/TCP
检索。
1.1.3、控制(Control)
一旦一个控制点发现了一个设备并且检索到他的描述文档,他可能需要控制该设备包含的
一个或多个服务。简单对象访问协议(SOAP:Simple Object Access Protocol)允许一个访
问点查询或改变服务状态表中的元素。SOAP使用基于TCP传输HTTP的POST和M-POST命令。
SOAP使用XML来说明采取的活动。控制点如描述文档里指定的那样为服务创建XML文档并将
其提交给控制URL。控制点能请求服务状态表中的当前值并改变他们。
在服务器端,控制服务器等待控制请求。控制服务器是一个实现了SOAP协议的类似于HTTP
服务器的服务器。一个设备能运行多于一个控制服务器,这取决于设备提供的服务的组合。
1.1.4、事件(Eventing)
一个控制点发现一个设备并检索到他的描述后,他能保持设备提供的服务的状态信息。感
兴趣的控制点为特定服务订阅了从描述文档中发现的设备事件提醒服务URL。一个事件提醒在
任何服务状态改变的时候发送给控制点,即使这次改变是由该控制点产生的。
订阅和退订请求使用HTTP/TCP连接到事件URL,该URL包含在服务的描述文档中。在订阅时,
控制点指定一个事件提醒的URL。事件以HTTP/TCP方式到达为服务注册的URL。事件提醒包含
一个小型的XML文档,该文档描述了实际的事件,如服务状态表的改变。
在服务器端,一个事件服务器等待订阅和退订请求。事件服务器是一个类HTTP服务器的实
现通用事件提醒架构协议(GENA:General Event Notification Architecture)的服务器。
一个设备将可能根据设备提供的服务的组合(情况)必须运行多于一个的事件服务器。
1.1.5、表示(Presentation)
由于设备需要或支持用户交互,在表示阶段一个控制点能下载一个为设备描述用户界面的
HTML文档。这是一个能提供一种控制或状态显示的标准HTML文档。
如检索描述文档一样,检索表示文档的协议也是基于TCP的HTTP协议。控制点使用描述文档
中包含的表示URL来请求表示文档。不是所有设备都拥有表示文档也不是所有控制点能够显示
包含复杂HTML对象如框架,嵌入式Java applets等的表示文档。
NDK下 将Platinum SDK 编译成so库 (android - upnp)
http://blog.csdn.net/lancees/article/details/8789678
基于Platinum库的DMR实现(android)
http://blog.csdn.net/lancees/article/details/8951679
基于Platinum库的DMS实现(android)
http://blog.csdn.net/lancees/article/details/9865411
Platinum UPnP的更多相关文章
- NDK下 将Platinum SDK 编译成so库 (android - upnp)
Platinum UPnP SDK 是一个跨平台的C++库,利用该库,可以很容易就构建出DLNA/UPnP控制点(DLNA/UPnP Control Point)和DLNA/UPnP设备(DLNA/U ...
- 基于Platinum库的DMS实现(android)
接上篇博文:基于Platinum库的DMR实现(android) 文章讲述了如何使用Platinum库实现DMR 今天同样使用该库,来讲解一下DMS的实现 关于该库如何编译,请参考这篇博文:NDK下 ...
- 关于Platinum库的MediaRender具体C++代码实现探讨
接上篇博文 NDK下 将Platinum SDK 编译成so库 (android - upnp) 讲述了如何利用该代码库编译给android程序调用的so库,其中也提到了,在使用sample-upnp ...
- 提升网速的路由器优化方法(UPnP、QoS、MTU、交换机模式、无线中继)
在上一篇<为什么房间的 Wi-Fi 信号这么差>中,猫哥从微波炉.相对论.人存原理出发,介绍了影响 Wi-Fi 信号强弱的几大因素,接下来猫哥再给大家介绍几种不用升级带宽套餐也能提升网速的 ...
- Linux下UPnP sample分析
一.UPnP简介 UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术,建立在TCP/IP.HTTP协 ...
- 浅析UPnP协议
摘要:文章介绍了UPnP结构规范和开发流程,指出:UP nP协议使所有联网的设备实现互联,设备工作不需要传统的驱动程序,便可以实现设备间的 相互控制. 关键词:UPnP协议:开发流程:电子技术:工作 ...
- Upnp资料整理
系统,软件和路由器都要打开upnp功能. windows7下,分别启动 function discovery resources publication; Upnp device host; SSDp ...
- Mac下安装UPnP Inspector
由于工作中需要用到UPnP Inspector这个工具,而这个工具在windows下安装非常简单,在Mac下安装却很麻烦,在此记录安装流程. 这个工具依赖于两个其他的库:Coherence(一个DLN ...
- C# upnp
//获取Host Name var name = Dns.GetHostName(); Console.WriteLine("用户:" + name); //从当前Host Nam ...
随机推荐
- Python168的学习笔记6
如何派生内置不可变类型并修改实例化行为. 个人理解,如何派生出自己想要的类. class IntTuple(tuple): def __new__(cls,iterable): g = (x for ...
- 丢失或损坏NDF文件如何附加数据库
在论坛看到有人遇到 NDF文件丢失并且没有备份,所以无法成功附加数据库.在网上也看到过很多回答是如果没有NDF就无法附加成功. 其实我自己测试下来即使没有NDF也是可以成功附加的.但是有条件,丢失的N ...
- 修改WampServer的默认端口
WampServer默认的安装端口是80,容易和已安装的ISS等其他服务冲突,导致WampServer无法启动. 无法启动的现象如下: 1.apache服务无法启动.问题所在:80端口冲突. 2.在浏 ...
- strace_for_windows
http://drmemory.org/strace_for_windows.html https://github.com/intellectualheaven/stracent/releases
- 用Qemu模拟vexpress-a9 (七) --- 嵌入式设备上安装telnet服务
转载: http://blog.csdn.net/liuqz2009/article/details/6921789 Telnet协议是登陆远程网 络主机最简单的方法之一,只是安全性非常低.对targ ...
- 让一个view 或者控件不支持拖拽
让一个view 或者控件不支持拖拽: dragView.userInteractionEnabled = NO;
- iOS News Reader开源项目
项目介绍 NewsReader项目是一个新闻阅读类开源项目,支持iPhone和iPad. 目前基于该项目并且已发布到App Store的产品有: VOA慢速英语和每天6分钟英语等 项目源码地址:htt ...
- 利用UIWebView获取userAgent需要注意的地方
网络通信有时候需要传递参数userAgent,iOS中获取userAgent很简单. UIWebView* webView = [[UIWebView alloc] initWithFrame:CGR ...
- 编译打包工具sbt的镜像设置
sbt可以和maven共用一个镜像,公司内部有的自然最后不过 创建文件:~/.sbt/repositories [repositories] local aliyun: http://maven.al ...
- 我所遭遇过的游戏中间件--PhysX
我所遭遇过的游戏中间件--PhysX PhysX现在是Nvidia的物理中间件.其特点是简练且功能强大.当我最初拿到PHYSX的SDK时,就发现这个物理中间件比Havok要小很多,但该有的功能都有,甚 ...