集成语音视频框架OMCS

      如果需要在软件系统中集成OMCS以增加视频通话或视频会议的功能,则需要重点考虑以下几个问题。

 

1. 服务端的两种集成方式

(1) 在现有的服务端进程中宿主OMCS服务端:只需要在当前的服务端程序中,new一个MultimediaServer实例就可以了,它需要使用一个TCP端口。

(2) 独立部署OMCS框架提供的OMCS服务端程序:独立部署可以最有效的将视讯流量与业务逻辑分离开来,使得业务逻辑的处理不会因为视讯的流量而导致额外的延迟。

2. 关于用户管理

      由于OMCS没有具体的业务逻辑,所以其服务端的用户管理的实质只是标记用户是否在线。这个是OMCS内置的,不需要与现有的系统有任何瓜葛。

      只是一点,MultimediaServer会通过构造函数注入的IUserVerifier接口来验证登录用户的帐号密码是否合法。 

3. 连接状态同步

    通常,集成OMCS之后,在客户端将有两个TCP连接,一个连接(A连接)指向应用服务器(如ESPlus服务器),另一个连接(B连接)指向OMCS服务器。那么,客户端在线或不在线的状态以哪个为准了?常用的有两种策略。 

(1)以应用服务器的连接为主。 

     客户端的状态以A连接为主。比如,当与应用服务器的连接断开时,客户端就显示为“不在线”,当与应用服务器连接成功时,客户端就显示“在线”。 

     如果采用这种策略,那么在编程时,通常会在客户端成功登录了应用服务器之后,才去连接OMCS服务器(即调用IMultimediaManager的Initialize方法),这样就可能存在一个时间间隙 -- 即应用服务器已经连接成功,而OMCS服务器还未连接。 这个间隙的存在又可能会引发新的状况:如果在这个间隙,其它Guest要访问当前客户端的多媒体设备,就会返回TargetUserOffline的结果而连接失败。发生这种情况时,作为guest的客户端用户就会很纳闷:明明看到对方已经上线了,然而,连接对方的多媒体设备,却返回TargetUserOffline,是怎么回事了?针对这种新的状况,我们可以将连接器的WaitOwnerOnlineSpanInSecs属性设为一个稍大的值,比如10秒,以等待作为Owner的客户端的多媒体管理器初始化成功。 

(2)兼顾应用服务器连接与多媒体服务器的连接 

     我们也可以使用更保险的策略,即只有A连接和B连接都正常时,客户端才“在线”。只要其中任何一个连接断开时,客户端状态就变为“不在线”。这样,就不会出现上面因状态不同步的间隙而出现的状况了。  

     策略(1)和(2)各有优劣。使用策略(1),客户端的登录会快一些,但是会有两个连接状态不一致而出现的种种问题;策略(2)不会出现连接不一致的问题,但是登录就会慢一些,因为要两个连接都成功,且多媒体管理器初始化完成才算进入“在线”状态。 当然,除这两个常用的策略之外,我们也可以根据项目的具体需求,采用更适合自己的方案。      

     就我们的经验而言:以A连接为主连接,即以A连接的状态作为当前客户端是否在线的依据。当A连接断开时,表示客户端离线,此时应主动断开B连接 

4. 使用OMCS时,推荐使用“短连接”方案。

     “短连接”方案的含义是:当客户端启动时,仅仅与应用服务器通信,当两个客户端需要视讯时,则它们同时连到某个OMCS服务器,进行视讯通话,视讯结束后,再都同该OMCS服务器断开连接。

     “短连接”方案可以动态选择OMCS服务器,基于此,可以非常简单地实现OMCS视讯服务器的群集和负载均衡。

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

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

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

原文地址:https://www.cnblogs.com/javawebsoa/p/2990604.html