在 2019年第五届 Gopher China 大会上,
TutorABC研发总监董海冰进行了题为《 用Golang搭建实时音视频云》的演讲。主要内容如下:
什么是TutorMeet+
为什么使用Golang
WebRTC
问题总结
关于SaaS
以下为演讲实录。
No.1
什么是TutorMeet+
大家好,非常高兴来到 Gopher China 分享一下我们用 Go 语言做的事情。可能这个领域稍微有一点特殊,我准备的内容蛮多的。主要还是跟大家讲一下我们实时交互的研发过程和为什么采用 Go 语言,还有关于我们采用了 WebRTC,以及两年多的研发过程中都遇到了什么问题,怎么处理的,最后是 SaaS 方面的东西。
整个系统平台我们后端基本都是采用 Go 语言开发的。当然有一些地方用了 C++,还有 C 语言。前端我们用的是 ReactJS,我们界面大家已经看到了,音视频是在左侧,有一些是在头部,还有一些是右侧,这个差别不大,因为我们主要是采用H5比较灵活的方式布局,怎么调整都可以,没有什么一定规矩,只是我们在教学过程中,觉得放在这个部分焦点、视点比较理想,其实可以做一些定制,这方面我们是足够灵活的。我们整个UI层变动起来会比较敏捷一些,也比较高效。
下面跟大家讲一下,我们为什么用 Go 语言开发音频的东西。大概2014年、2015年的时候,我当时在负责 CCTalk 的相关研发。当时我们几个架构师比较困扰的问题是选用的开发语言还是C++,尽管C++性能好,但是面临着一个是优秀的工程师比较难招,另外整个C++的开发效率还是偏低一些,尤其是Server端,好的工程师尤其是音视频通讯这一块非常少,再选一些我们觉得不是那么重要的业务逻辑的时候,比如说跟WEB系统做通讯,网关或者是API这一类的东西,用C++实在太重了,当时曾经打算用Python,但是Python大概试用了一下,性能太差。对Server多核支持也不太好,所以比较犹豫,没有用它。后来Go进入我们视野,经过一段时间的观察,尝试,包括我们团队有同学也搭了一些项目,例如:分布式的文件系统,效果都非常好。
Media Server是比较独立的,彼此之间没有形成资源竞争关系。Media Server首选是SFU,相当于只做转发,一路流进来以后不做任何处理,直接转发出去,这个对于服务端来说最省CPU的策略。当我们需要录制,或者是推流的时候这个时候会用到MCU,就把前端多路流Merge起来合流,再转码推出去。