OpenH323協(xié)議棧的源碼是用C++來完成的協(xié)議棧,適用于Windows平臺和Unix平臺,該協(xié)議棧描述的是H323 Version2.0。OpenH323協(xié)議棧的結(jié)構非常龐大,包括了實現(xiàn)H323協(xié)議的方方面面(當然,目前協(xié)議棧的功能還不是很完整)。然而,主要的是H323Endpoint,H323Listener,H323Transport,H323Connection,H245Negotiator,H323Channel, H323Capability和H323Codec這幾個類。而在這幾個類中,重要的是H323Endpoint和H323Connection類。前者是所有基于OpenH323協(xié)議棧的基礎。
應用程序一般要創(chuàng)建一個H323Endpoint類的派生類的實例。這是因為通過H323Endpoint類可以直接或間接的對整個OpenH323協(xié)議棧的各種主要的類進行調(diào)用和處理—H323Endpoint類封裝了相當多的方法。當應用程序?qū)崿F(xiàn)H323Endpoint的派生類時,通常會定義一些在H323協(xié)議棧中沒有定義的屬性和方法,這些屬性和方法用于設定終端的一些初始化的或者基本的屬性。比如振鈴時播放的音樂文件的名稱,缺省的呼叫設置,終端的能力集等。
而在H323Endpoint類中,通常都會創(chuàng)建一個或多個H323Listener類的派生類的實例,每一個實例對應一個后臺處理線程(一般普通終端有兩個線程,一個用于處理可靠連接TCP,還有一個線程用于處理不可靠連接UDP,普通終端的UDP線程可以在設置網(wǎng)守時才建立,也可以在啟動時建立)。當檢測到一個新的呼入時,就會創(chuàng)建一個H323Transport類的的實例,負責傳輸信息。具體過程如下(以公共網(wǎng)守直接選路為例):
在一個應用程序(終端)完成啟動過程后,在后臺會運行一個處理TCP的偵聽線程。然后,如果有一個呼叫的話,首先,TCP偵聽線程會收到一個連接請求,并建立一個新的TCP傳輸,用于傳輸H.225呼叫信令消息。成功建立傳輸后,該終端會接收到H.225的setup消息。然后,該終端先返回一個H.225的call Proceeding的消息,再通過UDP傳輸發(fā)送ARQ給網(wǎng)守,網(wǎng)守返回ACF給UDP線程后,TCP線程先后發(fā)送H.225的Alerting和Connect消息給主叫終端。這里所提到的UDP線程即是H323TransportUDP類的實例。而TCP線程則是H323TransportTCP類的實例。這兩個類都派生于H323TransportIP類,而H323TransportIP則派生于H323Transport。
呼叫信息都定義在用于處理兩個終端直接的連接的H323Connection類中,H323Endpoint類的實例則負責記錄所有這些活動的連接。終端實例會為每一個呼叫建立不同的連接,連接建立后,就開始新的信令協(xié)商(Negotiation)過程。
對于H323Connection 類,一般要創(chuàng)建一個H323Endpoint類的派生類的實例,使用戶根據(jù)實際的需要來重載其中的很多虛函數(shù)。例如,在收到Alerting消息時,可以播放音樂。通過派生和重載H323Connection類,應用程序可以獲得更大的自由度。
H.245的主要協(xié)議過程例如主從確定、能力交換、邏輯通道信令等都是在H245Negotiator類的派生類中定義的。
在H245協(xié)商的過程中,主叫終端和被叫終端都會創(chuàng)建邏輯信道。H323Channel的派生類負責處理與此相關的過程。H245的控制信道是在H.225的呼叫信令過程的后期建立的。在建立了H245控制信道后,應用程序會先啟動該控制信道,然后控制信道才根據(jù)需要打開一個或者多個邏輯信道用于傳輸音頻和視頻等數(shù)據(jù)。打開邏輯信道之前,首先會開始能力集交換過程,在能力集交換過程完成之后,應用程序還可能會有一個主從確定過程(不是任何情況下都需要,但是雙向信道中必須要執(zhí)行此過程)。之后,邏輯信道被打開,開始傳輸數(shù)據(jù)。
推薦文章:
標簽: