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 ...
随机推荐
- mac os 切换网络优先级
升级到新系统OS X Yesemite 系统后有WIFI时会默认使用WIFI而不是有线. 但是公司的WIFI基本没法用,每次到公司之后就得把WIFI关掉,回家又打开,烦死了. 今天研究了下原来网络优先 ...
- ZOJ 3632 K - Watermelon Full of Water 优先队列优化DP
K - Watermelon Full of Water Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%lld &am ...
- Git_远程仓库
到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了. 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了,没看出Gi ...
- [置顶] iOS中让省略号垂直居中
在显示等待框时,一般要求在提示信息后面加个省略号,但中文输入法下输入的省略号是在底部对齐,但中 文的习惯是省略号垂直居中对齐,最后找到下面这个方法来显示垂直居中的省略号: 中文和英文输入法下一样: o ...
- Polly简介 — 1. 故障处理策略
Polly 是 .Net 下的一套瞬时故障处理及恢复的函式库,可让开发者以fluent及线程安全的方式来应用诸如Retry.Circuit Breaker.Timeout.Bulkhead Isola ...
- lol匹配算法
这是Riot的Design Director Tom Cadwell专门为中国玩家写的解说匹配系统工作原理的帖子. 同一时候为了让大家更好的理解匹配系统,假设您认为您遇到了特别不公平的匹配,请回复游戏 ...
- D-U-N-S申请流程
1.打开D-U-N-S官网 http://fedgov.dnb.com/webform 图一 2.占击页面的“Click here to request your ......” (如图一红框所示)进 ...
- java多线程知识点汇总(一)多线程基础
1.什么叫多线程程序? 答:一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序. java编写的程序都是多线程的,因为最少有俩线程,main主线程和gc线程. ...
- ios 中是否每一个对象(尤其是在使用多线程时),都要判断一下对象是否为nil,以防止程序闪退?
如下所示: Class messageClass = (NSClassFromString(@"MFMessageComposeViewController")); if (mes ...
- Oracle 快速插入1000万条数据的实现方式
1.使用dual配合connect by level create table BigTable as select rownum as id from dual connect by level & ...