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 ...
随机推荐
- 读书笔记_Effective_C++_条款三十八:通过复合塑模出has-a或者is-implemented-in-terms-of
如果说public是一种is-a的关系的话,那么复合就是has-a的关系.直观来说,复合就是在一个类中采用其他类的对象作为自身的成员变量,可以举个例子,像下面这样: class Person { pr ...
- Git提交空文件夹的技巧
这个只能说是技巧不能说是方法,原理是在每个空文件夹新建一个.gitignore文件,然后提交. 快捷命令: find . -type d -empty -exec touch {}/.gitignor ...
- maven打包出错: Failed to clean project: Failed to delete
maven打包出错: Failed to clean project: Failed to delete 出现这种错误,通常是由于您已启动了另一个tomcat 进程,导致报错,关闭tomcat进程即可 ...
- 《C预处理》Linux内核中可变参数宏的用法
http://blog.csdn.net/tankai19880619/article/details/12015305
- python性能优化建议
参考: https://segmentfault.com/a/1190000000666603 http://blog.csdn.net/zhoudaxia/article/details/23853 ...
- java多线程实现主线程等待子线程执行完问题
本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明: 1.使用Thread的join()方法,join()方法会阻塞主线程继续向下执行. 2.使用Java.util.concurrent中的C ...
- android应用名称设置的问题
<application android:label="@string/app_name1" <activity and ...
- [翻译] FreeStreamer 在线流媒体播放
FreeStreamer https://github.com/muhku/FreeStreamer Introduction FreeStreamer is an audio player engi ...
- C++经典排序算法总结
转发请注明出处:https://www.cnblogs.com/fnlingnzb-learner/p/9374732.html 最近在研究一些经常用到的东西想把它们做一个汇总,想了想用到最多的应该是 ...
- 【计算机网络】详解网络层(二)ARP和RARP
ARP ARP(Address Resolution Protocol,地址解析协议)是将IP地址解析为以太网MAC地址(物理地址)的协议.在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设 ...