OMCS 开发手册(03) -- 多媒体服务器

       前面我们已经详细介绍了基于OMCS开发网络多媒体应用的客户端程序所必需掌握的内容,现在我们来看一下OMCS服务端的开发。对于使用者而言,OMCS的服务端就非常简单了,只要实现一个用户验证的接口,挂接到OMCS框架上,就可以了。OMCS多媒体服务器的主要职责有:

(1)统一管理所有多媒体设备的配置参数。

(2)管理所有在线的OMCS客户端。

(3)协助OMCS客户端之间建立P2P通道。

(4)在OMCS客户端之间转发信息。

(5)管理多人语音/视频的动态组。

一.IMultimediaServer接口

       OMCS服务端的核心接口是OMCS.Server.IMultimediaServer,它将OMCS多媒体服务端的各个组件装配起来,构成一个整体运行。IMultimediaServer接口的定义如下:

     /// <summary>
    /// OMCS多媒体服务器。
    /// </summary>
    public interface IMultimediaServer
    {
        /// <summary>
        /// 关闭OMCS多媒体服务器。
        /// </summary>
        void Close();

        /// <summary>
        /// Guest过滤器。 当服务器转发某个Owner的语音视频数据给其对应的Guest时,可以在服务端控制只转发给其中的部分Guest。
        /// </summary>
        IGuestFilter GuestFilter { get; set; }

        /// <summary>
        ///  OMCS高级控制选项。
        /// </summary>
        ServerAdvancedOptions Advanced { get; }

        /// <summary>
        ///  用于存放用户上传的白板课件的根目录。默认值为运行目录下的"Coursewares"文件夹。
        /// </summary>
         string CoursewaresRootPath { get; set; }

        /// <summary>
        /// 获取在线用户的ID列表。
        /// </summary>     
        List<string> GetOnlineUserList();

        /// <summary>
        /// 目标用户是否在线。
        /// </summary>   
        bool IsUserOnLine(string userID);
        
        /// <summary>
        /// 当前服务器所监听的端口。
        /// </summary>
        int Port { get; }

        /// <summary>
        /// 当前在线用户的数量。
        /// </summary>
        int UserCount { get; }           
    
        /// <summary>
        /// 智能通道状态判定器是否开启。默认值为true。
        /// </summary>
        bool AgileChannelBusyGuesserEnabled { get; set; }

        /// <summary>
        /// 客户端连接到服务器时,将触发此事件。
        /// </summary>
        event CbGeneric<string> UserConnected;        

        /// <summary>
        /// 客户端连接断开时,将触发此事件。
        /// </summary>
        event CbGeneric<string> UserDisconnected;

        /// <summary>
        ///  当语音消息的接收者不在线时,将触发此事件。参数:语音消息接收者ID - 语音消息发送者ID - AudioMessage。
        ///  注:实现群内语音消息时,可将语音消息接收者ID 设为null,AudioMessage.Tag设置为群ID。
        /// </summary>
        event CbGeneric<string, string, AudioMessage> AudioMessagePostFailed;

       
        /// <summary>
        ///  当在服务端丢帧的时候,触发此事件。参数:MultimediaDeviceType - ownerID - guestID
        /// </summary>
         event CbGeneric<MultimediaDeviceType, string, string> FrameDiscarded;

        /// <summary>
        ///  发送语音消息给目标用户。
        /// </summary>
        /// <param name="destUserID"> 语音消息的接收者ID</param>
        /// <param name="msg">语音消息</param>
        void SendAudioMessage(string destUserID, AudioMessage msg);

        /// <summary>
        ///  刷新指定白板的课件列表(将从目标白板对应的课件文件夹重新加载课件列表,并通知该白板的guest)。
        /// </summary>
        /// <param name="whiteBoardID"> 目标白板的ID</param>
        void RefreshCoursewares(string whiteBoardID);

        /// <summary>
        /// 获取多人语音/视频组的成员。注意:返回的集合不可被修改。
        /// </summary>        
        List<string> GetMultiChatMembers(ChatType chatType, string groupID);
    }                    

       通过 IMultimediaServer接口,我们可以获取在线用户、以及多人语音/视频组的相关信息;并可以通过该接口向在线用户发送消息(关于消息,我们后面章节会详细介绍)。

       在二次开发时,我们可以通过MultimediaServerFactory的CreateMultimediaServer方法取得IMultimediaServer引用,然后将其宿留任何形式的程序中(像WinForm、Windows服务、甚至控制台程序等)。

     /// <summary>
    /// OMCS多媒体服务器工厂,用于创建多媒体服务器实例。
    /// </summary>
    public static class MultimediaServerFactory
    {       
        /// <summary>
        ///  创建多媒体服务器实例。
        /// </summary>
        /// <param name="port">监听的端口</param>
        /// <param name="userVerifier">用户帐密验证器</param>
        /// <param name="securityLogEnabled">是否记录详细的安全日志,一般在debug时使用</param>
        /// <param name="logger">日志记录器</param>
        static IMultimediaServer CreateMultimediaServer(int port, IUserVerifier userVerifier, bool securityLogEnabled = false, IAgileLogger logger = null);
  }

       port 参数用于指定当前OMCS服务器通过哪个端口提供服务(使用TCP协议)。

       userVerifier 用于验证登录的客户端的帐号密码,如果帐号密码不正确,客户端多媒体设备管理器IMultimediaManager的Initialize方法将抛出异常。OMCS服务端开发唯一需要做的就是实现这个接口。

       securityLogEnabled 参数用于指定是否记录安全日志,一般在调试程序的时候,将其设为true,而正式发布运行时,将其设为false。  

       logger参数用于记录安全日志的内容。  

       CreateMultimediaServer方法中另一个参数是OMCSConfiguration,其类图如下所示:      

   

         SystemToken 用于区分不同的基于OMCS开发的系统,并隔离它们。

        OMCS的客户端也能设置SystemToken,如果客户端与服务端的SystemToken的值不一致,则客户端就无法成功登录到OMCS服务端。      

