广播与P2P通道(上) -- 问题与方案

简介: 我们设想一下网络视频会议的场景:在一个视频会议虚拟房间中,每个人都需要将自己的视频数据发送给房间中的其它人,从而实现在同一个地方进行实时会议的效果。为了简单起见,我们假设,这个虚拟的视频会议房间中只有三个人,其结构可以简化描绘如下:     客户端A需要将自己的视频数据发送给B和C,客户端B需要发给A和C,客户端C需要发给A和B。

我们设想一下网络视频会议的场景:在一个视频会议虚拟房间中,每个人都需要将自己的视频数据发送给房间中的其它人,从而实现在同一个地方进行实时会议的效果。为了简单起见,我们假设,这个虚拟的视频会议房间中只有三个人,其结构可以简化描绘如下:

   

客户端A需要将自己的视频数据发送给B和C,客户端B需要发给A和C,客户端C需要发给A和B。有了这个场景基础,接下来,我们将从数据传送通道的角度来分析在这个模型中可以采用的通道方式,以及进行对比并找出最优的通道模型。所谓最优,就是服务器所占用的带宽(包括上行和下行)最小,因为在现实的视频会议案例中,带宽是不可忽视的成本之一。为了下面能进行更具体的数据分析和比较,我们假设视频的大小为320*240,帧频为10fps,这样,一路视频流经过编码后,所需的码率大概为30KByte/s。

1.模型1:最简单的通道模型

对于上述场景,我们第一反应能想到的解决方案的要点:

(1)所有的视频数据都经过服务器中转。

(2)以客户端A为例,对于采集到的每一帧视频,调用两次发送方法,一次发送给B,一次发送给C,都经过服务器中转。客户端B和C也是同理。

(3)服务器仅仅转发数据,不需加入任何其它的逻辑。

现在,我们计算一下服务器的带宽占用。

上行:30*2*3 = 180KByte/s。(每个客户端需要上传两份相同的视频流,3个客户端)

下行:30*2*3 = 180KByte/s。(每个客户端需要下载另外两个用户的视频流,3个客户端)

在这种模型下,上下行是完全对称的。这个模型有个很明显的缺陷:每个客户端采集的每一帧视频都需要上传两次。修正这个缺陷也很容易,在服务端引入广播功能。

2.模型2:在服务端进行广播

在第一个模型的基础上,我们在服务端增加广播功能,将视频帧的接收者的决定权由客户端转交给服务器:

(1)客户端将采集的每一帧发送给服务器,服务器收到该帧后,根据当前会议的参与者,决定需要将视频帧转发给哪几个客户端。

(2)以客户端A为例,对于采集到的每一帧视频,只需调用一次发送给服务器的方法。

我们再来计算一下服务器的带宽占用。

上行:30*3 = 90KByte/s。(每个客户端上传自己的视频流,3个客户端)

下行:30*2*3 = 180KByte/s。(每个客户端需要下载另外两个用户的视频流,3个客户端)

在这种模型下,上下行不再对称了,上行的流量减小了一半,效果还是很明显的。

3.模型3:结合P2P通道

为了进一步减少服务器的带宽占用,我们还有一个杀手锏,那就是在模型2的基础上使用P2P通道。理想的情况下,A和B以及C相互之间的P2P通道都可以创建成功,这样,就没有任何数据需要经过服务器中转了,所以,服务器的上行和下行的带宽占用都是0。但是,现实中常见的情况很复杂。比如,假设客户端C的路由器的NAT是对称型的,那么,C和A以及C和B之间的P2P通道无法创建成功,但A和B之间的P2P是成功的。基于此假设,我们希望,A和B之间的数据经过P2P通道直接传送,A和C以及B和C之间的数据只有经过服务器转发:

(1)A通过P2P通道将视频帧发送给B,并通过服务器中转给C。

(2)B通过P2P通道将视频帧发送给A,并通过服务器中转给C。

(3)C通过通过服务器将视频帧中转给A和B。 

我们再来计算一下服务器的带宽占用。 

上行:30*3 = 90KByte/s。(每个客户端都要上传自己的视频流,3个客户端) 

下行:30 + 30 + 30*2 = 120KByte/s。(A需要下载C,B需要下载C,C需要下载A和B)

可见,由于P2P通道的存在,降低了下行带宽的占用量。 

4.服务器广播与P2P通道结合深入分析

现在,我们将参与视频会议的人数扩展到N(N>=2),情况依然是复杂的,某些客户端之间的P2P通道成功建立,而某些客户端之间的P2P通道无法创建成功。在这种情况下,如何才能将服务器广播模型与P2P结合起来了?需要做到以下几点:

