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的更多相关文章

  1. NDK下 将Platinum SDK 编译成so库 (android - upnp)

    Platinum UPnP SDK 是一个跨平台的C++库,利用该库,可以很容易就构建出DLNA/UPnP控制点(DLNA/UPnP Control Point)和DLNA/UPnP设备(DLNA/U ...

  2. 基于Platinum库的DMS实现(android)

    接上篇博文:基于Platinum库的DMR实现(android) 文章讲述了如何使用Platinum库实现DMR 今天同样使用该库,来讲解一下DMS的实现 关于该库如何编译,请参考这篇博文:NDK下 ...

  3. 关于Platinum库的MediaRender具体C++代码实现探讨

    接上篇博文 NDK下 将Platinum SDK 编译成so库 (android - upnp) 讲述了如何利用该代码库编译给android程序调用的so库,其中也提到了,在使用sample-upnp ...

  4. 提升网速的路由器优化方法(UPnP、QoS、MTU、交换机模式、无线中继)

    在上一篇<为什么房间的 Wi-Fi 信号这么差>中,猫哥从微波炉.相对论.人存原理出发,介绍了影响 Wi-Fi 信号强弱的几大因素,接下来猫哥再给大家介绍几种不用升级带宽套餐也能提升网速的 ...

  5. Linux下UPnP sample分析

        一.UPnP简介   UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术,建立在TCP/IP.HTTP协 ...

  6. 浅析UPnP协议

    摘要:文章介绍了UPnP结构规范和开发流程,指出:UP nP协议使所有联网的设备实现互联,设备工作不需要传统的驱动程序,便可以实现设备间的 相互控制. 关键词:UPnP协议:开发流程:电子技术:工作 ...

  7. Upnp资料整理

    系统,软件和路由器都要打开upnp功能. windows7下,分别启动 function discovery resources publication; Upnp device host; SSDp ...

  8. Mac下安装UPnP Inspector

    由于工作中需要用到UPnP Inspector这个工具,而这个工具在windows下安装非常简单,在Mac下安装却很麻烦,在此记录安装流程. 这个工具依赖于两个其他的库:Coherence(一个DLN ...

  9. C# upnp

    //获取Host Name var name = Dns.GetHostName(); Console.WriteLine("用户:" + name); //从当前Host Nam ...

随机推荐

  1. bzoj 1901: Zju2112 Dynamic Rankings -- 主席树,树状数组,哈希

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MB Description 给定一个含有n个数的序列a[1] ...

  2. SyncTrayzor -- Windows tray utility / filesystem watcher / launcher for syncthing

    SyncTrayzor is a little tray utility for Syncthing on Windows. It hosts and wraps Syncthing, making ...

  3. How to check Ubuntu version

    Below you can find some tips on how to check Ubuntu version you are currently running. The first pla ...

  4. WP8.1 VS iOS VS Android全方面大比拼

    众所周知,苹果的OS和谷歌的Android系统都有着相对成熟的设计和较好的用户体验,而随着WP8.1的发布,微软WP系统在交互方面也有了很多改进和提升,而今天小编便为大家全面对比一下这三大系统.   ...

  5. 用显微镜观察cpu芯片内部

    1. 先找到一块Intel公司的奔三(Pentium III)Coppermine芯片,主频800MHZ,生产于2000年.(我查了一下,网上的报价现在是15~30元人民币/块.) 下面是这块CPU的 ...

  6. redis分布式锁redisson

    原文:https://blog.csdn.net/Kincym/article/details/78697472 关于redisson的源代码请参考官网:https://github.com/redi ...

  7. [Erlang 0004] Centos 源代码编译 安装 Erlang

    原文地址: http://www.cnblogs.com/me-sa/archive/2011/07/09/erlang0004.html 由于最终部署的生产环境是Centos,所以我需要在Cento ...

  8. 15个具有高度影响力的Apache开源项目

    自1999年创立以来,Apache软件基金会如今已成了众多重要的开源软件项目之家.其中成功的项目有Geronimo,有Tomcat,有Hadoop,有如今成了大数据王国关键车毂的分布式计算系统. 虽然 ...

  9. android 内存溢出oom错误的一些小见解

    转:http://blog.csdn.net/xuhui_7810/article/details/9493681 我们在代码里调用setBackgroundResource(int resid)来设 ...

  10. 使用StringBuilder或StringBuffer简单优化

    使用StringBuilder或StringBuffer // join(["a", "b", "c"]) -> "a an ...