前面我們已經詳細介紹了基於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的更多技巧,以及給出更多的demo來演示如何基於OMCS開發網絡多媒體應用系統。