#嘿丝儿科技#一人单刷雨课堂需要多少工作量?快手工程师详解如何两周搞定

机器之心发布
机器之心编辑部
昨天 , 清华自动化大一学生的C++大作业霸占了知乎榜首 , 该作业要求学生写一个类似于「雨课堂」的网络教学软件(雷课堂) , 可以共享屏幕、语音直播、在线答题……其实现难度、工作量似乎都超出了大一学生的能力范围 , 连清华特奖得主、阿里P6也表示无法单独完成 。 离提交deadline只剩五六周 , 这个作业真能写完吗?
#嘿丝儿科技#一人单刷雨课堂需要多少工作量?快手工程师详解如何两周搞定
文章图片
在昨天的讨论区 , 我们看到大部分评论都是对于这一作业的吐槽 。 不过也有人提醒大家 , 为什么不试一试呢?毕竟 , 作业还是要交的 。
#嘿丝儿科技#一人单刷雨课堂需要多少工作量?快手工程师详解如何两周搞定
文章图片
作为雨课堂的技术支持方 , 快手的音视频工程师范威给出了自己的专业回答 。 范威有着十多年的工作经验 , 在春节后深度参与了雨课堂和快手项目的联合开发 , 为雨课堂提供了音视频底层技术支持 。
根据范威的介绍 , 总共需要2周开发时间 , 就能拥有一个雷课堂 。 当然 , 前提是「这些知识你都学过」 , 还要有「丰富的踩坑经验」 。
【#嘿丝儿科技#一人单刷雨课堂需要多少工作量?快手工程师详解如何两周搞定】小伙伴们是不是心动了?下面来看具体分析 。
一个人单撸一个雷课堂需要多少工作量?
雨课堂是清华大学研发的一款在线教育APP , 可以支持老师在线授课、分享PPT , 学生与老师进行语音互动 。 从音视频角度来看 , 这种在线授课的形式其实就是一个标准的视频会议场景 。
要说如何从头开始撸一个视频会议软件 , 需要分前端和后端来说 。 这里前端指的是终端 , 后端指的是媒体服务器 。 前端的主要功能是负责音视频通信 , 后端的主要功能是负责媒体流的转发 。
先说说前端 。 前端模块包括音视频采集、前处理、编解码、收发包等功能模块 。 目前开源的视频会议项目以webrtc最为流行 , 其代码里有80w+行之多 。 要想单手从头撸一个视频会议终端 , 虽说不需要80w行代码那么多 , 但是还是有其难度的 。
采集模块
首先是平台的支持 。 iOS、Android、Windows、Mac、Linux , 不同平台提供的音视频技术都不尽相同 。 音视频的采集和前处理 , 需要根据不同的平台和机型进行适配 , 有些算法可以采用平台的能力 , 而有些算法需要通过软件进行处理 。
先来说一下采集和前处理模块 。 视频通过调用系统API完成摄像头数据的采集 , 这里不详细说 , 感兴趣的同学可以自行查阅官方文档 。 视频前处理包括各种美颜滤镜算法 , 由于教育场景下这个功能不是刚需故而跳过 。
这里说一下音频前处理 。 在实时语音通话时 , 从麦克风直接采集到的音频是包含自己说话的声音以及对方说话的声音的 。 这是因为本地的扬声器播放出对方的声音也会被麦克风采集进去 。 如果不加任何处理就发送出去的话 , 对方会从扬声器里听到自己说话 , 这种情况称为声学回声(Echo) 。 为了得到一个比较自然的通话效果 , 需要对麦克风采集的音频数据进行处理 , 消除掉对方说话的部分 , 只保留本地的声音 。 这个过程叫做回声消除(AEC , AcousticEchoCancellation) 。 AEC算法最常用的方式是采用自适应滤波器来产生一个模拟回声 , 然后再从麦克风采集信号中将这个模拟回声抵消掉 , 达到消除回声的目的 。
#嘿丝儿科技#一人单刷雨课堂需要多少工作量?快手工程师详解如何两周搞定
文章图片
单线AEC架构
在实际项目中 , 还会对信号做一个NLP(非线性滤波)来消除残余回声 , 同时为了增强信噪比还会做声学降噪和自动增益 , 统称为3A(AEC/AGC/ANS) 。 目前几乎所有的智能手机和Mac平台都有硬件的3A算法模块 , 其中苹果的设备调校的比较好 , 而Android手机的3A效果良莠不齐 , 通常需要通过软件自己实现 。 最快的实现方式是采用系统提供的3A算法 , 这里算1个人天 。


推荐阅读