OMCS Demo -- 支持双摄像头
在一些软件系统中,可能需要在客户端使用双摄像头,下面我们以一个简单的例子来说明OMCS如何支持双摄像头的。
我们假设一个场景:在1对1的网络在线培训系统中,在学生端需要使用两个摄像头,一个摄像头对着学生的作业本,另一个摄像头对着学生的脸。这样,老师在上课时,就可以同时观看学生的面部表情以及学生在作业本上的具体解题过程,以实现全方位的教育指导。
一.Demo运行效果
根据以上的场景描述,我们知道,客户端可以分为两种类型:学生端、老师端。
demo简单的学生端的运行效果如下图所示:
老师端的运行 效果如下:
二.客户端具体实现
1.学生端实现
OMCS原初的设计是在一个时刻只能使用一个摄像头的,而且,因为OMCS客户端框架内部的多媒体管理器IMultimediaManager使用的是单例模式(Singleton)。
这意味着框架内部使用的是最后创建的那个IMultimediaManager实例(通过MultimediaManagerFactory的GetSingleton方法)。
现在,学生端需要支持同时使用两个摄像头,那我们就要想个解决方案。最终我们采用的方案是:在学生端的进程内登录两个帐号,每个帐号对应一个IMultimediaManager实例,每个IMultimediaManager实例对应一个摄像头。代码实现如下所示:
private void InitializeOMCS4TwoCameras(string userID, string password, string serverIP, int serverPort) { //先初始化第二个摄像头 this.multimediaManagerSecond = MultimediaManagerFactory.GetSingleton(); this.multimediaManagerSecond.CameraDeviceIndex = 1; this.multimediaManagerSecond.Advanced.DontUseAudioDevice = true; this.multimediaManagerSecond.Initialize(userID + "_2", password, serverIP, serverPort); //主OMCS客户端实例,使用第一个摄像头 this.multimediaManagerMain = MultimediaManagerFactory.GetSingleton(true); this.multimediaManagerMain.CameraDeviceIndex = 0; this.multimediaManagerMain.Initialize(userID, password, serverIP, serverPort); }
注意:
(1)我们假设第一个摄像头为主摄像头,第二个摄像头为副摄像头。
(2)一定要先初始化第二个副摄像头对应的IMultimediaManager,再初始化主摄像头对应的IMultimediaManager。
(3)这样,OMCS框架内部就会使用后面创建的这个IMultimediaManager。
(4)副摄像头对应的登录帐号,采用的是原帐号加上后缀“_2”的形式。
2.老师端实现
在了解了学生端的实现方案后,老师端的实现就很容易了。只需要使用两个CameraConnector分别连到学生的主帐号和副帐号即可。
public Form1() { InitializeComponent(); this.multimediaManager = MultimediaManagerFactory.GetSingleton(); this.multimediaManager.CameraDeviceIndex = 0; AccessController access = new AccessController(); this.multimediaManager.Initialize("tea01", "", "127.0.0.1", 9900); this.multimediaManager.AccessController = access; this.cameraConnector1.ConnectEnded += CameraConnector1_ConnectEnded; this.cameraConnector2.ConnectEnded += CameraConnector2_ConnectEnded; } private void button1_Click(object sender, EventArgs e) { this.ConnectStudent("stu01"); } private void ConnectStudent(string studentUserID) { this.cameraConnector1.BeginConnect(studentUserID);//连接到学生的主帐号对应的摄像头 this.cameraConnector2.BeginConnect(studentUserID+ "_2");//连接到学生的副帐号对应的摄像头 }
三.服务端实现
注意,为了演示方便,此Demo的服务端是集成在学生端里面的,所以需要等学生端运行后,再启动老师端。
四.源码下载
OMCS_DoubleCamera.rar--------------------------------------------------------------------------------------------------------
阅读 更多OMCS开发手册系列文章。
Q Q:168757008