
视频通话是师生在Vimbox平台上进行交流的主要方式。 我们很久以前就放弃了Skype,尝试了几种第三方解决方案,最终选择了一堆WebRTC-Janus-gateway。 一段时间以来,我们一切都很好,但仍然存在一些负面点。 结果,创建了单独的视频方向。
我请新方向负责人Kirill Rogovoy谈谈Skyeng中视频通信的发展,我们最终应用的问题,解决方案和拐杖。 我们希望本文对也通过网络应用程序自行制作视频的公司有用。
一点历史
2017年夏天,Skyeng开发部负责人Sergey Safonov在Backend Conf上发表了关于如何“放弃Skype并实施WebRTC”的演讲。 那些愿意的人可以通过参考 (〜45分钟)查看表演的录制,但是在这里我将简要概述其本质。
对于Skyeng而言,视频通信一直是师生交流的优先方式。 最初使用Skype,但由于多种原因,它绝对不适合使用,主要是由于缺少日志以及无法直接集成到Web应用程序中。 因此,我们进行了各种实验。
实际上,视频通信的要求大致如下:
-稳定性;
-每堂课价格低廉;
-录制课程;
-跟踪谁说了多少(对我们来说,学生在课堂上说的比老师多说是很重要的);
-线性缩放;
-同时使用UDP和TCP的能力。
2013年,第一个尝试实现Tokbox。 一切都很好,但结果却非常昂贵-每节课113卢布-并吞噬了利润。
然后在2015年,Voximplant被整合。 这是我们需要的跟踪功能,他说了多少钱,同时解决方案也便宜得多:只要只录制声音,每堂课就会产生20卢布。 但是,它只能通过UDP起作用;切换到TCP并不是一项技能。 但是,最终,大约40%的学生使用了它。
一年后,企业客户开始出现他们的特定要求。 例如,所有内容都应通过浏览器工作,公司中仅打开http和https。 也就是说,没有Skype和UDP。 公司客户=钱,因此他们返回了Tokbox,但是价格问题并未消失。
解决方案-WebRTC和Janus
我们决定将浏览器平台用于点对点视频通信WebRTC 。 她负责建立连接,对流进行编码和解码,将轨道和质量控制与处理网络故障同步。 就我们而言,我们必须确保读取来自摄像头和麦克风的流,绘制视频,建立连接,建立WebRTC连接并向其传输流,以及在客户端之间传输信号消息以建立连接(WebRTC本身仅描述数据格式,但不描述其机制传输)。 如果客户端位于NAT之后,WebRTC将连接STUN服务器,如果这样做没有帮助,则连接TURN服务器。
通常的p2p连接对我们来说还不够,因为我们希望记录课程以备投诉时进一步分析。 因此,我们通过Meetecho的Janus Gateway转发器发送WebRTC流。 结果,客户端不知道彼此的地址,仅看到Janus服务器的地址。 它还执行信号服务器的功能。 Janus具有我们需要的许多功能:如果客户端上的UDP被阻止,它将自动切换到TCP。 能够记录UDP和TCP的流; 可扩展 甚至还有一个用于回声测试的内置插件。 如有必要,将自动连接Twilio的STUN和TURN服务器。
在2017年夏天,我们有两台Janus服务器,另外还有一台服务器用于处理录制的原始音频和视频文件,以免占用主处理器。 连接时,Janus服务器的选择是偶数(连接号)。 当时,按照我们的感觉,这已经足够了,它提供了大约四倍的安全裕度,实施百分比约为80。与此同时,价格下降到每堂课2卢布,加上开发和支持。

返回视频通话主题
我们会不断监测学生和老师的反馈,以便及时发现并阻止问题。 到2018年夏天,在投诉中名列第一,沟通质量得到了牢固树立。 一方面,这意味着我们已经成功地解决了其他缺点。 另一方面,迫切需要做一些事情:如果失去了教训,我们有可能失去其成本,有时还有购买下一个套餐的成本,如果入门课失去了,我们可能会完全失去潜在的客户。
当时,视频通信仍处于MVP模式。 简而言之,他们启动了它,使其工作了一次,并且进行了一次扩展,弄清楚了如何做到这一点-很好,这很好。 如果可行,请不要修复。 没有人刻意处理通讯质量问题。 到了八月,很明显,这种情况无法继续下去,我们启动了一个单独的区域来弄清楚WebRTC和Janus的情况。
在输入时,收到了以下指示:MVP解决方案,没有指标,没有目标,没有改进过程,而7%的教师抱怨沟通质量(也没有关于学生的数据)。

