由第一篇文章我们大致了解了DLNA的基本概念以及与UPnP的关系,本文主要介绍一下UPnP协议的基本组件和AV架构。


1.  UPnP协议组成


UPnP协议中,定义了两个主要的组件,一个是设备(Device),一个是控制点(Control Point)。这就是为什么很多UPnP协议栈的SDK的接口代码一般都主要由Device和Control Point构成。设备是在网络中可见的对象,而控制点在网络中不可见。


一个UPnP的设备(Device)是不能直接访问和控制另一个UPnP的设备(Device)的,对设备的访问和控制都必须通过控制点(Control Point)来代为完成。而控制点对设备的控制则主要是由设备定义的“服务”(Service)来实现。


设备(Device)需要向网络中广播自己的信息,并提供设备描述和服务(Service)描述,并发送设备事件消息.


控制点(Control Point)则是搜索设备,并使用其提供的服务(Service)访问和控制设备,同时监听设备事件消息。


2. 典型的UPnP AV应用架构


wKiom1U45h_x1rP4AAESqPv2zVk980.jpg


如图所示是一种典型的UPnP AV应用架构,它来自《UPnP-av-AVArchitecture》。在一个典型的UPnP应用中,有三个主体,一个服务器(MediaServer),一个播放器(MediaRender),以及一个控制点(Control Point)


服务器(MediaServer)主要负责提供多媒体文件的浏览和控制。

播放器(MediaRender)主要负责提供播放和渲染。

控制点(Control Point)则控制整个播放过程。


它们三个在物理上可以是同一个设备,当然,也可以在不同的设备上。


对应到UPnP协议组件的话,“MediaServer”和“MediaRnederer”都属于UPnP的Device。


“ContentDirectory”、“ConnectionManager”、“AVTransport”、“RenderingControl”这些都属于UPnP设备所提供的服务(Service),通过这些服务描述,Control Point就知道该如何访问和控制设备了。


3.  UPnP的设备描述和服务描述


UPnP的设备(Device)是通过广播包来通知局域网中的控制点自己的设备信息和服务的,而这些设备信息和服务都必须根据UPnP协议规定的XML文档格式来编写,UPnP提供了标准的模板可以参考,具体的文档地址:


http://upnp.org/sdcps-and-certification/standards/sdcps/


由这些文档我们可以看到,UPnP官网为我们定义了12种设备,在每种设备的文档中详细地定义了设备描述XML如何编写,定义了每种设备需要实现哪些服务,每种服务的XML文档如何编写。


到这里,我们其实可以看到,实现一个上述的UPnP AV应用也并没有那么可怕,一切都是有章可循的,我们需要做的就是熟读协议所定义了一系列文档。


4.  UPnP的工作原理


关于UPnP协议的工作原理,网上有许多文章介绍得很详细,例如:


《UPnP协议编程实践》


http://www.ibm.com/developerworks/cn/linux/other/UPnP/part1/


http://www.ibm.com/developerworks/cn/linux/other/UPnP/part2/


个人比较推荐直接阅读协议的官方文档,讲的非常详细:


《UPnP-arch-DeviceArchitecture-v2.0》


《UPnP-av-AVArchitecture》


5. 小结


关于UPnP协议的基本组成和AV架构就介绍到这里了,后续文章将会进一步介绍如何针对UPnP协议开发应用,有任何疑问欢迎留言或者来信lujun.hust@gmail.com交流。