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

在掌握了前面几篇关于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使用技巧”类的文章。

时间: 2024-10-09 22:52:05

OMCS开发手册(04) -- 二次开发流程的相关文章

Apache Mina开发手册之二

Apache Mina开发手册之二 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 四.NIO概述 NIO API是Java 1.4版引入的,NIO的意思是非阻塞的I/O通信.要知道Mina的NIO是基于NIO-1开发的,而在JDK 7中引入了NIO-2的库,但Mina还没有从NIO-2中获得各方面的提升,因此Mina还是基于NIO-1的.虽然Oracle官方是把NIO的N作为New的解释,但业界普遍把这个N解释为Non-Blocking. Mina

Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序

NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行h264视频编码和aac音频编码,并发送到RTMP服务器,从而实现Android摄像头直播.程序名为NdkRtmpEncoder,在这里把整个过程,和大体框架介绍一下,算是给需要的人引路. 开发思路 首先,为什么要用NDK来做,因为自己之前就已经实现过RTMP推流.RTMP播放.RTSP转码等等各种

1,下载和部署开发环境--AutoCAD二次开发(2020版)

教程说明: 本教程为2019年10月开始编撰,使用CAD官方最新版本的软件和库.对旧版本仍有参考价值. 本教程中使用的各种软件版本为官方指定匹配版本. 本教程需要你拥有编程基础,对于普通编程常识不再敷述.当然,你可以留言提问. 环境需求为: AutoCAD 2020版 ObjectARX SDK 下载地址:https://www.autodesk.com/developer-network/platform-technologies/autocad/objectarx-license-downl

海思Hi3518Ev200 4G wifi无线网络视频监控摄像开发板可二次开发

21世纪,经济社会及物联网,云计算,社会网络,车联网等新型移动通信业务日新月异的发展,2013年,我们的通信技术进入了第四代的移动信息系统--4G通信技术.网线下的网络已不能满足需求,人们对移动通信网络,无线通信网络技术的需求已经被应用到各个行业领域.其中4G网络的无线网络视频监控就被各个行业所应用,如野外环境下的监控.渔塘.果园.无人售货柜.无人配送等等. 为了便于产品研发,减少成本.BOJINGnet基于海思HI3518EV200的H264视频压缩SOC研发出了用于4G网络无线网络视频监控摄

python开发初期及二次开发C api

1,python2 or python 区别, https://wiki.python.org/moin/Python2orPython3 python software foundation 2,python 应用(最近Ruiy在搞openstack知道在openstack上有一个web框架(django)和openstack服务上的每一个组件的客户端都是由python写的) python C api https://docs.python.org/3/c-api/index.html pyt

开源系统_二次开发(转)

转自http://www.phpchina.com/portal.php?mod=view&aid=40204, 更多详细资料请参看原文 最好最实用的二次开发教程 ◆二次开发 什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一 般来说都不会改变原有系统的内核. 为什么要二次开发? 随着信息化技术的不断发展,IT行业涌现出了一系列优秀的开源作品,其作者或是个人,或是项目小组,或 是软件公司.选择和应用这些优秀的开源软件,并在此基础上进行

NetSuite二次开发服务改变中小企业发展困境!

目前国内的中小企业广泛采用国产ERP/CRM软件,主要是因为这些软件适应国内的发展模式,与国内的财务汇报形式需求相一致. 然而,许多公司发现这些国产软件的优势仅仅停留在表面,像国产ERP/CRM系统由于其隐形成本高,配置复杂,缺乏可扩展性,会为企业带来一定的负担.在这里,我们一起来关注一个来自美国的云系统-NetSuite,是如何满足不同企业需求,并实现在整个ERP领域,排在全球主流ERP厂商中的第一位. NetSuite成立于1998年,专注于云系统超过15年,在超过10个国家拥有办公场所,已

Revit二次开发实现BIM盈利(以橄榄山快模为例讲解) 视频讲座下载

应笔墨闲谈群的邀请, 在10月11号晚8:30分在其群做了一次关于BIM二次开发的讲座. 由于参与者基本上都是从设计院和施工单位来的,所以对Revit二次开发做了纵览性的讲解, 以非程序员能听懂的方式讲解Revit二次开发.使这些行业领导或负责人能明白Revit二次开发的大概特点,以及其能实现的功能. 便于他们在自己的业务需要Revit插件时,能更好的思考和决策插件项目的立项和推动. 下面是这次讲座的提纲: Revit二次开发纵览,以橄榄山快模为例演示API概念Revit二次开发原理Revit二

什么是php二次开发,怎么做php二次开发?

什么是php二次开发 所谓的二次开发,简单的说就是修改别人的东西,变成你想要的东西,插件基本属于高端了,根据现有的程序的不足,加以改进修饰,然后达到自己想要实现的功能和效果. 怎么做php二次开发 二次开发和一次开发不同的地方在于你是要先看懂别人的代码再去做,二次开发,首先你需要知道自己对什么程序进行二次开发,比如一些招聘信息上会写Discuz二次开发,ShopEX二次开发.这些都是对已经成型的程序进行的功能性扩展开发. 第一,你要有这个开 源 产 品的所用语言的语言基础,就是能看懂代码是最基本

Office(Excel、Word)二次开发&mdash;&mdash;VSTO

Office(Excel.Word)二次开发--VSTO Office(Excel.Word)二次开发--VSTO Office二次开发模式: 1) VBA(visual studio for application),功能有限,语言落后. 2) .net2003中的对象模型(com组件,excelobject 11 library)功能强大,需手动操作. 3) vs.net2005中的vsto(visual studiotool for office)    VSTO方便快捷功能强大. 2).