系统方案
本系统的控制方式采用了如图1所示的星型总线拓扑结构,它不仅可以方便地进行多台PC的集中控制,而且还可方便地进行数据的传输及通过局域网连接进行控制,更好地实现了用户的一些特殊要求,例如结合Windows的其他软件实现对多台客户计算机的远程控制。
多媒体系统中的同步
多媒体系统的同步是指两个或多个多媒体事件按一定的时间顺序关系播放,同时也是一种用于协调多个媒体事件在时间域中播放的机制或过程。同步操作可以协调和控制两个或多个媒体事件在并行播放过程中由用户指定的或由其内在本质所决定的进展和联系。按时间关系,同步可分为3类:媒体对象之间的同步,媒体流之间的同步,媒体流内的同步。这3类同步构成多媒体同步的3个层次,最高层是多媒体对象之间同步,最低层是媒体流内的同步。其中媒体流内的同步在一个时间相关媒体流内(主要是等时媒体流内)进行,因此,与时间无关的媒体,如文字、图像等不存在这种同步问题。媒体对象之间同步要解决的是多媒体合成时的高层同步问题。图2给出了一个多媒体系统中各个媒体对象之间的时序关系。
媒体流之间同步的主要任务是保证不同媒体流之间的时间关系,例如视频和音频之间的时态关系、音频和文本之间的时态关系等。流间同步的复杂性与需要同步的媒体数目有关。媒体流内同步主要针对等时媒体(音频和视频)而言。本系统中的同步最重要的是对象间同步。
因为多媒体系统引入了许多时间相关性数据类型,而这些多媒体数据的时间相关性可能隐含在建立过程中(如活动视频图像序列),也可能是由用户定义的。时间相关性必须体现在多媒体系统中。另外在数据演示过程中。由于存储、通信和计
算会导致系统延迟,所有这些特定要求,都需要引进同步技术才能加以解决。传统的几种同步方法或模型有分层同步法、时间轴同步法和参考点同步法。本系统采用的是基于全局时间轴的同步方法。
基于全局时间轴的同步是通过把相互独立的对象依附到一个时间轴上来描述,丢掉或更改一个对象不影响其他对象的同步。这种描述要维持一个全局时间 (world time)轴。每个对象可将此全局时间映射到局部时间,并沿此局部时间前进。当全局时间和局部时间误差超出一个给定范围时,则要求与全局时间重新进行同步。时间轴同步能较好地表达源于媒体对象内部结构的抽象定义。在这方面,它优于分层同步法,它定义了一个与视频流中某图像相关的说明文字的演示的起始位置,而不再要求有相关视频帧的知识。由于同步仅能基于固定的时间点定义,若媒体对象无确定的演示时间,这种方法就能力有限了。
在本系统中,由于我们采用时间轴同步法,所以需要在不同PC间通过网络传送播放时间的数据。我们采用了基于C/S(客户机/服务器)模式,其功能模块图如图3所示。
服务端功能模块主要有视频处理模块、服务器网络功能模块、用户管理模块等控制模块,它们都通过服务器应用程序被统一管理调用。客户端功能模块主要有客户机网络功能模块、视频处理显示模块、用户管理模块等,它们都通过客户机应用程序被统一管理调用。服务器和客户机之间通过网络进行相互通信控制和数据传输。
网络功能模块分为服务器网络功能模块和客户机网络功能模块。服务器网络功能模块主要负责监控前端视频播放时间数据的网上发送、对客户机请求的侦听及响应和对客户机控制信息的接收及处理等;客户机网络功能模块主要负责对服务器传来的视频播放时间数据的接收、对服务器请求连接和控制信息的发送等。这些都由软件实现,本软件使用VC++.Net,采用Windows套节字(WinSock),利用TCP/IP协议实现网络编程。在编程中,还利用了套节字的异步I/O模型及Windows多线程机制进行循环内存队列管理等方法。通过这些手段,较好地解决了实时视频播放时间数据传输中的各种问题。
实时视频处理
无论在服务器还是客户机应用程序中都有视频处理模块,其主要的功能是使多媒体系统能实时进行视频图像切割并显示出来。其实现方法如下:
在Windows系统中我们将使用微软提供的一些方法和类来实现实时视频图像切割播放的算法。首先将使用设备环境作为帧读取的缓冲区。设备环境是一个由图形设备接口管理的包含有设备信息的数据结构,所有对绘图函数的调用都要通过使用设备环境对象来完成。它封装了Windows的绘画函数,并允许在视窗中以设备的独立性来绘制图形。支持设备独立性的软件包括两个动态链接库:图形设备接口Gdi.dll和设备驱动程序。系统要将图像输出到对话框,就要得到对话框的设备环境,方法大体有两种:①在对话框类的函数中,用函数GetDC()得到一个对话框设备的指针;②以对话框的指针为参数生成一个设备环境对象,如CDChdc(this)。微软还提供了一些播放视频的函数(如DrawDibDraw函数),实现了将文件中读出的视频图像数据输出到显示缓冲区的某个区域,利用此函数可以将每帧图像切割,显示我们所要显示的画面(原来视频画面的一部分);而显示的图像数据可以以CBitmap的形式从显示器的设备环境中获得,其中CBitmap是微软提供的一个位图类,它封装了视窗的图形设备接口,并且提供了操纵位图的成员函数。
系统是在CPU为P4117GHz、VideoCard为NVIDIAQua
dro2MXR/EX的情况下,在Windows系统中用VC++.net实现了AVI视频无停顿实时切割播放。
其具体程序如下:
CDC hdc;
LONG 1 Frame;
BYTE abFormat[1024];
LPBITMAPINFOHEADER 1pbi;
1pbi=(LPBITMAPINFOHEADER)abFormat;
1Frame=AVIStream Time To Sample(m_Pstream,1Time);
//从当前媒体流中得到当前时间为1Time的样本
1pbi=(LPBITMAPINFOHEADER)AVIStreamGetFrame
(m_PAviStream,1Frame);
//得到当前帧的地址
If (1pbi)
{
xwidth=lpbi->biWidth/total;
//得到客户机上显示的视频画面的宽度
ywidth=1pbi->biHeight;
xSrc=x_n*xwidth;
//得到源显示画面开始显示点的x坐标
//利用DrawDibDraw函数将视频切割显示
DrawDibDraw(m_hDrawDib,hdc,
rcFrame left,rcFrame.top,
rcFrame right-rcFrame.left,
rcFrame bottom-rcFrame.top,
1pbi,NULL,xSrc,0,xwidth,ywidth,
DDF_SAME_DRAW);
结束语
本系统采用多媒体同步技术,实现了基于网络通信的不同PC间进行同步通信播放影像文件和实时视频图像切割处理的功能,是一种性价比较高的解决方案。该系统对于网络视频、视频切割的研究提供了有意义的经验和借鉴。