一些概念
UPnP: Universal Plag and Play,通用即插即用
URN : Uniform Resource Name,统一资源名称,用于定位服务,与地址无关
URL : Universal Resource Location,统一资源定位符,一般是一个链接形式,如:http://219.231.158.236:49152/tvdevicedesc.xml
URI : Uniform Resource Indentifier,统一资源标识符, URN和URL都属于URI,不过在UPNP中,没有URI
UDN : Unique Device Name,唯一设备名,格式为 uuid:Upnp-string 例如: uuid:Upnp-TVEmulator-1_0-1234567890001
SID : Subscribe ID,订阅注册号 格式为uuid:8-4-4-4-12 例如: uuid:920ebc56-594c-11e6-81a4-9c1bd9c2d948
DeviceType : 设备类型,如: urn:schemas-upnp-org:device:tvdevice:1
friendlyName : 设备友好名称,主要是方便用户记忆,比长串的设备类型字符串好多了
SCPDURL : 服务的URL,如 :http://219.231.158.236:49152/tvcontrolSCPD.xml
serviceType : 服务类型,以urn标示,如:urn:schemas-upnp-org:service:tvcontrol:1
ServiceID : 服务ID号,如: urn:upnp-org:serviceId:tvcontrol1
CP:control point,控制点
UPnP
UPnP原理(2014-03-21 16:02): http://blog.youkuaiyun.com/hjx5200/article/details/21723019
这篇博客讲解了基本的ControlPoint(控制点)与设备之间的控制结构
介绍了基本UPnP控制的流程(设备编址注册-->发现-->描述-->控制-->事件-->表达)
UPnP的工作过程(2013-11-10 15:38): http://www.cnblogs.com/lcw/p/3416730.html
这篇博客将6个步骤讲得非常详细,要仔细阅读
UPnP分为6个步骤:
先是Addressing,设备加入网络,通过DHCP或者Auto-IP获得IP;这部分在闪联IGRS中是没有定义的。
然后是Discovery,采用SSDP协议(UDP),用multicast/unicast可以完成设备的上线和离线通知和组播搜索设备,设备用unicast(单播,UDP)响应CP的搜索。
往下是Description,通过HTTP协议(TCP)取回来是一个XML文档,包含物理描述和服务描述;
再来是Control,采用SOAP协议(HTTP/TCP),完成CP和devices之间的交互;
Eventing,采用GENA协议(HTTP/TCP),完成设备事件消息的订阅和推送,为保证可靠性,故是TCP传输;事件的推送还有multicast (UDP)。
最后是Presentation。UPnP并没有定义Presentation应该有哪些东西。一个HTML嘛,哪样写得好哪样来!
使用到的协议
SSDP协议(Simple Service Discovery Protocol,简单服务发现协议),允许上线的设备发布广播,通知CP自己拥有的服务.当一个cp进入网络后,SSDP协议允许它搜索网络上的可用设备.SOAP协议(Simple Object Access Protocol,简单对象访问协议),允许CP向设备的ControlURL发送操作请求,SOAP协议含有消息body,包含Action invocation,指示如何控制设备
GENA协议(General Event Notification Architecture,普通事件通知体系),允许CP和设备之间进行订阅消息
DLNA
DLNA介绍(2011-05-03 16:49): http://blog.youkuaiyun.com/musiccow/article/details/6387603
主要讲了DLNA(Digital Life Networking Alliance,数字生活网络联盟)为什么要了解DLNA呢,因为我们所使用的UPnP协议技术,最初是为DLNA服务的,属于其中一层
很多设备的描述标准也是DLNA制定的.
UPnP 构成了其设备发现&控制,媒体管理和远程UI这一层(很重要的一层)
设备描述和服务描述
关于设备描述和服务描述文件(2015-01-08 20:13): http://blog.youkuaiyun.com/deyangliu/article/details/42529233
设备描述文件(devicedesc.xml)定义设备,以及设备所提供的服务种类
服务描述文件(service_SCDP.xml)定义服务所需要的动作和服务所涉及的变量,状态等..
libupnp库
具体到libupnp的使用,这里有几篇:
官网link: http://pupnp.sourceforge.net/ARM Linux下UPnP使用(2012-06-24 18:42): http://blog.youkuaiyun.com/yanghao23/article/details/7684860
UPnP编程(2012-11-22 15:17)(很详细很好): http://blog.youkuaiyun.com/crazyman2010/article/details/8212513
编译与sample实验(2013-03-07 11:20): http://blog.youkuaiyun.com/shuaijinrong/article/details/8645668