OpenH323协议栈的源码是用C++来完成的视频会议协议栈,适用于Windows平台和Unix平台,该协议栈描述的是H323 Version2.0。OpenH323协议栈的结构非常庞大,包括了实现H323协议的方方面面(当然,目前协议栈的功能还不是很完整)。然而,主要的是H323Endpoint,H323Listener,H323Transport,H323Connection,H245Negotiator,H323Channel, H323Capability和H323Codec这几个类。而在这几个类中,最为重要的是H323Endpoint和H323Connection类。前者是所有基于OpenH323协议栈的基础。
应用程序一般要创建一个H323Endpoint类的派生类的实例。这是因为通过H323Endpoint类可以直接或间接的对整个OpenH323协议栈的各种主要的类进行调用和处理—H323Endpoint类封装了相当多的方法。当应用程序实现H323Endpoint的派生类时,通常会定义一些在H323协议栈中没有定义的属性和方法,这些属性和方法用于设定终端的一些初始化的或者基本的属性。比如振铃时播放的音乐文件的名称,缺省的呼叫设置,终端的能力集等。
而在H323Endpoint类中,通常都会创建一个或多个H323Listener类的派生类的实例,每一个实例对应一个后台处理线程(一般普通终端有两个线程,一个用于处理可靠连接TCP,还有一个线程用于处理不可靠连接UDP,普通终端的UDP线程可以在设置网守时才建立,也可以在启动时建立)。当检测到一个新的呼入时,就会创建一个H323Transport类的的实例,负责传输信息。具体过程如下(以公共网守直接选路为例):
在一个应用程序(终端)完成启动过程后,在后台会运行一个处理TCP的侦听线程。然后,如果有一个呼叫的话,首先,TCP侦听线程会收到一个连接请求,并建立一个新的TCP传输,用于传输H.225呼叫信令消息。成功建立传输后,该终端会接收到H.225的setup消息。然后,该终端先返回一个H.225的call Proceeding的消息,再通过UDP传输发送ARQ给网守,网守返回ACF给UDP线程后,TCP线程先后发送H.225的Alerting和Connect消息给主叫终端。这里所提到的UDP线程即是H323TransportUDP类的实例。而TCP线程则是H323TransportTCP类的实例。这两个类都派生于H323TransportIP类,而H323TransportIP则派生于H323Transport。
呼叫信息都定义在用于处理两个终端直接的连接的H323Connection类中,H323Endpoint类的实例则负责记录所有这些活动的连接。终端实例会为每一个呼叫建立不同的连接,连接建立后,就开始新的信令协商(Negotiation)过程。
对于H323Connection 类,一般要创建一个H323Endpoint类的派生类的实例,使用户根据实际的需要来重载其中的很多虚函数。例如,在收到Alerting消息时,可以播放音乐。通过派生和重载H323Connection类,应用程序可以获得更大的自由度。
H.245的主要协议过程例如主从确定、能力交换、逻辑通道信令等都是在H245Negotiator类的派生类中定义的。 
在H245协商的过程中,主叫终端和被叫终端都会创建逻辑信道。H323Channel的派生类负责处理与此相关的过程。H245的控制信道是在H.225的呼叫信令过程的后期建立的。在建立了H245控制信道后,应用程序会先启动该控制信道,然后控制信道才根据需要打开一个或者多个逻辑信道用于传输音频和视频等数据。打开逻辑信道之前,首先会开始能力集交换过程,在能力集交换过程完成之后,应用程序还可能会有一个主从确定过程(不是任何情况下都需要,但是双向信道中必须要执行此过程)。之后,逻辑信道被打开,开始传输数据。

推荐文章:H323 系统组成  视频会议两大阵营标准H323和SIP       视频会议开发中协议栈的选择

标签:
视频会议技术文章 视频会议行业动态 
 
 

Powered by PageAdmin CMS