论文导读:使用UPnP协议不需要设备驱动程序。UPnP设备工作过程由设备寻址、设备发现、设备描述、设备控制、设备事件、设备表征几部分构成。下面重点介绍GetProtocolInfo、RendererControl、PrepareForConnection、SetAVTransportURI、Play等操作的设计与实现。它用来针对不同的请求类型生成不同的SOAP内容体和信封格式。
关键词:UPnP,设备控制,SOAP,设计与实现
1. 引言
UPnP是通用即插即用(UniversalPlug and Play)的缩写,主要用于实现设备的智能互联互通。在结合了UPnP技术的设备以物理形式连接到网络中之后,它们可以通过网络自动彼此连接在一起,而且连接过程无需用户的参与和使用中央服务器 [4] 。使用UPnP协议不需要设备驱动程序,因此使用UPnP建立的网络是介质无关的,它可以运行在几乎所有的操作系统平台之上,可使用C,C++,JAVA和VB等开发语言,可方便地构建设备相互联通的网络环境。
2. UPnP-AV媒体播放系统概述
UPnP提供的媒体播放系统体系结构定义了基本的AV设备和服务模板,说明了UPnP控制点和 UPnP-AV设备之间的整体关系,支持多种设备类型、内容格式及传输协议。一个UPnP控制点控制多个设备完成所需工作,但这些设备与控制点之间的相互作用都是独立的,控制点协调各台设备,使其成为一个整体。
1.1 UPnP设备控制的过程
UPnP设备工作过程由设备寻址、设备发现、设备描述、设备控制、设备事件、设备表征几部分构成,其核心部分就是设备控制。免费论文参考网。
设备控制过程主要基于简单对象存取协议(SimpleObject Access Protocol )。SOAP协议是一种应用程序之间进行数据通讯的机制,是一种在HTTP上使用XML发送命令并接收值的远程过程调用 [5] 。控制点通过向设备服务发出操作来控制设备,一般通过向服务的控制URL地址发送一个适当的控制消息,而服务则做出相应的响应。操作的效果可能改变一个描述服务运行状态的变量,设备事件将这一改变发送到所有相关的控制点。控制点也会轮询服务以获得状态变量的当前值,而每个服务则必须保持状态变量的一致性。
1.2 UPnP-AV媒体播放系统的控制过程
一个完整的UPnP-AV体系由三部分组成:一个用于控制播放过程的控制点(ControlPoint),相当于遥控器;一台用于存取视频、音频文件的MediaServer,相当于影碟机;一台用于输出图像和声音的MediaRenderer,相当于电视机。UPnP-AV系统工作由控制点启动。控制点请求设置 MediaServer 和MediaRenderer 以便使需要的内容从 MediaServer 流动到MediaRenderer (使用双方都支持的协议和数据格式)。 MediaServer 和 MediaRenderer 则处理控制点的UPnP操作调用。控制点不参与实际的内容传送过程,而只在需要时对它们进行简单的设置,并启动传输,一旦传输开始,控制点就退出了。如果用户需要,控制点可以调用各种各样的 AVTransport 操作来控制内容的流动,如Stop、Pause、FF、REW等。此外,控制点也能控制 MediaRenderer 设备的播放特性,如亮度、对比度、音量等。图1描述了三者之间的相互作用顺序。
图1 UPnP-AV设备作用顺序
2. UPnP-AV系统设备控制的实现
2.1 设备控制消息格式 [6] 设备控制过程由控制点通过发SOAP请求,调用设备的各种服务提供的操作方法,控制数据从MediaServer传到MediaRenderer的过程,并控制MediaRenderer的播放过程。所用的消息格式由SOAP协议规定。典型的设备控制消息格式如下:
POST path of control URL HTTP/1.1
HOST:host of control URL:port of control URL
CONTENT-LENGTH:bytes in body
CONTENT-TYPE: text/xml;charset=”utf-8”
SOAPACTION:”urn:schemas-upnp-org:service:serviceType:v#actionName”
<s:Envelope
xmlns:s=”http://schemas.xmlsoap.org/soap/envelope/”
s:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<s:Body>
<u:actionName xmlns:u=”urn:schemas-upnp-org:service:serviceType:v”>
<argumentName>in argvalue</argumentName>
other in args and their values go here, if any
</u:actionName>
</s:Body>
</s:Envelope>
2.2 设备控制设计与实现 [1][2][3] 下面重点介绍GetProtocolInfo、RendererControl、PrepareForConnection、SetAVTransportURI、Play等操作的设计与实现。
2.2.1 GetProtocolInfo操作
1)作用
控制点通过该操作从MediaServer和MediaRenderer获取各自所支持的传输协议和数据格式并进行匹配,确定最后传输时所用的协议。
2)输入参数:无
3)输出参数:2个
source:源设备可用协议
sink: 播放设备可用协议
协议格式如下:
<protocol>’:’ <network>’:’<contentFormat>’:’<additionalInfo>
4)GetProtocolInfo()函数工作过程,如图2所示。
图2 GetProtocolInfo()函数工作过程
2.2.2 RendererControl操作
1)作用
这是整个设备控制阶段中最重要的一个操作,它用来针对不同的请求类型生成不同的SOAP内容体和信封格式,并将此SOAP请求发送到相应服务的控制URL,从而调用该服务所提供的相应操作,实现控制点的控制请求。
2)算法描述
PublicSub RendererControl()
Select Case m_enuRequestType '根据请求类型生成不同的SOAP请求
Case 枚举请求类型值
strBody =… ’生成请求体
enuService = … ’确定要调用的MediaRenderer服务名
strAction = … ’确定要调用的MediaRenderer操作名
1/2 1 2 下一页 尾页 |