一个新的工作方向
该命令如下所示:
- 方向负责人,他是主要开发人员。
- 质量检查有助于测试变更,寻找新的方式来创建不稳定的沟通条件,从第一线报告问题。
- 分析人员一直在寻找技术数据中的不同相关性,改进对用户反馈的分析,检查实验结果。
- 产品经理可以帮助您指导实验的总体方向和资源分配。
- 通过编程本身和相关任务,第二位开发人员通常会提供帮助。
首先,我们建立了一个相对可靠的指标,该指标可跟踪通信质量评估中的变化(按天,周,月平均)。 当时,这些是老师的分数,而学生的分数也增加了。 然后,他们开始建立不起作用的假设,以纠正并查看动态变化。 我们追求的目标不高:例如,我们将vp8编解码器替换为vp9,从而提高了性能。 我们尝试使用Janus设置,进行其他实验-在大多数情况下无济于事。
在第二阶段,出现了一个假设:WebRTC是一种点对点解决方案,我们在中间使用服务器。 也许问题出在这里? 他们开始进行挖掘,并发现此处是迄今为止最重大的改进。
那时,根据一种相当愚蠢的算法从池中选择了服务器:每个服务器都有自己的“权重”,具体取决于渠道和力量,我们试图将用户转到“权重”更大的那个,而不关注用户所处的地理位置。 结果,圣彼得堡的老师可以通过莫斯科而不是通过我们位于圣彼得堡的Janus服务器与西伯利亚的学生进行交流。
重做了该算法:现在,当用户打开我们的平台时,我们使用Ajax将ping信息从该平台收集到所有服务器。 建立连接时,我们选择一对数量最少的ping(教师服务器和学生服务器)。 更少的ping-到服务器的网络距离更短; 距离更短-丢失数据包的机会更少; 丢包是视频通话中最大的不利因素。 消极的份额在三个月内下降了两倍(公平地说,此时还进行了其他实验,但几乎可以肯定,这一实验影响最大)。


最近,我们发现了另一个不太明显但很显然的重要事情:代替厚信道上的一台功能强大的Janus服务器,两台服务器更简单,带宽更高。 事实证明,我们购买了功能强大的机器,希望在同一时间尽可能多地填充房间(通信会话)。 服务器具有带宽限制,我们可以准确地将其转换为房间数-我们知道您可以打开多少,例如300 Mbps。 一旦服务器上打开的房间过多,我们将停止为新活动选择它,直到负载减少。 想法是,购买一台功能强大的机器后,我们将最大程度地加载该信道,以便最终将其放置在处理器和内存上,而不是带宽上。 但是事实证明,在一定数量的开放空间(420)之后,尽管处理器,内存和磁盘上的负载仍然远远超出限制,但消极情绪开始飞向技术支持。 显然,Janus内部的情况越来越糟,也许还有一些限制。 他们开始进行实验,将带宽限制从300 Mbps降低到200 Mbps,问题消失了。 现在我们一次购买了三台具有低限制和低特性的新服务器,我们认为这将导致通信质量的稳定提高。 当然,我们没有开始弄清楚那里发生了什么,拐杖是我们的。 在我们的辩护中,我们说,那一刻有必要尽快解决紧急问题,而不能把它做得漂亮。 此外,Janus对我们来说是一个黑匣子,用C编写,深入研究它非常昂贵。

好吧,在此过程中,我们:
- 更新了服务器和客户端上所有可以更新的依赖项(这些也是实验,跟随结果);
- 修复了与特定情况有关的所有已确定的错误,例如,当连接断开并且无法自动恢复时;
- 与视频通讯领域的公司进行了很多会议,并且熟悉我们的问题:流游戏,主持网络研讨会; 测试了所有对我们有用的东西;
- 对铁和与教师的沟通质量进行了技术审查,其中投诉最多的是。
实验和随后的更改使教师之间的沟通不满从2018年1月的7.1%减少到2019年1月的2.5%。
接下来是什么
稳定Vimbox平台是该公司2019年的主要项目之一。 我们寄予厚望,希望我们能够保持势头,不再将视频通信视为头等大事。 我们知道,这些投诉的很大一部分与计算机和用户互联网的滞后有关,但是我们必须确定这一部分并解决其他所有问题。 其他所有问题都是技术问题,看来我们应该能够解决。
主要困难在于我们不知道将质量提高到什么水平通常是现实的。 澄清这个上限是主要任务。 因此,计划了两个实验:
- 将Janus中的视频与常规p2p进行比较。 该实验已经进行;我们的解决方案与p2p之间没有发现统计学上的显着差异;
- 我们将向仅通过视频通信解决方案获利的公司提供(昂贵的)服务,并将它们带来的负面影响与现有的负面影响进行比较。
这两个实验将使我们能够确定可实现的目标并专注于此。
此外,工作顺序还解决了许多任务:
- 我们创建沟通质量的技术指标,而不是主观评价;
- 我们制作了更详细的会话日志,以便更准确地分析发生的故障,了解它们何时何地发生以及确切发生在那一刻,哪些看似无关的事件发生了;
- 我们将在上课前准备自动测试通信质量的方法,并且还将使客户端能够手动测试连接,以减少由其铁质和渠道造成的负面影响;
- 我们将开发和进行更多在恶劣条件下,数据包丢失等情况下的视频通信的压力测试;
- 我们会在出现问题时更改服务器的行为,以提高容错能力;
- 我们会警告用户是否存在连接错误(就像Skype一样),以便用户知道问题就在他身边。
自4月以来,视频通信方向已成为Skyeng内的一个完整的独立项目,不仅开发Vimbox,还开发自己的产品。 这意味着我们开始寻找可以全时模式使用视频的人。 好吧,一如既往, 我们正在寻找很多好人 。
好吧,当然,我们会继续积极地与从事视频通信的人员和公司进行通信。 如果您想与我们交流经验,我们将很高兴! 评论,联系-我们将回答所有人。