(1)每个客户端需要记录自己与哪些用户创建了P2P通道。

(2)服务器也要知道每个客户端的P2P通道的状态。(客户端的P2P通道状态发生变化时,及时报告给服务器)

(3)当服务器收到一个视频帧时,首先,查看当前参与会议的用户,然后,根据视频帧的发送者的P2P通道状态,来综合决定该视频帧需要转发给哪些客户端。

        (比如本文的例子,服务器收到A的视频帧,发现A和B之间的P2P是通的,所以,它就只将该帧转发给C。)

(4)在客户端发送视频帧时,又可细分为三种情况:

  a.当某个客户端发现自己和所有的与会者都建立了P2P通道时,那么,它就不用把视频帧发送给服务器了。

  b.如果客户端与所有与会者的P2P通道都没有建立成功,那么,它只需要将视频帧发送给服务器。

  c.如果客户端与部分与会者建立了P2P通道,那么,它不仅需要将视频帧发送给服务器,还需要将该帧经过每个P2P通道发送一次。

本篇我们提出了广播消息与经服务器中转、P2P通道传送等方案结合时,可能发生的各种情况,以及在每种情况下服务器消耗的上行与下行的带宽。综合看来,模型3对服务器带宽的占用是最少的,但是,其实现也是最复杂的。我们将在下篇详细介绍基于ESFramework通信框架对上述模型3的完整实现,敬请期待。

 

目录
相关文章
|
机器学习/深度学习 弹性计算 编解码
Serverless 工作流适用场景及最佳实践
本文我们将围绕工作流话题,介绍: 1. 什么是工作流,适用哪些场景? 2. 阿里云的全托管工作流服务:Serverless 工作流 3. Serverless 工作流适用场景 4. Serverless 工作流编排函数计算的最佳实践
3548 0
Serverless 工作流适用场景及最佳实践
|
10月前
|
监控 搜索推荐 数据挖掘
全面剖析:销售易、神州云动与纷享销客CRM的产品功能与适用企业
销售易CRM是一款功能全面的客户关系管理工具,适用于中小企业、成长型及销售驱动型企业。它提供线索管理、商机跟踪、合同管理、客户服务和数据分析等功能,帮助企业高效收集和管理销售线索,优化销售流程,提升客户满意度,并通过多维度数据分析支持决策。系统支持多渠道线索接入,自动筛选分类,全程跟踪商机进展,确保合同履行,并整合多种服务渠道快速响应客户需求。其灵活性和易用性使企业能够快速部署并适应业务变化,助力企业在竞争激烈的市场中实现可持续发展。
|
存储 编解码 数据可视化
揭秘GB28181标准下如何打造超能执法记录仪,引领警务新时代!
【10月更文挑战第3天】GB28181是中国公共安全行业标准,对智慧可视化指挥控制系统建设至关重要。本文探讨了如何在该标准下设计符合现代警务需求的执法记录仪,包括环境准备、引入依赖、SDK初始化、视频采集与编码、存储与传输等关键技术环节,并提供了具体的设计思路和代码示例,助力实现高效稳定的指挥调度功能。
338 3
|
弹性计算 固态存储 大数据
阿里云服务器租用费用:一年、1个月和1小时价格表(2024真优惠)
2024年最新阿里云服务器租用费用优惠价格表,轻量2核2G3M带宽轻量服务器一年82元,折合6.8元1个月,新老用户同享99元一年服务器,2核4G5M服务器ECS优惠价199元一年,2核4G4M轻量服务器298元一年,2核4G服务器30元3个月,4核16G10M服务器70元1个月、210元3个月,8核32G服务器160元1个月、480元3个月,阿小云整理阿里云服务器租用费用价格表,包括一年优惠价格、一个月和1小时收费明细表
7755 0
|
存储 Python
Python Logging 限制文件大小
Python Logging 限制文件大小
221 0
|
存储 索引
es对日志数据进行索引生命周期管理
es对日志数据进行索引生命周期管理
819 0
|
JSON 数据可视化 JavaScript
python--转换wrf输出的风场数据为网页可视化的json格式
python--转换wrf输出的风场数据为网页可视化的json格式
python--转换wrf输出的风场数据为网页可视化的json格式
|
前端开发 Java
Springboot 一个注解搞定返回参数key转换 【实用】
Springboot 一个注解搞定返回参数key转换 【实用】
499 0
Springboot 一个注解搞定返回参数key转换 【实用】
|
存储 域名解析 Prometheus
K8S原理剖析:Pod、工作负载与服务
K8S原理剖析:Pod、工作负载与服务
K8S原理剖析:Pod、工作负载与服务