现在的位置: 首页 > 综合 > 正文

OMCS开发手册(04) -- 二次开发流程

2011年02月06日 ⁄ 综合 ⁄ 共 3193字 ⁄ 字号 评论关闭

      在掌握了前面几篇关于OMCS的详细介绍后,我们就可以正式基于OMCS进行二次开发了。下面我们就从服务端和客户端的角度分别介绍开发的步骤。

一.服务端开发

      抛开具体的业务逻辑而言,就OMCS的服务端的开发而言相当简单。步骤如下所示:

(1)下载  OMCS多媒体服务器(带源码)

(2)使用VS打开OMCS.Server项目,修改其中的DefaultUserVerifier类的实现,为VerifyUser方法添加验证客户端用户帐号密码的逻辑。

(3)如果需要使用自定义的主窗体,则实现它。

(4)更改配置文件App.config中的相关配置。

(5)发布项目,部署并运行。

      就像OMCS开发手册(00) -- 概述一文中描述的,OMCS多媒体服务器和实现业务逻辑的应用服务器是相互独立的。

     

      我们也可以在OMCS服务器进程中,集成具体的业务逻辑,将两个进程合并为一个。但是我们并不推荐这样做,因为当负载增加时,还是需要将它们分开部署的;而且,分开部署还有一个好处就是避免它们之间相互干扰。 

二.客户端开发

      相对于OMCS服务器端,客户端开发要稍微复杂一些。

(1)在项目中添加对OMCS.dll、PaintFramework.dll、ESBasic.dll的引用。

(2)将OMCS的连接器组件/控件添加到工具箱中:在VS的工具箱的空白地方右键快捷菜单 => 选择项,在弹出的“选择工具箱项”的窗体上,点击“浏览”按钮,选中OMCS.dll文件,再点击“确定”。

(3)开始编码,调用MultimediaManagerFactory的静态方法GetSingleton获取多媒体管理器单件实例,设置多媒体管理器的属性,并调用其Initialize方法完成初始化。比如:       

    IMultimediaManager multimediaManager = MultimediaManagerFactory.GetSingleton();
    multimediaManager.ChannelMode = ChannelMode.P2PChannelFirst;
    multimediaManager.SecurityLogEnabled = false;                
    multimediaManager.CameraDeviceIndex = 0;
    multimediaManager.MicrophoneDeviceIndex = 0;
    multimediaManager.SpeakerIndex = 0;
multimediaManager.DesktopEncodeQuality = 3; multimediaManager.Initialize("aa01","pwd", "192.168.0.98", 9900);

(4)预定multimediaManager的ConnectionInterrupted、ConnectionRebuildSucceed事件,以实时监控多媒体管理器与多媒体服务器之间的TCP连接的状态。 

        multimediaManager.ConnectionInterrupted += new CbGeneric(multimediaManager_ConnectionInterrupted);
        multimediaManager.ConnectionRebuildSucceed += new CbGeneric(multimediaManager_ConnectionRebuildSucceed);

        void multimediaManager_ConnectionInterrupted()
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new CbSimple(this.multimediaManager_ConnectionInterrupted), null);
            }
            else
            {                
                this.toolStripLabel_state.Text = "连接状态:断开";
                this.toolStripLabel_state.ForeColor = Color.Red;
            }
        }

        void multimediaManager_ConnectionRebuildSucceed()
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new CbSimple(this.multimediaManager_ConnectionRebuildSucceed), null);
            }
            else
            {
                this.toolStripLabel_state.Text = "连接状态:正常(重连成功)";
                this.toolStripLabel_state.ForeColor = Color.Black;               
            }
        }

(5)将连接器组件从工具箱拖到您的窗体或控件的表面。

(6)调用连接器的BeginConnect方法连接到目标多媒体设备,并预定其ConnectEnded事件,以获取连接是否成功的结果。

(7)预定连接器的Disconnected事件,当连接器的连接断开时获取通知并做相关的处理。比如: 

        this.cameraConnector1.ConnectEnded += new CbGeneric<ConnectResult>(cameraConnector1_ConnectEnded);            
        this.cameraConnector1.Disconnected += new CbGeneric<ConnectorDisconnectedType>(cameraConnector1_Disconnected);

        void cameraConnector1_ConnectEnded(ConnectResult result)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new CbGeneric<ConnectResult>(this.cameraConnector1_ConnectEnded), result);
            }
            else
            {
                this.label_camera.Text = string.Format("视频:{0}", result == ConnectResult.Succeed ? "成功连接到设备" : result.ToString());
            }
        }

        void cameraConnector1_Disconnected(ConnectorDisconnectedType connectorDisconnectedType)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new CbGeneric<ConnectorDisconnectedType>(this.cameraConnector1_Disconnected), connectorDisconnectedType);
            }
            else
            {
                this.label_camera.Text = string.Format("视频:与设备的连接已断开,原因:{0}", connectorDisconnectedType);
            }
        }

 (8)当业务逻辑需要挂断连接器,或宿主窗体将被关闭时,需要调用连接器的Disconnect方法,以主动断开到目标多媒体设备的连接。最后还要释放连接器对象。比如: 

        private void ChatForm_FormClosing(object sender, FormClosingEventArgs e)
        {            
            this.cameraConnector1.Disconnect();
            this.cameraConnector1.Dispose();
        }  

      本文介绍的只是使用OMCS的最基本开发流程,关于如何更好地使用OMCS的各个特性来构建我们的网络多媒体应用,请参考后面即将退出的“OMCS使用技巧”类的文章。

 

抱歉!评论已关闭.