这段时间在网上冲浪时发现一款同播 (同屏直播) 解决方案 neko(https://github.com/m1k1o/neko),这是一个在 docker 中运行,使用 WebRTC 的开源同播软件。它可以实现多人在线实时观看以及实时远控宿主机,有权限管理、用户对话、文件传输等附加功能,可以应用在工厂多人远程管理操作界面、分发视频直播等场景。采用 WebRTC 的直播方案特点是双向延迟低,带宽占用少,兼容性好,常用在视频聊天。实测下来,WebRTC 应用到这个场景,neko 所实现的效果也非常理想,在不同网络环境下的多人同时观看直播和进行操作时都比较流畅。
同屏直播场景是一种综合负载环境,考验的是服务器在处理渲染画面的同时还要持续编码推流的能力。打开钱包看了一眼,咬咬牙斥重金上了最低配的云耀 L。华为云的云耀云服务器 L 实例是一款轻量级的 x86 架构常规云服务器,云耀云服务器 L 实例在华为目前在售云服务器产品线中是基础款,客制化选项较少,但胜在配置简单,以及经常会有优惠活动,近期在推的云耀云服务器 L 实例最低配, 2 核 CPU、 2G 内存、 40G 硬盘、 3M 外网带宽、400G 单月上下行流量, 89 元 1 年值得一用。横向对比华为云的另一款弹性云服务器,弹性云的可用区域扩展到国外,可选 x86 和 arm 架构,规格也较多,定价最低能做到 1 年 446 元,所以弹性云更适合对云服务器有各种个性化需求的客户使用。
在使用网页版 Shell 登陆服务器的过程中,有一个小细节很是触动我:华为云支持 MFA 二次身份认证,而且在注册账户的流程中就有单独一个界面阐述了 MFA 的好处,跟随流程就能启用 MFA,在之后的风险操作确认中就可以使用。这一点华为云跟进了业界最佳实践,给个好评。MFA 是极高安全性的验证码认证方式,传统验证码通过上游服务途径下发被动获取 (如短信验证码、邮箱验证码),而 MFA 是需要用户主动打开自己的信任设备,主动获取短效的验证码。以主动代替被动,避免了传统下发验证码容易被窃取、容易因为网络原因接收不到的痛点。MFA 在国外的应用已经非常广泛,但因为验证流程对国人的习惯还不够人性化,国内应用正在逐渐接轨。
aaaaaaaaaaaaaaaaaaaa
开始测试,使用官方 Firefox 浏览器镜像,配置推流画面 1280×720-30 帧,首先打开单个简单网页进行浏览,CPU 占用约 45%,内存占用约 30%,本地网络下行情况约 100KB/s,清晰度可以接受,操作没有明显卡顿,推流没有异常。说明在常规网页呈现方面没有任何问题。
来到复杂场景,打开 B 站首页进行持续下滑浏览,加载过程中 CPU 占用约 160%,内存占用约 48%,本地网络下行情况约 300KB/s,页面上下滑动浏览时会出现卡顿情况,性能开始逐渐吃满。说明在远程控制、网络加载以及整屏画面快速更新的复合场景,造成压力会比较明显。
播放在线视频,清晰度选择流畅,页面不进行滑动浏览操作,测得 CPU 占用约 140%,本地网络下行情况约 300KB/s,播放过程音视频流均流畅无卡顿。说明在画面小幅变动的情况下,负载压力相对较小。
而在全屏播放场景,在高复杂高切换和大量弹幕的画面,开始频繁出现了音视频不流畅的情况,本地网络下行在 300-700KB/s 波动,出现了若干次断线自动重连的情况,整体播放有1/3的时间是不可接受的程度。
测试下来,neko 的综合体验结果很好,但同时 neko 对于服务器的压力是相当大的。在项目官网也有明确的配置推荐表,其中2核2G在最低画质下也已经是不推荐的规格。不过我在测试中采用的是720p,并非是最低画质,由此可见云耀云服务器 L 实例的表现能略好于常规同等规格实例的性能。