视频会议远端摄像机控制的研究
哈尔滨工业大学通信技术研究所(150001) 于 波 刘进慧 张中兆
摘 要:分析了视频会议中如何实现对远端摄像机的控制,该项技术在远程教学和实时监控方面起着非常重要的作用。
关键词:视频会议 winsocket 规程分析仪
随着我国改革开放的不断深入和经济的迅猛发展,社会上方方面面的会议、会晤、磋商与日骤增,特别是在经济领域,信息、时间、效益等现代化的观念开始深入人心,以及在各行业部门的行政会议增多情况下,作为先进国家的现代化通信手段之一的会议电视业务通信的即时性和便利性等就显示出了突出的优越性。
本软件的编写及调试均基于VCON公司生产的MeetingPoint E25视频会议系统,E25不具有摄像机控制功能,而C150具有摄像机控制功能。也就是说在两个C150之间可直接进行摄像机的相互控制,而利用E25系统控制远端摄像机的转动是不可行的。因此,编写一个在不同系统下兼容的软件是非常有必要的,而且具有实际意义。
1 设计思想
本软件的总体结构采用客户机-服务器模式。具体工作过程如下:通过规程分析仪,我们可测得对摄像机具体的控制信号。首先,客户机发一信号(例如LEFT),通过网络传到服务器,服务器根据不同的信号向COM口写不同的控制信号,相应地与COM口相连的摄像机就会作出各种动作。在编程过程中,首先给出了RS-232C与摄像机接口的连线,然后给出了用规程分析仪测定控制信号的方法,对SONY摄像机的控制信号进行了测定。由于要实现远端摄像机控制,所以信号的传输是建立在网络的基础上。接下来是对网络通信Windows Csocket的原理介绍,这为后面实现信号的传输打下了基础,也是此软件的关键。
2 控制线的连接及控制信号的测定
2.1 控制线的连接
由于要实现对摄像头的控制,因此需要在主机COM口与摄像头接口之间连一控制线,RS-232C与SONY摄像头对应针的连接如表1所示。
2.2 控制信号的测定
运用规程分析仪可以对各种协议进行分析,我们用规程分析仪测得摄像头转动的各种控制信号。其部分控制信号如下,以十六进制形式给出。
·初始化信号
0x883001FF
0x88010001FF
0x81090447FF
·向右转信号
0x810106010B090103FF
0x810106010B090303FF
·向上转信号
0x810106010B090301FF
0x810106010B090303FF
·聚焦信号
0x8101040724FF
0x8101040700FF
0x81090447FF
3 程序的具体实现
本程序采用了客户机/服务器模式,主要功能为从一台计算机控制连接在局域网中另一台计算机上的摄像头,从而可以随时地采集到会议室内任意地方的图象,由于对摄像机的控制可通过向串行口写数据加以实现,因此程序的核心问题是如何快速有效地实现网络上数据的交换。为了达到实时的效果,本文采用了Windows Socket实现网络的实时通信。
3.1 SOCKET编程原理
我们知道TCP/IP的核心部分是传输层协议(TCP,UDP)、网络协议层(IP)和物理接口层,这三层通常在操作系统内核中实现。操作系统的内核是不能为一般用户所能感受到的。一般用户感受到的只有应用程序(包括系统应用程序),即各种应用程序构成了操作系统的用户视图。应用程序是通过编程界面(即程序员界面)与内核打交道的。TCP/IP网络环境下的应用程序是通过网络系统编程界面套接字SOCKET(在WINDOWS操作系统下为WINSOCK)实现的。网间应用程序之间的作用方式为客户机/服务器模式。TCP/IP协议核心与应用程序的关系如图1所示。
网间应用程序间的通信实质就是不同主机进程间的相互通信问题。为此,需要用一个三元组在网间网中全局唯一地标志一个进程(协议,本地地址,本地端口号),这样的一个三元组叫做一个半相关。而一个完整的网间网进程通信实例由两个进程组成,因此一个完整的网间网进程通信(包括两个端进程)需要一个五元组来标志(协议,本地地址,本地端口号,远地地址,远地端口号),这样的一个五元组叫做一个相关。其中的端口是TCP和UDP与应用程序打交道的访问点,是TCP/UDP协议软件的一部分。TCP/IP协议规定了一些标准保留端口号的使用(用于服务器进程);用户进程可以申请使用非保留端口,这个端口的标志符(端口号)是本机唯一的。因此,将端口号作为网间网上进程本身的描述符。
在TCP/IP网间网中,通信的两个进程间相互作用的主要模式是客户/服务器模式,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式的建立基于以下两点:首先,建立网络的起因是网中软硬件资源、运算能力和信息的不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,相互通信的进程之间既不存在着父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为两者的数据提供同步,这就是基于客户/服务器模式的TCP/IP。
不管SOCKET的内部机制如何,它提供给应用程序员的最终界面是一组系统调用:包括创建套接字CONNECT与ACCEPT、监听连结LISTEN,以及用于数据传输的SEND和RECV,还有关闭套接字的CLOSESOCKET等。图2是SOCKET面向连结的基于客户/服务器模式的系统调用时序图。在VC++5.0中提供了两个类以支持用WINSOCK API进行网络编程。类CasynSocket封装了WINSOCK API的函数,其网络功能很强大;Csocket则将网络编程简化为向一个Carchive类中串行化数据。在编程中我们的类是从Csocket类中派生的。
3.2 功能函数介绍
在本软件中,客户机程序和服务器程序均采用Visual C++5.0编写。在MFC类库中有专门负责管理WinSock编程的Csocket类,在Csocket类中,它覆盖了所有的Win32API函数,因此在用WinSock编程时,只需用Csocket声明一个实例,然后即可调用相应函数进行各种操作(Csocket类成员函数见Visual C++ Books on Line。使用Csocket类时,必须同步声明CsocketFile类实例。
在本程序中用到的主要函数介绍如下:
·Csocket::Create
函数原型:BOOL Create(UNITnSocketPort=0,INT nSocketType=SOCK-STREAM,LPCTSR IpszSocketAddress=NULL);
功能:在建立一个Socket对象之后,调用Create函数来创建Windows Socket,然后调用Bind函数给Socket赋一特定的地址。
参数:
nSocketPort: Socket选用的端口。
NSocketType:Socket类型(SOCK-STREAM,SOCK-DGRAM)。
IpszSocketAddress:服务器的网络地址。
·CasynSocket::Connect
函数原型:BOOL Connect(LPCTSR IpszHostAddress,UNIT nHostPost)
BOOL Connect(Const SOCKADDRIpsockAddr,INT nSockAddrLen)
功能:调用Connect函数与服务器建立连接。
参数:
IpszHostAddress:服务器的网络地址。
NHostPost:服务器使用的端口。
IpsockAddr:指向SOCKADDR的地址,包含了被连的Socket的地址。 NSockAddrLen:IpsockAddr包含的地址的长度。
·GetCommState
函数原型:BOOL GetCommState(HANDLE hFile,LPDCB lpDCB)
功能:从指定的通信设备取当前的控制设置。
参数:
hFile:通信设备的句柄。
LpDCB:DCB结构的指针。
·SetCommState
函数原型:BOOL SetCommState(HANDLE hFile,LPDCB lpDCB)
功能:为指定的通信设备设置控制信息。
参数:同上个函数中参数(hFile.LPDCB)的定义。
·WriteFile
函数原型BOOLWriteFile(HANDLE hFile,Lpvoid IpBuffer,DWORD nNumberofBytes Towrite,LPDWORD Ip- NumberofBytes Written,LPOVERLAPPED Ipoverlapped)
功能:往串行口写数据,此操作对同步或异步通信都是适用的。
参数:
hFile:串行口句柄,此串行口的句柄用GENERIC-WRITE方式创建。
IpBuffer:指向包含数据缓冲区的指针。
NNumberofBytesTowrite:写向串行口的数据的字节数。
IpNumberofBytesWritten:指向实际写向串行口数据的字节的指针。
Ipoverlapped:指向OVERLAPPED结构的指针。
4 程序流程图
在本软件中共有客户机和服务器两个程序,其流程图分别如图3和图4所示。
5 软件实现的功能
本软件可以实现以下四个方面的功能:
·客户机可以随意控制服务器的摄像机上下左右的转动;
·客户机可以随意控制服务器的摄像机聚焦和拉伸;
·客户机可以与服务器进行交谈,交换意见;
·客户机方和服务器方都可保存对方的留言。
参考文献
1 黄东霖.视听多媒体业务.北京:电子工业出版社,1997
2 Michael J.Young.Mastering Microsoft Visual C++ 4. 北京:电子工业出版社,1997
(收稿日期:1999-07-13)