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开发手册系列文章 。
Q Q:168757008
官网: www.oraycn.com