数字媒体的研究与实现

时间:2022-05-08 02:53:18

导语:数字媒体的研究与实现一文来源于网友上传,不代表本站观点,若需要原创文章可咨询客服老师,欢迎参考。

数字媒体的研究与实现

数字媒体服务器实现的基本思路

UPnP论坛开发了UPnPAVarchitecture作为针对影音传输的数字家庭多媒体标准[5]。主要由三种功能实体组成:数字媒体服务器,AV控制点和数字媒体播放器[6]。交互模型如图2所示,媒体内容是利用带外传输协议从数字媒体服务器向数字媒体播放器进行传输的,在传输过程中,控制点只是利用UPnP网络发现存储媒体内容的AV设备,并触发媒体内容的带外传输,并没有参与媒体内容的传输[7]。在实际应用中,AV控制点可以和数字媒体服务器或数字媒体播放器在一个设备上结合实现。数字媒体服务器(DigitalMediaServer),属于家庭网络设备类(HomeNetworkDevices)[8]。它主要负责提供、存储及管理数据。在UPnPAV架构中,数字媒体服务器主要由三个模块组成:内容目录模块、连接管理模块、内容传输模块。其中内容传输模块是可选的,取决于所支持的传输协议。(1)内容目录模块。内容目录是数字媒体服务器的最主要的功能,它可以使控制点和数字媒体服务器之间建立一个接口,让控制点可以获得数字媒体服务器所分享的数据。该模块提供14个行为,浏览(Browse)行为为控制点提供了数字媒体服务器各级目录下的多媒体数据的具体路径,是14个行为中的主要行为。(2)连接管理模块。连接管理模块负责管理数字媒体服务器与特定设备的连接。提供的主要行为是初始化连接(PrepareForConnection)行为。当用户通过控制点得到多媒体数据的具体路径后,只有通过连接管理模块,才能真正获取到数字媒体服务器所分享的数据。(3)内容传输模块。内容传输主要负责AV控制点对相关多媒体内容的播放控制,包括停止、前进、后退、定位等。内容传输服务对于媒体服务器来说是可选项,为了简化起见本文没有加以研究

数字媒体服务器的实现与测试

本设计主要基于linux平台的开源软件ushare[9]、ffmpeg、libupnp和libiconv实现。视频部分是通过精简和配置ffmpeg库完成对DLNA所需求的媒体格式的支持;libupnp主要完成UPnP协议的实现,libdlna和ushare主要实现数字媒体服务器功能;libiconv是实现对数字媒体服务器的汉化功能。本课题中,在一台电脑中实现数字媒体服务器,用另外一台电脑当数字媒体播放器和控制点,测试模型如图3所示,软件采用Intel公司的UPnP测试工具DigitalMediaSoftwareEnablingKit,开发平台为Linux,语言工具为C,播放器使用WindowsMediaPlayer12。Fig.3Testmodel先启动控制点,数字媒体服务器启动后,通过控制点可以发现数字媒体服务器,并且可以浏览数字媒体服务器上共享的文件内容和文件的详细信息;使用WindowsMediaPlayer12播放数字媒体服务器中音视频信息,即控制点可以将服务器的媒体文件用网络上的另外一个媒体播放器来播放。数字媒体服务器的抓包过程如图4所示。图4中,device1为数字媒体播放器(DigitalMediaRenderer),device2为AV控制点(AVControlPoint),device3为数字媒体服务器。本设计使用的是WindowsMediaPlayer12充当ControlPoint和MediaRenderer。MediaServer、ControlPoint和MediaRenderer启动后,会分别向网络中广播自己的设备类型(第3、4和7条报文)以及能够提供的服务。发现网络中的媒体服务器后,WindowsMediaPlayer12会进一步获取服务器提供的服务描述,这些描述主要包括内容目录服务和连接管理服务以及音视频内容的具体URL链接。如图5所示:图5为MediaServer发送的设别描述(ServiceDescription),清晰描述了自己的服务类型(MediaServer)、提供的服务(ConnectionManager和ContenDirectory)和具体链接地址。通过这些链接,WindowsMediaPlay-er12可以正确连接到服务器上,执行浏览(Browse)、获取(Get)以及传输音视频等操作。图4最后几条报文显示,WindowsMediaPlayer12通过Browse动作完成对服务器内容的浏览操作,选定某个MP3音频后,通过连接管理服务完成传输MP3的操作,从而实现在本地播放。

本文重点介绍了基于UPnPAV协议的媒体服务器在DLNA架构中的研究与实现方法。从测试结果来看,本次设计实现了对多媒体内容提供共享服务的功能,顺利完成了数字媒体服务器的设计。课题使用的是开源库来开发程序,可以有效的减少开发量,以及模块测试的工作量。

本文作者:张容娟工作单位:福州大学阳光学院