在 2019年第五届 Gopher China 大会上,
TutorABC研发总监董海冰进行了题为《 用Golang搭建实时音视频云》的演讲。主要内容如下:
什么是TutorMeet+
为什么使用Golang
WebRTC
问题总结
关于SaaS
以下为演讲实录。
No.1
什么是TutorMeet+
大家好,非常高兴来到 Gopher China 分享一下我们用 Go 语言做的事情。可能这个领域稍微有一点特殊,我准备的内容蛮多的。主要还是跟大家讲一下我们实时交互的研发过程和为什么采用 Go 语言,还有关于我们采用了 WebRTC,以及两年多的研发过程中都遇到了什么问题,怎么处理的,最后是 SaaS 方面的东西。
先问一下大家,你们自己或者说你们的家人有没有使用过在线教育的产品?特别有小孩子,近些年大家对于在线教育越来越熟悉,实时的音视频教育已经基本走入千家万户。我这张图是一个典型在线教育的场景。左边是老师,右上角是学生,学生对于我们公司来说,既包括低龄段K12学生还有成人学生,甚至平台上有超过80岁的老人也一直在坚持学习。当然还有一些其他的角色,包括老师给学生上课的时候会有教材,教材实际上我们有专门的教研部门由他们负责编写。对于低龄端学生要有家长参与,我们提供一个比较好的家长端,这样家长可以在不在场情况下也能够监督自己孩子上课的情况。即使课上完了,他也可以比较方便的“回看“上课的录像,看学生当时的学习的情形。
我们“TutorMeet+“是一套可以实时互动的教学系统。这是我们整个系统的界面,后面是老师端,前面是学生端。显示区域主要的部分是课件,也就是俗称”白板“的区域,左侧是视频区,这块采用了WebRTC的技术。白板也是很重要交互的手段,目前在线教育发展越来越快,越来越多采用动态白板,有一些项目我们采用了 Html5 可以实时互动的白板,可以生成动画,对于低幼学生体验会更好。
对于教育来说,有两点非常重要,一个是学习的效果,另一个是学习的效率,其实作为商业的再教育的产品,如果不能够帮学生强化学习效果,或者说能帮他在学习过程中节省时间,那么这样的产品是没有太大的意义。因为大部分学习资料都是可以免费找到。我们主要还是满足用户这两点核心需求。
整个系统平台我们后端基本都是采用 Go 语言开发的。当然有一些地方用了 C++,还有 C 语言。前端我们用的是 ReactJS,我们界面大家已经看到了,音视频是在左侧,有一些是在头部,还有一些是右侧,这个差别不大,因为我们主要是采用H5比较灵活的方式布局,怎么调整都可以,没有什么一定规矩,只是我们在教学过程中,觉得放在这个部分焦点、视点比较理想,其实可以做一些定制,这方面我们是足够灵活的。我们整个UI层变动起来会比较敏捷一些,也比较高效。
视频我们早期采用VP8,不过后来逐步转成H264为主,因为H264有很多好处,特别是在移动端硬件设备的支持上会比较好,支持硬解,也比较方便。还有比较大的好处就是,作为在线学习的场景,我们在服务端肯定有录制的功能,如果用H264很容易转成MP4了,H264作为通用格式,不需要转码,用VP8肯定要重新做一些转码、适配的工作。
我们去年快速上线的阶段统计过,每天会发布30几次,所以整体还是非常快速的一个迭代的节奏。我们采用的是混合云的方式,混合云一方面我们有自建机房,然后有比较长时间的全球的项目运维的经验,我们有一个GIS的部门,他们采购了很多国外的节点和机房,都是用最好的资源,所以能够保证我们整体的线路是非常稳定的。我们也有一些比较好的公有云合作伙伴,像阿里云,也建立了比较好的互动关系,利用阿里云可以弹性扩容的优势,实现了比如说开学季,上课人数较多,特别是在Peak Time上课量大规模增加,这个时候我们不用等自己采购硬件服务器,而是采用公有云的ECS,可以迅速地的做一些弹性的扩充。另外,还有一些高IO的服务,需要更多CPU资源的情况下的服务,做更加灵活和及时性的弹性扩展。
从教学形式上我们支持