前面我們已經詳細介紹了基於OMCS開發網路多媒體應用的用戶端程式所必需掌握的內容,現在我們來看一下OMCS服務端的開發。對於使用者而言,OMCS的服務端就非常簡單了,只要實現一個使用者驗證的介面,掛接到OMCS架構上,就可以了。OMCS多媒體伺服器的主要職責有:
(1)統一管理多媒體裝置的某些公用配置參數。
(2)管理所有線上的OMCS用戶端。
(3)協助OMCS用戶端之間建立P2P通道。
(4)在OMCS用戶端之間轉寄資訊。
一.MultimediaServer類
OMCS服務端的核心類是OMCS.Server.MultimediaServer,它將OMCS多媒體服務端的各個組件裝配起來,構成一個整體運行。在二次開發時,我們只要正確地執行個體化MultimediaServer,然後將其宿留任何形式的應用程式中(像WinForm、Windows服務、甚至控制台程式等)即可。所以,作為OMCS使用者,我們只需要關心它的建構函式:
public MultimediaServer(int port, IUserVerifier userVerifier, OMCSConfiguration config, bool securityLogEnabled, string platformServerIPE)
port 參數用於指定當前OMCS伺服器通過哪個連接埠提供服務(使用TCP協議)。
userVerifier 用於驗證登入的用戶端的帳號密碼。如果用戶端提交的帳號密碼不正確,多媒體裝置管理員IMultimediaManager的Initialize方法將拋出異常。OMCS服務端開發唯一需要做的就是實現這個介面。
securityLogEnabled 參數用於指定是否記錄安全日誌,一般在偵錯工具的時候,將其設為true,而正式發布運行時,將其設為false。
platformServerIPE 用於設定OMCS群集平台伺服器的地址,在非群集的OMCS系統中,我們可以先忽略它,直接傳入null。
MultimediaServer類的建構函式中最關鍵的參數是OMCSConfiguration,我們將在下面詳細討論。
二.OMCS多媒體伺服器配置參數
OMCSConfiguration是多媒體伺服器的最關鍵配置,其類圖如下所示:
(1)音頻:WaveSampleRate 用於設定麥克風的採樣率(8k/16K/32K),預設值我為16000。AudioEncodingQuality 用於設定音頻資料的編碼品質(Low/Middle/High),預設值為High。
(2)視頻:CameraFramerate 用於設定網路攝影機的採集幀頻(1~25),預設值為5。
(3)遠端桌面:DesktopFramerate 用於設定遠端桌面的採集幀頻(1~25),預設值為5。
(4)電子白板:WhiteboardWidth和WhiteboardHeight用於設定電子白板的尺寸(比如800*600,具體取值需要綜合考慮所有guest的螢幕大小)。
電子白板的尺寸用於限制其可操作地區,超出地區之外的地方,是不能進行繪圖操作的。
(5)SystemToken 用於區分不同的基於OMCS開發的系統,並隔離它們。
OMCS的用戶端也能設定SystemToken,如果用戶端與服務端的SystemToken的值不一致,則用戶端就無法成功登入到OMCS服務端。
OMCSConfiguration 對四種多媒體裝置都有對應的參數設定,在用戶端的多媒體裝置管理員初始化之前,多媒體管理器會先從伺服器擷取OMCSConfiguration對象,然後再根據其設定的值初始化本地的各個多媒體裝置。
三.預設的多媒體伺服器
如果不需要使用者驗證,可以直接使用OMCS提供的預設的多媒體伺服器OMCS.Server.exe(文末將提供其可執行程式和源碼的下載):
(1)使用IUserVerifier介面的預設實作類別DefaultUserVerifier,其VerifyUser方法始終返回true。
(2)SystemToken的值為""。
如果需要驗證使用者帳號密碼,或設定SystemToken,則可以將源碼修改一下,實現IUserVerifier介面,並替換DefaultUserVerifier,然後重新發布。
(3)OMCSConfiguration其它項的設定可以在設定檔OMCS.Server.exe.config中進行修改。
<configuration> <appSettings> <!--伺服器監聽的連接埠--> <add key="Port" value="9900"/> <!--主表單上是否顯示使用者列表。對於高並發應用,建議關閉該顯示--> <add key="ShowUserList" value="true"/> <!--是否記錄安全記錄檔 Omcs.txt--> <add key="SecurityLogEnabled" value="false"/> <!--UserID的最大長度--> <add key="MaxLengthOfUserID" value="11"/> <!--網路攝影機採集視頻的幀率--> <add key="CameraFramerate" value="6"/> <!--音頻編碼品質,Low/Middle/High。--> <add key="AudioQuality" value="High"/> <!--音頻採樣率,8000,16000,32000。--> <add key="WaveSampleRate" value="16000"/> <!--案頭幀率--> <add key="DesktopFramerate" value="1"/> <!--白板寬度--> <add key="WhiteboardWidth" value="800"/> <!--白板高度--> <add key="WhiteboardHeight" value="600"/> </appSettings></configuration>
設定檔中除了可以設定OMCSConfiguration相關項目外,還有其它幾個設定項:
(1)Port 用於指定當前OMCS伺服器通過哪個TCP連接埠提供服務。【將被傳入MultimediaServer類的建構函式】
(2)ShowUserList 用於控制採用預設的UI主介面時,是否顯示線上使用者列表。
一般,只有在調試和測試階段,我們才會開啟顯示使用者列表。因為,當線上使用者數很多時,表單即時重新整理每個使用者的狀態資料,其消耗CPU是不可忽視的。
(3)SecurityLogEnabled 用於指定是否記錄安全日誌。【將被傳入MultimediaServer類的建構函式】
(4)MaxLengthOfUserID 用於設定用戶端登入帳號的最大長度,預設值為11,如果所需長度大於這個值,必需重新設定。
而且,用戶端的設定必須同伺服器一致,OMCS用戶端可以通過調用GlobalUtil類的靜態方法SetMaxLengthOfUserID來設定該值。
預設的OMCS.Server.exe以WinForm的形式宿留了MultimediaServer對象。其運行起來後,如所示:
介面上顯示了所有線上的使用者列表,以及伺服器相關的狀態資訊。
注意:OMCS多媒體伺服器使用了兩個連接埠,一個是通過MultimediaServer的構造參數指定的TCP連接埠,另一個是自動綁定的UDP連接埠(預設為TCP連接埠號碼加1)。
UDP連接埠是OMCS多媒體伺服器內部整合的P2P伺服器所使用的,用於協助用戶端之間建立P2P通道。
OMCS.Server.exe有對應的設定檔OMCS.Server.exe.config,我們可以通過修改該設定檔來設定一些參數資訊。
四.下載
OMCS多媒體伺服器(帶源碼)。
就基於OMCS進行二次開發而言,在我們掌握了概述、多媒體裝置管理員、多媒體連接器、多媒體伺服器這些內容後,就已經足夠了。後面我們會介紹使用OMCS的更多技巧,以及給出更多的demo來示範如何基於OMCS開發網路多媒體應用系統。