在開發類似語音視訊聊天或視訊會議這樣的系統時,它們通常都包含一個測試音視訊裝置的功能 -- 通過該測試,使用者可以選擇要使用的音視訊裝置(對於程式內部而言,就是確定要使用裝置的Index),就像QQ的語音測試嚮導和視訊設定。這裡,我介紹一下如何使用OMCS來實現類似的功能,只需少量程式碼即可搞定。先上測試程式執行起來後的截圖:
如果音效卡沒有安裝,或裝置無效,會給出相應的提示,就像下面這樣:
1.實現思路
(1)由於OMCS是基於網路的語音視訊框架,是標準的C/S結構,所以必須要有服務端的存在。
(2)雖然OMCS服務端可以部署在有網路連線的任何地方,但是,為了方便起見,我們直接在測試程式中整合它(只需要new一個MultimediaServer物件就OK)。
(3)以隨便一個ID(如“tester”)作為OMCS客戶端使用者,連線到整合的服務端。然後,使用OMCS提供的聯結器連線自己的攝像頭、麥克風,便可看到效果。
(4)程式啟動時,我們可以使用OMCS工具類,來列舉所有的攝像頭裝置、麥克風裝置、揚聲器裝置,並檢測音效卡是否安裝。
2.具體實現
(1)初始化OMCS伺服器
private MultimediaServer multimediaServer; ... OMCSConfiguration configuration = new OMCSConfiguration(10, 1, EncodingQuality.High, 16000, 800, 600); this.multimediaServer = new MultimediaServer(9000, new DefaultUserVerifier(), configuration, false, null);
(2)列舉音視訊裝置
//獲取攝像頭列表 IList<CameraInformation> cameras = Camera.GetCameras(); this.comboBox1.DataSource = cameras; if (cameras.Count > 0) { this.comboBox1.SelectedIndex = 0; } //獲取麥克風列表 IList<MicrophoneInformation> microphones = SoundDevice.GetMicrophones(); this.comboBox2.DataSource = microphones; if (microphones.Count > 0) { this.comboBox2.SelectedIndex = 0; } //獲取揚聲器列表 IList<SpeakerInformation> speakers = SoundDevice.GetSpeakers(); this.comboBox3.DataSource = speakers; if (speakers.Count > 0) { this.comboBox3.SelectedIndex = 0; }
(3)點選開始按鈕,測試裝置
if (!SoundDevice.IsSoundCardInstalled()) { this.label_error3.Visible = true; this.label_error3.Text = "音效卡沒有安裝"; } //初始化多媒體管理器 this.multimediaManager.CameraDeviceIndex = this.comboBox1.SelectedIndex; this.multimediaManager.MicrophoneDeviceIndex = this.comboBox2.SelectedIndex; this.multimediaManager.SpeakerIndex = this.comboBox3.SelectedIndex; this.multimediaManager.ChannelMode = ChannelMode.P2PDisabled; this.multimediaManager.CameraVideoSize = new System.Drawing.Size(320, 240); this.multimediaManager.Initialize("tester", "", "127.0.0.1", 9000); //與OMCS伺服器建立連線,並登入 //嘗試連線裝置 this.cameraConnector1.BeginConnect("tester"); this.microphoneConnector1.BeginConnect("tester");
根據使用者選擇的裝置索引,設定裝置管理器的CameraDeviceIndex、MicrophoneDeviceIndex、SpeakerIndex 屬性,初始化管理器之後,使用聯結器物件(cameraConnector1、microphoneConnector1)連線自己的攝像頭和麥克風。
如果一切正常,視窗將會顯示攝像頭採集到的視訊,揚聲器將會播放麥克風採集到的聲音。
3.測試程式