数字媒体适配器的主要价值是可以连接计算机或手机中的音频、视频文件,经过数字媒体适配器的解码,输出到其他的展示设备。然而关键问题是各种设备之间如何使用一种公共的标准协议来实现互相连接,从而共享家庭网络中的媒体资源。另一方面,如何在低成本的前提下,实现高速率低功耗。随着数字媒体内容种类及数量的增多,人们迫切的等待着更加成熟的数字家庭技术方案,以更好地服务数字生活。
1 系统整体设计
本系统整体上采用了ARM-Linux嵌入式体系,被广泛的应用于数字媒体设备中。图1表明系统整体整体框架,包含了系统软、硬件两大部分的层次结构。其中UPNP协议以及UPNP AV架构作为整个系统最重要的构成,实现了设备之间互通互控的主体功能,也是文中重要的研究部分。
2 数字媒体适配器的硬件设计
数字媒体适配器实现的主要功能是网络流媒体数据接收、流媒体解码、音视频流格式转换以及对流媒体服务的控制(如媒体内容选择、播放、暂停等)。硬件设计上,文中选用了Amlogic公司的AML 8726-M作为主控芯片,专为移动网络互联设备、平板电脑、机顶盒以及电视应用设备而设计。
系统采用ARM Cortex-A9单核架构,主频800 MHz,大容量缓存提高了系统性能。另外配有MedioCPU完成音频解码,双DSP硬件解码器可以解码所有的视频格式,包括H.264,MVC,MPEG-1/2/4,VC-1/WMV,AVS,RealVideo以及MJPEG。
系统在主控芯片的基础上,还配有丰富的输出接口和外围设备模块。外围存储包括64 M字节的SDRAM,用来处理数据的外部缓存;通过NAND FLASH接口外接512 M大容量存储芯片,用来存储启动引导程序、U-boot、内核以及文件系统;配有Mini SD接口,为媒体资源提供更大的存储空间。网络连接方面,总线连接网络接口芯片,作为读取接收流媒体的入口;WIFI无线网卡,实现无线上网功能;配有4个USB接口,读入移动存储设备中的媒体内容。此外,系统配有3.5-mm标准音频输出接口和HDMI高清接口,支持多格式的音视频媒体输出。
系统通过有线或无线连接网络,与手机或电脑互联提供控制端;通过HDMI高清接口连接电视,作为显示端。外存中的多媒体文件通过SDRAM缓冲后,将视频流和音频流进行分解,在主控芯片解码完成后,由音/视频接口输出。
3 数字媒体适配器软件设计
本系统作为DLNA产品,符合其开发标准。表1中列出了DLNA互操作架构下的关键技术,系统功能实现所需技术也如表1所列。软件程序采用C语言编写,利用Intel SDKfor UPNP Devices的库文件代码一起进行交叉编译成ARM平台Linux动态连接库文件,供上层应用调用。开发主机采取在VMWare中安装Linux虚拟机(Ubuntu11.10),以及arm-linux-gcc 4.3.2编译器作为开发工具链。
3.1 控制点软件模块设计
数字媒体适配器作为数字家庭中的重要设备,能够根据用户提供的某项服务,在设备间实现互操作,包括设备间的通信能力以及交换有效信息的能力。控制点(Control Point)作为UPNP AV网络中最重要的节点,负责在网络中搜索媒体服务器和媒体渲染器,发现用户所需要的媒体信息,协调两者之间的交互操作。软件采用模块化设计思想,全局分为4个模块;设备列表模块、主控管理模块、交互通信模块以及UPNP协议模块。图3为控制点软件模块结构图。
1)设备列表模块
设备列表模块用来在网络中实时监听、查找UPNP设备,对设备进行添加和删除,对设备表述的XML文件进行解析,列表与设备之间一一对应。此模块的设计实现了设备信息的缓存处理。在设备列表中,包含所有控制点需要的设备信息和设置参数;设备唯一的识别名称、XML文件描述的网络地址、基础URL以及设备超时时间等。
2)主控管理模式
作为软件模块中的中枢部分,主控模块基于UPNP协议模块,与设备列表模块与交互通信模块均相连,完成的主要功能包括:管理设备缓存、处理客户端命令、响应设备请求、解析设备回应。定义CtrlPointCallbackEventHandlel()函数注册UPNP消息回调函数;接收到SSDP发现消息后,管理列表中的UPNP设备,如使用CtrtPointAddDevice()添加设备;调用CtrlPointHandleEvent()函数接收客户端的消息,对消息进行处理;使用CtrlPointHandleSubscribeUpdate()和StateUpdate()更新订阅和状态列表;调用CtrlPointSendAction()和CtrlPointSendActi onNumeiicArg()给网络中的UPNP设备发送消息。
3)交互通信模块
交互通信模块连接了主控模块与UPNP客户端,实现设备与控制点之间的交互控制,负责与客户端的通讯流程,完成服务端、渲染器以及控制点之间的交互操作。模块首先确定了与UPNP客户端的通信方式,定义Upnp Get ServerIpAddress()设定IP地址、UpnpGetServerProt()设定端口,使用CtrlPoinHandleGetVar()处理主控模块发送过来的数据包,完成对命令的解析,调用CtrlPointCommandLoop()函数连续发送指令,使用CtrlPointProcessCommand()函数将指令传送给主控模块,完成对命令的解析和处理。
4)UPNP协议模块
负责所有与UPNP协议有关的内容。系统采用libupnp开发包、以UPNP库作为底层协议,涵盖UPNP协议所需要的API接口及库函数。
5)UPNP客户端
UPNP客户端即系统输出展示设备,包括电视、音响等。
3.2 系统软件工作流程
根据DLNA产品开发标准中的关键技术,其中“设备发现与控制”和“媒体管理”是系统实现的重要功能,软件开发基于UPNP协议与UPNP AV协议架构。下文分别说明了两主要功能的具体实现。
3.2.1 设备发现与控制工作流程
设备在发现与控制技术部分,采用了UPNP协议栈架构。设备在此部分主要完成初始化以及异步操作处理两大主要功能。其软件工作流程如图4所示。
初始化操作包括初始化UPNP协议栈、注册根设备以及初始化设备。系统调用函数UpnpInit()初始化协议栈,制定模块根目录,通过注册根设备,实现设备与UPNP库的关联。设备以多播方式发布存在消息,进入事件循环过程。当监听器接收到设备发出的事件请求后,创建时间处理线程,回调UPNP事件处理函数进行处理,随后开始异步操作处理过程。
设备运行期间,控制点会发送各种请求指令,处理这些异步请求就是设备最主要的工作。这些异步请求包含订阅请求、取值请求和操作请求。订阅请求订阅了UPNP设备中服务状态改变事件,订阅成功后,一旦控制点的订阅信息发生改变,系统都会得到及时的通知。取值请求用于返回服务状态变量的当前值,设备监听到控制点的取值请求后,会激活事件处理回调函数,将返回的当前值提供给接口发送给控制点。操作请求用于改变服务状态变量值,设备从请求文档中得到操作所需的相关参数,建立响应文档后通知控制点设备。
3.2.2 媒体管理工作流程
系统媒体管理部分基于UPNP AV架构,设备用来连接一个或多个媒体服务器,允许控制点在家庭网络内对媒体资源(例如音频、视频、图片等)进行控制。
图5为媒体管理工作流程。系统进程开始于控制点对媒体服务器的发现,当选择好媒体内容进行播放控制时,首先要对媒体资源进行数据分析,控制点确定以何种传输协议以及数据格式进行数据传输,所有传输参数建立后,控制点通过调用Connection Manager::PrepareFor Conection()发布通知,控制媒体流。随后服务器或渲染器将向控制点返回一个AVTransport InstanclID,用来控制媒体内容的传输,例如播放、暂停等。同样,当媒体渲染器返回一个渲染控制ID,就可以用来对媒体进行控制,例如音量调节、亮度调节等。实际上,媒体内容的传输是媒体服务器和渲染器之间的操作UPNP本身并不参与。控制点利用UPNP协议建立设备间的连接,而媒体传输采用的则是具体的传输协议。
4 结束语
系统作为DLNA产品的开发,完成了数字媒体适配器软、硬件的设计与实现。通过测试,系统实现了媒体资源共享及设备间的互控,能够对媒体内容进行传输控制和渲染控制。系统作为数字家庭媒体的中心产品之一,很好的实现了DLNA家庭网络的娱乐功能,也预示了电脑与家电产品互联互通的美好前景。