基于webrtc的视频聊天室(三)之域和上下文设计

域(scope)的概念指的是 房间,准确的说应该是类似于房间。因为视频聊天室存在这样的情况:一对一,一对多和群组聊天。如果统一用房间表示也可以,不过会有很多冗余,所以这里按域设计,将各种情况,进行不同的处理。


域的分类设计

下面分析下各种情况:

  • 一对一聊天:需要实现客户端A和客户端B互相连接,那么该域需要两个webrtc 对象,互相连接。
  • 一对多聊天:需要实现客户端A和客户端B、C连接,但B、C不需要和A连接,并且B和C也不需要连接,那么该域需要 N + 1 个 webRtc 对象,1 为一,N 为多,1 需要连接 N, 但N 不需要和1 连接。
  • 群组聊天(多对多):需要实现客户端A、客户端B和客户端C两两之间互连。那么该域需要N的2次方个WebRtc 对象。例如客户端A 需要三个webRtc 对象,一个用作输出(即输出自身流媒体信息),另外两个用作接收(即接收B 和 C 的流媒体信息)。

注 :这里的连接指的是 服务器端的 KMS 内部连接,如果A连接B ,但B不连接A,那么B 能够收到A的媒体信息,但A不能够收到B的媒体信息,并且连接意味着需要建立对应的 webRtc 对象。


域的生命周期

​ 域的生命周期和用户以及域的类型是严格相关的;

  • 一对一聊天时,双方断开一方,则销毁该域;
  • 一对多聊天时,一的一方断开,则销毁该域;
  • 群组聊天时,删除该群组时,则销毁该域;

域的类设计

Scope顶级的域接口,只含有一个 dispose(销毁)方法。

BaseScope :域的基础类,其它类均从此类继承而来。该类含有域所需要的基本信息:域id 、域的名称、域发起者名称以及媒体管道。除了域的名称不是必须的外,其余的均需要赋值。

以下域均继承自BaseScope

  • OneToOneScope : 一对一聊天时,需要用到的域;

  • OneToManyScope: 一对多聊天时,需要用到的域;

  • GroupScope:群组聊天时,需要用到的域;

域的工厂类设计

OneToOneScopeFactory : 提供了创建一对一域,通知成员以及销毁域的方法;

OneToManyScopeFactory: 提供了创建一对多域,通知成员,移除成员以及销毁域的方法;

GroupManyScopeFactory: 提供了创建群组域,通知成员,从指定成员接收媒体流,以及关闭会议室和退出会议室方法。

通过工厂类去操作域,便于统一维护,而且利用spring 的依赖注入,更方便我们进行各种操作。

上下文设计

上下文是指在程序运行期间,需要统一维护的数据。其中包括用户上下文,域上下文,存放有webRtc对象的上下文。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值