浙江省台州市机关服务中心 段汝立
随着5G网络的不断普及,数字化技术需要不断优化视频和音频,以更高的音频质量呈现给人们使用。人们对视频的信息获取需求越来越高,机关、企事业单位和高校对于线上视频会议有很大的需求。除了机关单位常用的几个视频会议系统之外,在一些特定场景下,需要通过其他数字化视频会议形式来提高工作效率。本文以WebRTC(Web实时交流)技术为框架,进行视频会议的系统设计,实现一种可以进行资源动态伸缩的视频会议系统。
4G移动网络的普及以及5G移动网络的开始普及,让人们获取信息的方式变得更加多样化,用户之间的交互方式也越来越多样化,短视频、直播等新的信息交互方式成为当前社会主流。在5G网络开始普及后,视频会议也需要相应地提高自身的音视频质量,以便为用户提供更加流畅的视频会议体验。当前市场中视频会议软件众多,但是基本没有基于WebRTC技术进行设计的视频会议系统。WebRTC技术拥有更加多样化的音视频处理工具与网络框架,可以更加方便地进行音视频媒体服务,该系统可以为用户提供多方视频会议,降低了额外加载匹配的使用率,大大提高了使用便捷性。
在会议管理系统的功能模型中,主要分为4大功能,用户管理、通讯录、会议管理以及通知,如图1所示。通过对整个管理模块进行功能分析后,可以更好地利用会议管理系统的功能。通过图1,直观地展示出了系统模块与各个用户之间的交互关系[1]。
会议管理系统的用例表如表1[2]所示。
表1 会议管理系统用例表Tab.1 Use case table of conference management system
媒体服务器主要为视频会议提供音视频服务,需要与WebRTC框架兼容,为用户提供音视频服务,保证视频会议的音视频效果。媒体服务与WebRTC框架相连接,可以提供多人音视频功能,并与音视频流建立联系。前端控制着音视频流,给出房间号,让媒体服务后台使用。在音视频流交互过程中,前端可以自行关闭音视频流,并为用户提供完整的音视频方案。
视频会议系统有两大子系统,会议管理系统与媒体服务后台系统,都是通过WebRTC框架进行互联,两者之间没有交互功能,但是都具备一定的容错性,为用户提供不同的服务。会议管理系统主要对用户进行管理,将唯一会议号反馈到前端,前端通过唯一会议号,将其返回到媒体服务集群中,完成媒体流的通讯功能[3]。
用户首先进入到会议管理后台进行访问,后台会对用户的信息进行检查和鉴别,检查完毕后建立音视频信息,通过会议号进行媒体服务后台访问,媒体服务后台需要对会议号进行检验,查看其真实性,然后建立音视频流,进行视频会议。会议结束后,WebRTC会与媒体服务后台断开,媒体服务后台会将会议进行存储。WebRTC通过发送会议结束的消息通知会议结束。
(1)会议管理系统微服务模块:在整个模块中,均采用容器部署的形式,各个模块之间通过Redis与RabbitMQ进行交互。存储对象采用腾讯云的线上存储服务,可以方便用户随时查看,大大的保证了文件的安全性。
(2)用户管理模块:为用户提供服务,方便用户进行注册注销、查询、更新,还可以出现多端登录情况的发生。用户管理模块主要对系统的用户信息进行管理,当其他模块需要进行用户信息检索时,需要提供相关验证权限。
(3)通讯录模块:通过添加删除、新建、修改、移动等操作,完成对用户的管理。通过好友管理功能,为会议的管理提供便捷。主持人的功能就是方便对人员进行管理,通过添加和删除好友操作,更好地进行人员管理[4]。
(4)会议管理模块:会议管理模块是在通讯录模块的基础上,对通讯录模块中的好友进行人员筛选,让参会人员可以在最短的时间加入到会议中。新建会议通过记录会议信息,进行时间、会议人员的记录。同时,通过会议识别码的形式生成人数,方便后续的匿名用户使用。
(5)通知模块:为通讯录模块和会议管理模块提供通知信息推送服务,保证用户可以及时接收到会议消息并进行及时的操作。通知模块主要通过Redis和RabbitMQ进行交互。
通过对会议管理后台的各个模块进行分析后,需要有合理的数据库设计,数据库设计可以起到降低开发成本的效果,还可以保证上层数据可以得到更加准确的读写数据,从而提高存储效果。数据库设计需要对数据进行写入、读取、查询以及修改,以保证数据的合理性,避免数据出现冗余。
会议管理系统需要的数据库表很多,所有的数据表中都需要包含下列两个字段,如表2[5]所示。
表2中的这两个字段,是对表中的创建时间进行记录,方便随时对数据库中的数据进行修改,保证效率。数据库中大多数都是采用主键的方式进行字段添加,表与表之间主要通过业务代码层进行联系,以便更好地维护数据库表并及时更新。
表2 所有数据表包含字段信息Tab.2 All data tables contain field information
2.4.1 SFU(选择性转发单元)架构
SFU架构通过媒体服务器的形式进行对流,适用于小型视频会议。主要让所有的上行音频流和视频流都可以集中到媒体服务器中,完成对音视频流的转发,从而实现媒体流互通效果。SFU架构也可以作为一个WebRTC的Peer的客户端,让每一个客户端的上行音视频流都可以准确的发送到另一个客户端或者媒体服务器中。
2.4.2 MCU(多点控制单元)架构
MCU架构适用于大型会议,起到混流、音视频流随意切换效果,与SFU不同,在MCU架构中,可以有多个用户参与,上行音视频流和下行音视频流各有一条。拥有神的信令服务器和资源分配服务器,用于适配分布式架构操作。相较于SFU架构,增设了资源分配器可以更加便捷的对媒体服务器进行资源分配,减少服务器的压力[6]。
2.4.3 动态负载均衡
动态负载均衡设计的目的是适配分布式架构的动态变化,当请求量增加时,分布式集群的节点数量也在增加,传统的负载均衡器无法满足需求,需要使用动态负载均衡器。动态负载均衡器分为SFU和MCU两大部分,以MCU架构为例。在MCU架构中,同一会议中的所有用户都需要在同一个媒体服务器下工作,这样才可以让资源分配器与动态负载均衡器更好的联系在一起,当运行动态负载均衡时可以更好地分配用户所需功能。
(1)用户管理模块主要对用户的一系列操作进行管理,用户可以通过用户名或者手机进行登录,禁止多账户同时登录,极大地提高了用户信息的安全性。刷新token,会自动记录用户浏览的内容,用于后续模块验证用户的真实身份,以保证用户在所登录的时间内所有的行为合法。Controller层中,AuthController用于记录用户的登录方式;UserController用于记录用户的登录密码;FileController用于用户的头像上传。Service层根据业务完成对数据的记录,并通过Controller进行使用。其中,authService用于验证用户密码;UserService方便用户查找所需功能;tokenService主要对token进行处理。
(2)通讯录模块主要对用户进行管理、分组和群组管理,可以对用户进行增加、删除操作,通过通知模块,还可以添加、拒绝好友。通过分组管理,对所有的分组信息进行整理,根据分组ID获取好友。群组管理的功能不仅可以创建群组,还可以对群组中的信息进行修改,还可以获取群组中全部成员的信息。
(3)会议管理模块中,有两大接口,ConferenceAction Controller和Conference UserController。其中,Conference ActionController对会议的状态进行管理,通过Start、Cancel、Finish等函数进行管理。当管理会议状态时,需要先获取实体类,再进行会议状态的修改。
ConferenceUserController对会议成员进行管理,当会议状态未开始时,需要通过添加参会成员通知会议,通过invitedJoin函数,邀请成员加入会议,并记录会议人数,该函数会对用户的ID进行查找,并查询会议状态,根据会议状态进行会议记录并反馈信息;joinMeeting函数通过会议ID进入会议中,通过调用ConferenceAction Controller中的Get函数完成会议内容的获取[7]。
(4)通知模块主要为其他三个模块进行服务,通过通知模块,将所有的信息集合在一个模块中改进型管理,并通过openAPI的方式将其提供给其他三个模块。通知模块的核心功能就是通知站内信息,通过WebSocket实现,通过Redis和RabbitMQ对信息进行缓存,通过MySQL数据库对信息进行存储。以WebSocket服务器作为主要服务器,对各类的信息进行处理,并更加快捷的增加通知事件。
SFU架构采用Coturn服务器进行音视频流的转发操作,MCU架构采用FreeSwitch进行音视频服务,两种架构本身就具备不同的性能测试,后台架构在进行指标采集时,通过Prometheus监控该平台获取CPU、内存和带宽的使用情况,通过Chrome浏览器中的WebRTC测试工具完成帧速率的指标采集。对于SUF而言,采用分布式架构,在进行CPU的使用时,每一个容器的CPU的使用情况都需要根据数量得到平均数。集群模式与单机模式相比,CPU的使用率并没有受到很大影响。由于Coturn服务器需要通过网络对UDP包进行转发,当人数有所增加时,内存占用比降低,内存是随着人数的变化而发生变化的。
MCU架构采用混流方式,因此CPU的使用率较高,相同并发人数使用的网络带宽降低。不管是哪一种架构模式,对于客户端而言,都是为其提供相同的媒体服务,当人数较多的情况下,都可以有更好的速率为其使用,能够处理更多的突发情况。
总而言之,通过会议管理系统和媒体服务系统两大部分,对视频会议系统进行设计与实现,对会议管理系统的四大管理模块进行详细分析,并对其功能进行了阐述。随后简单介绍了媒体服务架构所用到的两种实现方式,在保证功能完整的情况下,提高系统的使用率,实现媒体资源的动态伸缩功能。