二.默认的多媒体服务器

         如果不需要用户验证,可以直接使用OMCS.Boosts提供的默认的多媒体服务器 OMCS.Server:

(1)使用OMCS提供的 IUserVerifier接口的默认实现类DefaultUserVerifier,其VerifyUser方法始终返回true。

(2)SystemToken的值为""。

         如果需要验证用户帐号密码,或设定SystemToken,则可以将源码修改一下,实现IUserVerifier接口,并替换DefaultUserVerifier,然后重新编译发布。

(3)OMCSConfiguration其它项的设置可以在配置文件OMCS.Server.exe.config中进行修改。 

<configuration>
  <appSettings>    
    <!--服务器监听的端口-->
    <add key="Port" value="9900"/>
    <!--是否记录安全日志文件-->
    <add key="SecurityLogEnabled" value="false"/>    
    <!--UserID的最大长度-->
    <add key="MaxLengthOfUserID" value="11"/>            
  </appSettings>
</configuration>

        配置文件中除了可以设置OMCSConfiguration相关项外,还有其它几个设置项:

(1)Port 用于指定当前OMCS服务器通过哪个TCP端口提供服务。【将被传入MultimediaServerFactory的CreateMultimediaServer方法】

(2)SecurityLogEnabled 用于指定是否记录安全日志。【将被传入MultimediaServerFactory的CreateMultimediaServer方法】

(3)MaxLengthOfUserID 用于设定客户端登录帐号的最大长度,默认值为11,如果所需长度大于这个值,必需重新设定。

       而且,客户端的设定的MaxLengthOfUserID必须同服务器一致,OMCS客户端可以通过调用GlobalUtil类的静态方法SetMaxLengthOfUserID来设定该值。

       默认的OMCS.Server.exe以WinForm的形式宿留了IMultimediaServer对象。其运行起来后,如下图所示:

      

       界面上显示了所有在线用户数量,启动时间、以及用户上下线的事件消息。

       注意:OMCS多媒体服务器使用的是两个端口,一个是通过IMultimediaServer的构造参数指定的TCP端口,另一个是自动绑定的UDP端口(默认为TCP端口号加1)。

       UDP端口是OMCS多媒体服务器内部集成的P2P服务器所使用的,用于协助客户端之间创建P2P通道。             

三.下载

      下载  OMCS多媒体服务器(项目源码位于OMCS.Boosts)。 

      就基于OMCS进行二次开发而言,在我们掌握了概述、多媒体设备管理器、多媒体连接器、多媒体服务器这些内容后,就已经足够了。后面我们会介绍使用OMCS的更多技巧,以及给出更多的demo来演示如何开发基于OMCS的网络多媒体应用系统。

 

下一篇:OMCS 开发手册(04) -- 二次开发流程

上一篇:OMCS 开发手册(02) -- 多媒体连接器

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

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

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

Q Q:168757008

官网: www.oraycn.com

导航

首页

官方网站

联系我们

站内搜索

OrayTalk 企业即时通讯系统

傲瑞通官网

详细说明

客户端下载

OrayMeeting 视频会议系统

详细说明

客户端下载

ESFramework 通信框架

详细说明

SDK与Demo下载

ESFramework FAQ

版本变更记录

OMCS 语音视频框架

详细说明

SDK与Demo下载

OMCS FAQ

版本变更记录

OVCS 视频会议Demo

详细说明

源码下载

傲瑞实用组件

SDK下载

H5Media 纯网页音视频交互

NPusher 推流组件

MCapture 语音视频采集组件

MFile 语音视频录制组件

MPlayer 语音视频播放组件

OAUS 自动升级系统

StriveEngine 轻量级的通信引擎

傲瑞组件 FAQ

授权

授权流程

产品选购指南

授权方案说明

授权SDK使用说明

其它

支持信创国产化

SDK使用技巧

联系我们