OMCS开发手册(03) -- 多媒体服务器
前面我们已经详细介绍了基于OMCS开发网络多媒体应用的客户端程序所必需掌握的内容,现在我们来看一下OMCS服务端的开发。对于使用者而言,OMCS的服务端就非常简单了,只要实现一个用户验证的接口,挂接到OMCS框架上,就可以了。OMCS多媒体服务器的主要职责有:
(1)统一管理多媒体设备的某些公共配置参数。
(2)管理所有在线的OMCS客户端。
(3)协助OMCS客户端之间建立P2P通道。
(4)在OMCS客户端之间转发信息。
一.MultimediaServer类
OMCS服务端的核心类是OMCS.Server.MultimediaServer,它将OMCS多媒体服务端的各个组件装配起来,构成一个整体运行。在二次开发时,我们只要正确地实例化MultimediaServer,然后将其宿留任何形式的应用程序中(像WinForm、Windows服务、甚至控制台程序等)即可。所以,作为OMCS使用者,我们只需要关心它的构造函数:
public MultimediaServer(int port, IUserVerifier userVerifier, OMCSConfiguration config, bool securityLogEnabled, string platformServerIPE)
port 参数用于指定当前OMCS服务器通过哪个端口提供服务(使用TCP协议)。
userVerifier 用于验证登录的客户端的帐号密码。如果客户端提交的帐号密码不正确,多媒体设备管理器IMultimediaManager的Initialize方法将抛出异常。OMCS服务端开发唯一需要做的就是实现这个接口。
securityLogEnabled 参数用于指定是否记录安全日志,一般在调试程序的时候,将其设为true,而正式发布运行时,将其设为false。
platformServerIPE 用于设定OMCS群集平台服务器的地址,在非群集的OMCS系统中,我们可以先忽略它,直接传入null。
MultimediaServer类的构造函数中最关键的参数是OMCSConfiguration,我们将在下面详细讨论。
二.OMCS多媒体服务器配置参数
OMCSConfiguration是多媒体服务器的最关键配置,其类图如下所示:
(1)音频:WaveSampleRate 用于设定麦克风的采样率(8k/16K/32K),默认值我为16000。AudioEncodingQuality 用于设定音频数据的编码质量(Low/Middle/High),默认值为High。
(2)视频:CameraFramerate 用于设定摄像头的采集帧频(1~25),默认值为5。
(3)远程桌面:DesktopFramerate 用于设定远程桌面的采集帧频(1~25),默认值为5。
(4)电子白板:WhiteboardWidth和WhiteboardHeight用于设定电子白板的尺寸(比如800*600,具体取值需要综合考虑所有guest的屏幕大小)。
电子白板的尺寸用于限制其可操作区域,超出区域之外的地方,是不能进行绘图操作的。
(5)SystemToken 用于区分不同的基于OMCS开发的系统,并隔离它们。
OMCS的客户端也能设置SystemToken,如果客户端与服务端的SystemToken的值不一致,则客户端就无法成功登录到OMCS服务端。
OMCSConfiguration 对四种多媒体设备都有对应的参数设置,在客户端的多媒体设备管理器初始化之前,多媒体管理器会先从服务器获取OMCSConfiguration对象,然后再根据其设定的值初始化本地的各个多媒体设备。
三.默认的多媒体服务器
如果不需要用户验证,可以直接使用OMCS提供的默认的多媒体服务器OMCS.Server.exe(文末将提供其可执行程序和源码的下载):
(1)使用IUserVerifier接口的默认实现类DefaultUserVerifier,其VerifyUser方法始终返回true。
(2)SystemToken的值为""。
如果需要验证用户帐号密码,或设定SystemToken,则可以将源码修改一下,实现IUserVerifier接口,并替换DefaultUserVerifier,然后重新发布。
(3)OMCSConfiguration其它项的设置可以在配置文件OMCS.Server.exe.config中进行修改。
<configuration> <appSettings> <!--服务器监听的端口--> <add key="Port" value="9900"/> <!--主窗体上是否显示用户列表。对于高并发应用,建议关闭该显示--> <add key="ShowUserList" value="true"/> <!--是否记录安全日志文件 Omcs.txt--> <add key="SecurityLogEnabled" value="false"/> <!--UserID的最大长度--> <add key="MaxLengthOfUserID" value="11"/> <!--摄像头采集视频的帧率--> <add key="CameraFramerate" value="6"/> <!--音频编码质量,Low/Middle/High。--> <add key="AudioQuality" value="High"/> <!--音频采样率,8000,16000,32000。--> <add key="WaveSampleRate" value="16000"/> <!--桌面帧率--> <add key="DesktopFramerate" value="1"/> <!--白板宽度--> <add key="WhiteboardWidth" value="800"/> <!--白板高度--> <add key="WhiteboardHeight" value="600"/> </appSettings> </configuration>
配置文件中除了可以设置OMCSConfiguration相关项外,还有其它几个设置项:
(1)Port 用于指定当前OMCS服务器通过哪个TCP端口提供服务。【将被传入MultimediaServer类的构造函数】
(2)ShowUserList 用于控制采用默认的UI主界面时,是否显示在线用户列表。
一般,只有在调试和测试阶段,我们才会开启显示用户列表。因为,当在线用户数很多时,窗体实时刷新每个用户的状态数据,其消耗CPU是不可忽视的。
(3)SecurityLogEnabled 用于指定是否记录安全日志。【将被传入MultimediaServer类的构造函数】
(4)MaxLengthOfUserID 用于设定客户端登录帐号的最大长度,默认值为11,如果所需长度大于这个值,必需重新设定。
而且,客户端的设定必须同服务器一致,OMCS客户端可以通过调用GlobalUtil类的静态方法SetMaxLengthOfUserID来设定该值。
默认的OMCS.Server.exe以WinForm的形式宿留了MultimediaServer对象。其运行起来后,如下图所示:
界面上显示了所有在线的用户列表,以及服务器相关的状态信息。
注意:OMCS多媒体服务器使用了两个端口,一个是通过MultimediaServer的构造参数指定的TCP端口,另一个是自动绑定的UDP端口(默认为TCP端口号加1)。
UDP端口是OMCS多媒体服务器内部集成的P2P服务器所使用的,用于协助客户端之间创建P2P通道。
OMCS.Server.exe有对应的配置文件OMCS.Server.exe.config,我们可以通过修改该配置文件来设定一些参数信息。
四.下载
就基于OMCS进行二次开发而言,在我们掌握了概述、多媒体设备管理器、多媒体连接器、多媒体服务器这些内容后,就已经足够了。后面我们会介绍使用OMCS的更多技巧,以及给出更多的demo来演示如何基于OMCS开发网络多媒体应用系统。