网易云信流媒体服务端架构设计与实现( 二 )


直播系统中还有一个单项的直播功能,主播支持RTMP协议或者私有协议并推送到直播源站,用户从直播源站拉流观看即可 。另外,录制功能同样是将媒体内容推送到录制服务器,录制服务器进行相应的录制后上传到NOS存储上,最后到达点播源站,用户通过CDN回源到点播源站,并进行录制内容的点播 。以上就是在实现纯粹的实时音视频通话基础上,我们相应扩展了其他媒体处理能力,使用户使用场景最大化 。
1.5 中心控制系统

网易云信流媒体服务端架构设计与实现

文章插图
 
因为会面临会话如何发起、节点如何就近接入、通话过程中如何对通话进行管理等问题,所以我们搭建了三个中心控制服务器 。
第一个是会议接入控制中心,它的主要职能是提供IM通道,用户基于IM消息通知服务器发起通话 。
第二个是会话调度中心,它的职能是为用户创建房间、加入房间调度一个最佳节点 。
第三个是房间管理中心,它负责整个房间信息生命周期的管理,并提供RESTful Api,为用户提供房间管理,比如查询目前通话的房间内容等,都可以通过房间管理中心进行相应的处理 。
举个例子,当用户发起一通通话,用户A可以基于IM消息发一个创建会议的消息,会议接入控制中心会将此消息推送给用户B 。同时会议接入控制中心,从房间管理中心、会议调度中心获取相应的信息后,通过IM通道将结果反馈给用户A,用户A再将这些信息反馈给用户B 。用户A或者用户B获取信息后推送给中转分发服务器集群,实现整个会议接入点流程 。
以上的内容主要介绍了网易云信如何基于用户的需求打造音视频的PaaS服务 。
录制服务方案设计
网易云信流媒体服务端架构设计与实现

文章插图
 
以下部分我将介绍了录制服务的搭建,很多人认为云端录制比较容易,但是由于2B业务的用户场景的多样化,使得录制服务会面临很多挑战 。
首先是录制服务方案如何选取 。如果采用实时录制,全量通话进行MCU处理,性能无法满足 。
如果采用离线处理,会遇到一些用户需求问题,比如用户要马上看到文件,但录制还未开始 。
另外,有些用户想要有录制的功能,但是媒体数据他们自己加密了,我们的服务器没法进行解密,所以也无法进行录制 。以上都是一些客观存在的问题,为了应对各种用户场景,我们设计了一套融合录制方案 。
2.1 融合录制方案
网易云信流媒体服务端架构设计与实现

文章插图
 
这张图向大家展示了融合录制方案的内容 。对于即时点播需求很高的用户,我们提供了实时MCU服务器,实时通话时会把通话内容转给MCU服务器进行数据的混合编码,以H264单帧的方式投递到MP4/FLV协议封装服务器上,并将封装后的MP4/FLV数据上传到云存储,这样用户就可以进行相应的点播 。
另外,对于录制功能有要求但对即时点播要求不高的客户,需要选择离线处理的方案,网络码流Dump服务器实时地将需要录制的会话Dump下来,并转成私有Dump文件,离线MCU处理器将私有Dump文件进行调度处理,最终上传到MP4/FLV协议封装服务器上,用户就可以进行相应的点播操作 。以上就是实时录制方案和离线录制方案 。
针对于用户想要将媒体数据加密并且保留录制功能的需求,我们开发了录制SDK 。用户可以基于录制SDK开发用户自建录制服务器,这套录制方案可以解决大多数用户的录制场景 。
2.2 离线录制实现
网易云信流媒体服务端架构设计与实现

文章插图
 
这部分细致介绍一下离线录制方案,用户基于RESTful Api向房间管理中心发送录制请求,房间管理中心基于调度中心就近调度到一个实时网络码流Dump服务器,同时将录制请求和录制参数(用户录制如何布局、是否进行音频能量的选取等)下发到选中的网络码流Dump服务器 。网络码流Dump服务器收到请求通知后会和中转分发服务器建立拉流链路并获取媒体数据,之后进行私有协议文件的封装,这相当于进行一个离线处理,将实时数据封装到离线文件里,然后经过离线MCU服务器进行离线文件处理并录制,再将录制好的码流投递到文件封装上传服务再到存储点播服务器,这样从录制的发起到上传、存储的离线录制就完成了 。
其中私有协议文件格式设计非常重要,离线处理要处理好音频和视频的同步以及画面中所有人的音频和视频的同步,就需要建立一个合适的同步机制以适配私有协议文件 。


推荐阅读