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

       在掌握了前面几篇(概述多媒体管理器多媒体连接器多媒体服务器)关于OMCS的详细介绍后,我们就可以正式基于OMCS进行二次开发了。下面我们就从服务端和客户端的角度分别介绍开发的步骤。

一.服务端开发

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

(1)下载  OMCS多媒体服务器(项目源码位于OMCS.Boosts)

(2)使用VS打开OMCS.Server项目,添加自己的 UserVerifier 类实现 IUserVerifier接口,为VerifyUser方法添加验证客户端用户帐号密码的逻辑。

(3)将UserVerifier实例作为 MultimediaServerFactory 的 CreateMultimediaServer 方法的参数传入。

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

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

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

       就像OMCS 语音视频框架 -- 概述一文中描述的,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使用技巧”系列文章。

 

下一篇:OMCS 开发手册(05) -- 集成OMCS

上一篇:OMCS 开发手册(03) -- 多媒体服务器 

--------------------------------------------------------------------------------------------------------------------  

下载免费版本的OMCS以及 demo源码

阅读 更多OMCS开发手册系列文章

Q Q:168757008

官网: www.oraycn.com

导航

首页

官方网站

立即咨询 

站内搜索

ESFramework 通信框架

详细说明

SDK下载

ESFramework FAQ

版本变更记录

OMCS 语音视频框架

详细说明

SDK下载

OMCS FAQ

版本变更记录

OrayTalk 企业即时通讯系统

详细说明

客户端下载

傲瑞实用组件

SDK下载

NPush 消息推送组件

StriveEngine 轻量级的通信引擎

MFile 语音视频录制组件

MCapture 语音视频采集组件

MPlayer 语音视频播放组件

OAUS 自动升级系统

傲瑞组件 FAQ

授权

授权流程

产品授权说明

产品选购指南

授权SDK使用说明

其它

SDK使用技巧

联系我们

电话:027-87638960

Q Q:168757008

邮件:master@oraycn.com