论文部分内容阅读
[摘要]重点是研究基于DLNA的DMA的实现。首先介绍DLNA协议,并提出基于DLNA的DMA架构,然后重点分析其中UPNP线程模块和GUI线程模块的实现机制,以及它们之间的通信机制,并给出一个具体的DMA实现的实例。
[关键词]数字媒体适配器 通用即插即用协议 图形用户界面
中图分类号:TP3文献标识码:A 文章编号:1671-7597(2008)1220022-01
一、引言
DLNA定义的设备主要有三种:控制点,服务器,呈现器。其中服务器提供如下服务:内容目录服务,媒体源连接管理服务,媒体源传输服务;播放器提供的服务:媒体目标连接管理服务,媒体目标传输服务,呈现控制服务。
二、DLNA协议的DMA设计
(一)DLNA协议的DMA框架
如图1所示,这个框架主要可分为3个模块:XML解析器,UPNP协议栈,GUI。
XML解析器:DMA的GUI不采用基于图形库开发方式,而是采用XML技术。因此在显示一个图形用户界面前,先利用XML解析器把该界面的相关属性和状态从XML文档中解析出来,再将解析出的对象属性组织成DOM树。在后续的操作中,通过遍历并解析此DOM树的每一个结点,从而实现图像界面。
根据上图的DMA框架,我们可以将GUI模块和UPNP协议栈模块分别实现为线程。GUI线程主要负责和用户交互;UPNP线程主要负责完成设备互联互通,实现资源共享;通过两线程之间的通信实现两线程之间的数据交互。
(二)UPNP线程设计
UPNP线程设计成webserver,webclient,ssdpclient,timer等几个重要功能模块组成。各模块协同工作,从而实现数字家庭资源共享。其中:
ssdpclient负责发送设备查找请求,实现对网络上服务器的搜索。
Webserver负责接收和处理网络设备发送过来的数据。
Webclient负责从请求发送队列中获取发送请求,并将它发送出去。
timer模块主要负责网络中的响应消息超时处理,底层Socket通信时通过定时器来实现消息重发功能。
UPNP线程创建后,ssdpclient组播SSDP包进行网络服务器的搜索,同时控制点会一直监听单播端口,实现对刚上线设备的发现。当用户发出浏览服务器内容请求,首先将请求组织成SOAP消息包,然后将SOAP消息包排入webclient的发送队列。Upnp线程循环的取出webclient发送队列中的SOAP包,并发送出去。而webserver接收并处理服务器返回的信息。
(三)GUI线程设计
受限于硬件的数量,性能和成本,嵌入式系统中的GUI一般要符合以下特殊的要求: ①轻型、占用资源少,图形算法简捷; ②高性能,高可靠性; ③模块化结构,可维护性好。因此嵌入式产品的GUI都设计的非常简洁,一般就是由非常少的几个界面和一些窗口控件组成。
XML技术能很好的应用于嵌入式GUI开发,同时使用XML技术开发的图形用户可以很好满足嵌入式GUI的上述特殊要求。为了使用XML实现GUI的功能,主要有两部分的工作要做。首先要在开发前,分析DMA所需要的所有界面信息,并使用XML语言准确的描述每一个窗口页面,包括它的属性,控件及其属性,以及响应的事件列表等,最终将它们组织成XML配置文件。然后设计一个XML parser, 通过XML parser对XML配置文件进行解析,并将它们组织到一个数据结构里。应用程序通过对此数据结构的访问,从而实现图形界面。
(四)GUI线程和UPNP线程通信设计
上述设计的两个线程,它们之间必定要进行交互,那就一定要有一个消息传递的通道,也就是UPNP线程和GUI线程之间需要通信。线程之间的常见的通信方式主要有以下两种:
1.用全局变量进行通信。由于属于同一个进程的各个线程共享操作系统分配该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量。如果线程间所需传递的信息较复杂,我们可以定义一个结构,通过传递指向该结构的指针进行传递信息。
2.使用自定义消息。我们可以在一个线程的执行函数中向另一个线程发送自定义的消息来达到通信的目的。一个线程向另外一个线程发送消息是通过操作系统实现的。
GUI线程和UPNP线程的通信流程设计如下:
(1)UPNP线程接收并处理远程服务器发送过来的信息;
(2)将处理后的结果封装成自定义的消息发送给GUI线程;
(3)GUI线程循环检测所有的消息,如果发现有消息就将其一起传过来的数据提取,并最终通过图像界面反馈给用户。
三、基于DLNA协议的 DMA实现
(一)DMA的执行流程
通过上述所论述的方法,我们可以具体实现一个DMA。本产品的开发采用低成本但功能相对丰富的集成芯片EM8621L作为硬件平台,它是Sigma DESIGNS公司专门针对数字视频通信设计的最新一款多格式解码芯片,该平台内嵌8M的flash和64M的RAM,具有丰富的音视频接口。图2是DMA工作的主要执行流程:
(二)GUI线程和UPNP线程通信实现
GUI线程和UPNP线程之间主要通过Notify(message,val)和DoBrowse()接口进行通信(图3)。
其中,GUI线程接收用户的浏览请求,并调用DoBrowse()接口将用户的请求封装成SOAP包,然后排入webclient的发送队列,并最终把浏览请求发送出去。
UPNP线程接收并处理网络服务器返回的数据,并通过Notify(message,val)将处理后的数据传送给GUI线程,其中message实现为全局变量,val实现为全局结构体。这样的话,就可以实现UPNP线程和GUI线程共享这些数据。GUI线程通过循环检测message,如果发现有响应的message值就进行处理。
参考文献:
[1]陈宏林, DLNA规格的播放设备出台[J],微电脑世界,2006(4).
[2]栾新,基于UPNP协议的AV框架的实现[J],计算机应用研究,2006(12).
作者简介:
彭志德,江西旅游商贸职业学院信息管理工程系,研究方向:网络安全、Linux嵌入式开发。
[关键词]数字媒体适配器 通用即插即用协议 图形用户界面
中图分类号:TP3文献标识码:A 文章编号:1671-7597(2008)1220022-01
一、引言
DLNA定义的设备主要有三种:控制点,服务器,呈现器。其中服务器提供如下服务:内容目录服务,媒体源连接管理服务,媒体源传输服务;播放器提供的服务:媒体目标连接管理服务,媒体目标传输服务,呈现控制服务。
二、DLNA协议的DMA设计
(一)DLNA协议的DMA框架
如图1所示,这个框架主要可分为3个模块:XML解析器,UPNP协议栈,GUI。
XML解析器:DMA的GUI不采用基于图形库开发方式,而是采用XML技术。因此在显示一个图形用户界面前,先利用XML解析器把该界面的相关属性和状态从XML文档中解析出来,再将解析出的对象属性组织成DOM树。在后续的操作中,通过遍历并解析此DOM树的每一个结点,从而实现图像界面。
根据上图的DMA框架,我们可以将GUI模块和UPNP协议栈模块分别实现为线程。GUI线程主要负责和用户交互;UPNP线程主要负责完成设备互联互通,实现资源共享;通过两线程之间的通信实现两线程之间的数据交互。
(二)UPNP线程设计
UPNP线程设计成webserver,webclient,ssdpclient,timer等几个重要功能模块组成。各模块协同工作,从而实现数字家庭资源共享。其中:
ssdpclient负责发送设备查找请求,实现对网络上服务器的搜索。
Webserver负责接收和处理网络设备发送过来的数据。
Webclient负责从请求发送队列中获取发送请求,并将它发送出去。
timer模块主要负责网络中的响应消息超时处理,底层Socket通信时通过定时器来实现消息重发功能。
UPNP线程创建后,ssdpclient组播SSDP包进行网络服务器的搜索,同时控制点会一直监听单播端口,实现对刚上线设备的发现。当用户发出浏览服务器内容请求,首先将请求组织成SOAP消息包,然后将SOAP消息包排入webclient的发送队列。Upnp线程循环的取出webclient发送队列中的SOAP包,并发送出去。而webserver接收并处理服务器返回的信息。
(三)GUI线程设计
受限于硬件的数量,性能和成本,嵌入式系统中的GUI一般要符合以下特殊的要求: ①轻型、占用资源少,图形算法简捷; ②高性能,高可靠性; ③模块化结构,可维护性好。因此嵌入式产品的GUI都设计的非常简洁,一般就是由非常少的几个界面和一些窗口控件组成。
XML技术能很好的应用于嵌入式GUI开发,同时使用XML技术开发的图形用户可以很好满足嵌入式GUI的上述特殊要求。为了使用XML实现GUI的功能,主要有两部分的工作要做。首先要在开发前,分析DMA所需要的所有界面信息,并使用XML语言准确的描述每一个窗口页面,包括它的属性,控件及其属性,以及响应的事件列表等,最终将它们组织成XML配置文件。然后设计一个XML parser, 通过XML parser对XML配置文件进行解析,并将它们组织到一个数据结构里。应用程序通过对此数据结构的访问,从而实现图形界面。
(四)GUI线程和UPNP线程通信设计
上述设计的两个线程,它们之间必定要进行交互,那就一定要有一个消息传递的通道,也就是UPNP线程和GUI线程之间需要通信。线程之间的常见的通信方式主要有以下两种:
1.用全局变量进行通信。由于属于同一个进程的各个线程共享操作系统分配该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量。如果线程间所需传递的信息较复杂,我们可以定义一个结构,通过传递指向该结构的指针进行传递信息。
2.使用自定义消息。我们可以在一个线程的执行函数中向另一个线程发送自定义的消息来达到通信的目的。一个线程向另外一个线程发送消息是通过操作系统实现的。
GUI线程和UPNP线程的通信流程设计如下:
(1)UPNP线程接收并处理远程服务器发送过来的信息;
(2)将处理后的结果封装成自定义的消息发送给GUI线程;
(3)GUI线程循环检测所有的消息,如果发现有消息就将其一起传过来的数据提取,并最终通过图像界面反馈给用户。
三、基于DLNA协议的 DMA实现
(一)DMA的执行流程
通过上述所论述的方法,我们可以具体实现一个DMA。本产品的开发采用低成本但功能相对丰富的集成芯片EM8621L作为硬件平台,它是Sigma DESIGNS公司专门针对数字视频通信设计的最新一款多格式解码芯片,该平台内嵌8M的flash和64M的RAM,具有丰富的音视频接口。图2是DMA工作的主要执行流程:
(二)GUI线程和UPNP线程通信实现
GUI线程和UPNP线程之间主要通过Notify(message,val)和DoBrowse()接口进行通信(图3)。
其中,GUI线程接收用户的浏览请求,并调用DoBrowse()接口将用户的请求封装成SOAP包,然后排入webclient的发送队列,并最终把浏览请求发送出去。
UPNP线程接收并处理网络服务器返回的数据,并通过Notify(message,val)将处理后的数据传送给GUI线程,其中message实现为全局变量,val实现为全局结构体。这样的话,就可以实现UPNP线程和GUI线程共享这些数据。GUI线程通过循环检测message,如果发现有响应的message值就进行处理。
参考文献:
[1]陈宏林, DLNA规格的播放设备出台[J],微电脑世界,2006(4).
[2]栾新,基于UPNP协议的AV框架的实现[J],计算机应用研究,2006(12).
作者简介:
彭志德,江西旅游商贸职业学院信息管理工程系,研究方向:网络安全、Linux嵌入式开发。