OMCS 开发手册(06) -- 分离信道

       在OMCS构建的默认体系中,OMCS客户端与OMCS服务器之间只有一个通信通道(信道),在不考虑客户端与客户端之间P2P通道的情况下,所有类型的数据(语音、视频、远程桌面、白板、控制命令、通知消息),都是经由这个信道来传送的。但是,在某些具体的应用中,我们可能需要把信道依据类型进行分离,OMCS已经内置了对这一功能的支持。

       举个例子:在我们刚构建的一个视频会议系统中,就出现了类似的要求。该系统对语音的要求特别高,希望能将传送语音的信道独立出来,以避免其它类型数据传送时可能产生的拥挤而影响到语音的流畅性。所以,在实现该系统时,我们为语音准备了一条专门的信道,该信道仅仅传送语音数据。 如下图所示:

      

       在上图中,红色的线表示语音信道,而且,信道与OMCS服务器是一一对应的。

       我们将默认体系中的OMCS服务器,称为OMCS主服务器,客户端与其之间的连接通道称为主信道(即默认信道);新增加的用于转发语音数据的OMCS服务器称为OMCS信道服务器,客户端与其之间的连接通道,在本例中可称为语音信道。客户端A和B之间如果要传送语音数据,则所有语音数据都将经过语音信道进行传送。

        那么,当我们想分离某个类型数据的信道时,该如何做了? 

1.新增部署信道服务器

       OMCS信道服务器与OMCS主服务器在内部实现上,实际上是同一个东西,只是用途不一样而已。在实例化OMCS信道服务器时,我们只需要new一个新的MultimediaServer就可以了,其相关参数配置(如OMCSConfiguration)都可以与主OMCS服务器完全一样。在部署时,这个新的MultimediaServer可以与OMCS主服务器位于同一台机器,也可以位于不同的机器,甚至是在不同的IDC机房。

       OMCS信道服务器与OMCS主服务器之间不需要任何通信。 

2.客户端绑定信道

       如果客户端要启动信道绑定的功能,则需要调用IMultimediaManager重载的Initialize方法。

    void Initialize(string userID, string password, string serverIP, int serverPort, Dictionary<MultimediaDeviceType, AgileIPEndPoint> deviceChannelDic);

       该Initialize与我们常用的那个Initialize方法相比,最后多了一个参数deviceChannelDic,我们可以通过它来指定要分离的数据类型以及对应的OMCS服务器地址。

(1)Initialize方法的第三、四个参数,即是指定的OMCS主服务器的地址,所有类型的数据的默认都是通过该主信道来进行传送的。

(2)如果想使用专门的信道来传送某个类型的数据,则将其设置到deviceChannelDic参数中。deviceChannelDic的key为要分离的数据的类型(即设备类型),value为信道服务器的地址。

  假设,我们的OMCS主服务器监听的地址为(59.184.37.169:9900),而我们希望将语音数据,通过监听在(112.124.42.104:4500)的信道服务器进行传送,则可以如下调用Initialize方法:

    Dictionary<MultimediaDeviceType, AgileIPEndPoint> channelDic = new Dictionary<MultimediaDeviceType, AgileIPEndPoint>();
    channelDic.Add(MultimediaDeviceType.Microphone, new AgileIPEndPoint("112.124.42.104",4500));
    multimediaManager.Initialize("aa01", "", "59.184.37.169", 9900, channelDic);

3.监控信道的状态

(1)Initialize方法在执行时,除了与OMCS主服务器建立主信道外,同时,也会与deviceChannelDic指定的所有OMCS信道服务器建立信道,只要有一个信道建立失败,则Initialize方法将会抛出异常。

(2)在程序运行的过程中,如果某个信道连接断开,则IMultimediaManager会触发ConnectionInterrupted事件。事件参数为信道对应的OMCS服务器的地址(可以是主服务器、也可以是信道服务器)。

    /// <summary>
    /// 当与目标媒体服务器的连接断开时,触发此事件。事件参数:目标多媒体服务器的地址。
    /// </summary>
    event CbGeneric<IPEndPoint> ConnectionInterrupted;

        如果信道连接断开,则于该信道上工作的多媒体连接器(如MicrophoneConnector)将停止工作,并触发其Disconnected事件。

(3)如果IMultimediaManager的AutoReconnect属性设置为true,则断开的信道会自动尝试重连,重连成功后,IMultimediaManager将会触发ConnectionRebuildSucceed事件。

    /// <summary>
    /// 当与目标媒体服务器重连成功时,触发此事件。事件参数:目标多媒体服务器的地址。
    /// </summary>
    event CbGeneric<IPEndPoint> ConnectionRebuildSucceed;

 

下一篇:OMCS 开发手册(07) -- 扩展视频设备

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

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

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

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

Q Q:168757008

官网: www.oraycn.com

导航

首页

官方网站

联系我们

立即咨询 

站内搜索

ESFramework 通信框架

详细说明

SDK与Demo下载

ESFramework FAQ

版本变更记录

OMCS 语音视频框架

详细说明

SDK与Demo下载

OMCS FAQ

版本变更记录

OrayTalk 企业即时通讯系统

详细说明

客户端下载

OVCS 视频会议系统

详细说明

源码下载

傲瑞实用组件

SDK下载

H5Media 纯网页音视频交互

NPusher 推流组件

MCapture 语音视频采集组件

MFile 语音视频录制组件

MPlayer 语音视频播放组件

OAUS 自动升级系统

StriveEngine 轻量级的通信引擎

傲瑞组件 FAQ

授权

授权流程

产品选购指南

授权方案说明

授权SDK使用说明

其它

支持信创国产化

SDK使用技巧

联系我们