点击上方“LiveVideoStack”关注我们
▲扫描图中二维码或点击阅读原文▲
了解音视频技术大会更多信息
//
编者按:视频会议已成为日常办公不可或缺的一部分,为远程交流的人们提供了许多便利。本次RTSCon 2022会议,由RTS社区和LiveVideoStack音视频技术社区联合出品,很荣幸地邀请到了来自vivo的架构师李莹莹老师,为我们介绍了FreeSWITCH架构、vivo自研的视频会议架构、以及在实践过程中应用到的一些方案等。
文/李莹莹
整理/LiveVideoStack
大家好,我是来自vivo AI研究院的李莹莹,本次我的分享主题是FreeSWITCH在视频会议中的实践。首先介绍下FreeSWITCH。
01 FreeSWITCH简介
FreeSWITCH是一个软件的电信交换平台。感兴趣的同学们可以看一下杜金房老师写的这本《FreeSWITCH 权威指南》。经过两年多的实践,我们认为FreeSWITCH的是一个功能全面、性能高效、容易扩展、文档完整的项目,很适合年轻的团队来入门。
1.1 FreeSWITCH框架
FreeSWITCH的框架很像是一个披萨,它有一个核心层,还有多个外围模块。核心层里面定义了一些关键数据结构、状态机和框架流程,同时它还提供了一个公共应用程序接口,供外围接口去调用。它是一个抽象并稳定的框架。它的外围接口是根据核心框架里面定义的抽象接口来实现具体的业务逻辑,就像一个钩子一样嵌入到整个框架中。上图列出了几个主要的模块(接口),例如终点模块,一般终端都会接入这个模块。我们主要会用到应用程序里面的会议模块。除此之外像应用程序、编解码器、事件套接字等有很多可实现的接口。
1.2 FreeSWITCH会议模块
下面介绍一下FreeSWITCH会议模块。我们整个的会议系统基本上是围绕FreeSWITCH的会议模块来做的。上图所示的是FreeSWITCH会议模块实现的一些融屏方案。比如它可以支持3x3的视频会议布局,还有突出显示演讲者的布局视图等等。上图右侧列举了一些会议中的常用操作,如创建会议、查询会议、邀请入会、提出会议、成员禁言、成员禁听,以及安全相关的会议密码、会议锁定和会议录音等这些都是FreeSWITCH所支持的,可以满足视频会议中的基本操作,所以我们也称它是一个完备的MCU视频会议解决方案。
02 vivo自研视频会议架构
我们vivo自研的视频会议架构主要是围绕FreeSWITCH和它的视频会议模块来建设的。在终端层我们基于WebRTC开发了一套跨平台的SDK,支持Windows、Android、iOS等平台。在云端对外接口方面,我们提供了三类协议的端口,包括http、SIP和媒体等协议接口。http接口主要处理的是与业务逻辑相关的工作,如用户的账号管理、会议创建、会议预定、会议要求、日程安排等功能,它对应到我们自研的会议管理服务。SIP接口主要是在加入会议时,实现会议远端的位置信息以及媒体信息的交换。媒体接口包括传输的RTP、RTCP、Stun等媒体相关协议,实现会话中音视频数据在会话两端的实时传输。
FreeSWITCH是一个有状态服务,为了实现FreeSWITCH的集群化部署,我们自研了一套方案,在FreeSWITCH前面架设了自研的SIP代理服务和媒体代理服务,这两个服务都是无状态的,主要是做会话路由和媒体路由。经过这样的处理,我们实现了低延时、高清、流畅、易扩展、高并发、稳定的一套会议系统。
03 媒体端口复用方案
3.1 方案1:公网信令端口和媒体端口分片
接下来介绍下一些我们的优化方案,首先是媒体端口复用方案。什么是媒体端口复用?就是这里云端对外只提供一个媒体传输的端口,所有终端