常青:小程序音视频技术实现以及在相关行业的实际应用

本文首发在云+社区,未经许可,不得转载。

我演讲的内容是小程序音视频背后的一些技术支持。先讲一些术语,解释一些术语的概念,最后再说这些技术怎么去用起来,但是我觉得这比较容易陷入到大家都开始睡着的阶段。所以我今天从一个历史的角度,来看一看我们是怎么把小程序做成视频云的解决方案,跟微信结合起来的。

腾讯视频云终端技术总监常青

自我介绍

我一直在腾讯做终端,毕业到现在是10年,10年时间一直在里面,虽然说在里面待了10年,但是我感觉我工作的时间接近20年了,因为我们基本上每天是9点到晚上12点,工作时间还是比较久的。这么多的时间里面,想想做的事情很多。现在主要是做音视频。今天要讲的东西,主要是围绕这几个方面:市场前景、原理剖析、技术演化、WebRTC、快速上手

视频云跟小程序的结合点

我引一个故事,这个故事发生在昨天下午。我跟另外一个公司的HR去机场的路上,我们两个打了同一个出租车。那个HR跟我讲一个事情,说我这次来腾讯主要是为了做培训。大家知道腾讯这几年一直在做一件事情,他会投资一些公司,帮助这些公司做大,所以不仅仅是注资的问题,很多情况下我们会用我们的一些资源,优化它的内部管理,包括培训的资源,这个HR就说。你们是怎么做人员管理的?他听完了之后,说获益匪浅。一路上跟我聊课程总结,为什么他这么待劲?他先问我是搞什么的?我说我是搞研发的。我听他说完了之后,我说他们讲给你听的这些东西,都是不太能用得上的。他说怎么回事?我说你听的那些东西都是一个HR体系下面,从上到下怎么做管理,但是腾讯里面究竟怎么回事?创业公司最开始的时候,多少人合适?一个餐桌上能坐下的人。如果假如说公司做得还不错,A轮、B轮,这个时候,公司里的人,一辆大巴车可以坐下就行了。虽然体系非常完善,但是这里面大部分就是一个个的餐桌,和一辆辆的大巴。你说那HR是干吗的?在我们看来HR就是资源,偶尔帮我们搞搞校招的事情。他说那你们说的什么什么规则,什么什么牛逼的理论。我说我都没有了解过,因为我也用不到,我们团队就是一辆大巴车,仅此而已。这是一个过程,我其实想说的东西,我们做什么东西,可能能够做得出成绩来。比如说有些人说你们团队就是赚钱的,当然我老板跟我讲,你这点钱赚不了多少。最关键是怎么样拓展更多的方向。我们一直在寻求更多的机会,所以在去年年初的时候,我们说小程序的机会很不错。一个最大的点是它的安装门槛被干掉了,很大程度上解决了很多低频刚需的尴尬。比如说下飞机去了一个地方,我是打的,或者从地铁出来,我发现打的,距离很近,师傅也不远隔载你。你这个时候就看到小程序的价值所在了。像滴滴刚需,还是有很多的机会的。我朋友圈里有很多的发广告的,上面有一句话长按扫描二维码,然后出现一个小程序,这种广告效应还是不错的。

我最近去海底捞吃饭,我们一家人坐在一个座位上在那儿等,座位上有一个二维码,我扫了一下,恭喜你成为我们什么什么优质客户,可以在哪里把账户开了,我觉得可能打广告的同学是非常有身份优越感的。他觉得让我去他们银行开户,是对我的抬举。我觉得没有什么意义,人家在哪个网点开户,这都已经不知道是什么时候的事了,这个概率几乎为零。像游戏为什么获客成本这么高?就是因为有很多很多广告。

像金融开户场景下面,如果假如说我们都直接扫个二维码,就把这个事解决了,获客成本一下就降下去了。像教育行业,K12里面非常出名的VIBK(音),为了拿到一个客户,你知道花多少钱吗?这是我们的客户不能说,但是我要告诉你,就会吓死你。

董燚把需求提出来,我们将其落地,这里面是很艰难的。因为大家要知道,微信产品的市场定位是对用户的,要求是非常高的。当时我们去瞄这个需求的时候,提了很多要求。第一要开源,第二接口必须要很简单,一两个标签就能搞定;第三个定制性非常强,第四个出了很多问题要很好查。我说要求太高了,我当时非常严肃地跟他们说,你这里面说再多需求,我都接,只要让我们能够搭上这个车,什么事情都可以。我们就开始回去琢磨。

音视频并不是说大家看起来这么复杂,很多东西是可以简化的。我们在音频解决方案里面,再复杂的东西,把它拆分成最简单的小原子,一个是上行,一个是下行,就这两个解决了所有问题。

下行和上行主要做什么?

把音视频的画面和声音送到云上去,不是简单地拍一些照,或者说是录一些音往服务器上传,而是要经过几个基本过程,第一个首先是采集,比如说视频要采集一些图片,声音要采集一段一段音频的模拟信号,再转成数字信号。采集完了之后,还是要做基础处理。微信是一个很严肃的品牌,美颜是可以不加的,直播功能是不是可以就不要了?我说不加美颜的直播是没有人用的,效果好像差异很大。然后美颜功能,就被我这样忽悠上去了。

降噪处理而后就是编码,视频编码器、音频编码器。电信带宽刻意把上行的带宽调到很低。生成网络之后,把它传到服务器上去。

下行是倒过来,网络并不是永远都是平稳的,很多客户跟我讲说,我要投诉你,你们的直播质量不行,居然会卡,我说你是不是认为直播从来不会卡?他说对,直播应该从来不会卡。我说不是这样的,网络不是完美的,你下一个东西的时候,也不是说一直都是全网速的去下载。为什么有些不太容易卡?有些很容易卡?很重要的原因就是有多少缓冲。大家知道网上下东西,比如说下个安装包,或者是用迅雷下个片,速度时快时慢,要注意一件事情,如果你下多少就直接播多少,你播放的速度完全跟着网速来走,网络一卡,你的画面就卡了。所以我们需要在播放器上准备一个应急仓库的概念。让大家知道,平时吃的大米都是去年的,叫战略粮食。新的米都是带超市里面买到的,因为战略的这些东西,一旦出现打仗了,比如说进口粮食出问题了,这些粮食就可以用来立即救灾,或者立即用来补充空缺。如果这些粮食一年到头没有用起来,第二年的时候,自然就要给优先消灭掉了,不然就放坏了。所以在这个地方,大家可以想缓冲就是战略粮食的作用。缓冲比较大了,你看得比较流畅,缓冲比较小了,你看得比较卡。

这里面会有解码,把画面转成数据,现在要解出来。再往后就是放入到界面中,这一部分是关于播放这一块。

既然有了上行和下行,SDK也好,还有这一套体系装在微信里,咱们这个东西基本上就差不多了,但实际上并没有那么简单。其实这个事情还是经过了比较长时间的演化过程,假设说已经有上行和下行,我们带上腾讯云可以做什么?最司空见惯的就是做直播。如果我不拿麦,大家听我说话声音比较小。但是我用上麦克风,后面的同学都听得很清楚,这就是靠的右边这台设备,会把我一个人的声音采集进去之后,再经过周边的这些喇叭,再放大一点。腾讯云很大程度上,通过直接放大,从一路变成两路,两路变成四路,四路变成八路,实际上是一个点一下子扩散到几百个,只要服务器足够多,这个线路就足够长。讲杜蕾斯邪恶的广告,经常有100多万人看,并不是从一台服务器上拉的,可能是从全国上万台的服务器上拽的。从一个点逐一放大。

在这一块,我们用两个标签,一个上行、一个下行,配上这个。至于这个地址的后面线路怎么出来,像做云的都会把这个事情做好。很大程度上投资都在这里。

小程序要做直播,会担心用户涉黄。微信是腾讯内部公关危机最多的,因为什么事,只要是在微信上出现了,都说是微信的问题,实际上是怎么出来的。比如说有人发个文章,将了比较高敏感度的话题,便会牵扯到微信,因为在微信平台上出来的。

直播

直播有一个问题,直播延时很高。多的时候有5秒的、8秒的、10秒的,对于我不太需要时延的场景还可以。但是如果这个场景要求时延很高。上一年比较火的就是远程抓娃娃,观众看这些人怎么抓都抓不住,真笨,其实你自己也抓不住,因为机器是有概率的,有很高的概率掉下来。让我来的时候,这个地方就出现一个问题了,你去动一下这个抓,这个延时必须要非常低。如果要是2秒,你按一下,这个时间时间倒计时了,5块钱没有了,这个时候你就崩溃了。延时要求还是蛮低的,我们想办法构建一个延时比较低的线路。构建延时比较低的线路,就要用到一些附加的技术,比如说我们就不能用传统的线路,因为它是有公平问题的。如果路上很堵,大家都让一让,是不是大家都比较顺畅?这就比较公平。我们非常希望我们流氓一点,如果你这边有点挤,他那边有点挤,我为了保证我这边画面尽可能快,我当然希望暴露一点。我抓娃娃的时候,钱已经交了,我希望尽可能的画面是流畅的。同时这里面也需要一定延时的控制,所以咱们要上两套技术,具体怎么做的,一会给大家讲。有很多的摄象头,头都是会转的,这种场景,也是比较适合用这种解决方案的。

刚才讲杜蕾斯的王奇老师,跟我这边,我们两个人隔了天南海北,假如说他现在在深圳,我在北京,他那边到我这边是低延时的,我在500毫秒以内,就可以看到王奇老师的画面。从我这儿到他也是500毫秒以内,是不是两个人基本上就可以双线沟通了?我能看到他的表情,他也能看到我的表情,我能听到他说的话,他也能听到我说的话,这个想法很完美,只是有一点点骨感,我们还要做很多事情。比如说把回音给消了,我说的话,被他经过放大之后,传入我的麦克风,是不是就会嗡,回音一直在转。我这边说的话,假设是被王奇老师那边听到了,还被他手机上的麦克风听到了,会再给我传过来,这个回音是一定要消掉的。

双向音视频

双向音视频在解决很多客户场景上发挥用处。假设现在延时很高了,我想把它降下来。我在这里说的时候,大家听着声音比较流畅、比较连贯,每个字是没有跳字的情况,但是如果让我说的话,既快一点,但是又不变尖,因为变尖是很奇怪的事情。我今天晚上要赶飞机,如果你要把我的时间调短了,我今天晚上要改飞机,这个声音是非常尖的,听起来不舒服。我们交给计算机做这个事情的时候,能不能把这个速度加快一点,又不变尖?计算机可以帮你把刚才我说的这一段话,切得极细,一秒钟切出500份,或者50份多行。每一份从里面找一找,有没有一些可以忽略的东西。比如说这一块好像没有啥用,它可能只有一个字的发音的50分之一的时间,我们就把这个干掉。我怎么干?找一找最近有没有一个相应匹配的波形,把它平衡下来,这一段时间就省下来了。每一段都这样干一干,声音好像有一点加速,但是你又听不出来。有些时候突发的扩音爆音问题,可以通过一些界面,比如说声音从小逐渐拉大,逐步把扩音爆音问题解决掉。

回音消除是围绕着先分析,再去处理的一个过程。消回音很大程度是先把要播的声音分析一遍,等到再录回来的时候,我看一看录下来的声音,有没有跟之前这一段相似的,我就可以替掉,这就是所谓的回音消除。

双人的音视频基本上可以通过这种方式来解决。双人的搞定了,是不是说多人的也可以搞定了?我现在跟一个同学,A和B之间拉通一个双向的,再加一路也挺简单的。三个人,每个人把自己的画面推到顶上去。每个人同时拉另外两个人的,还是挺简单的。但难的东西主要是在相应的状态,他们三个人的状态是一定要保持一致的。如果两个C这边有个人出去了,但是B这块并不知道这个事情,这一块就会出现他的画面跟其他人不对齐,所以要解决这个问题,我们在服务端做一个场景管理,用一种状态表的形式,把每个人的状态都列出来,有需要的时候就更新,这样状态就同步了。所谓的分布式的方案,还是偏复杂的。我们这个是中心化管理之路。

我们现在会做一些辅助的设备,辅助的图片,帮助大家把房间里面每个人状态的管理,状态同步搞定。这一部分也不是很难,而且代码是开源的,大家有兴趣可以学习和了解一下。

和WebRTC有什么区别?

我们一个很大的点是歧义比较小。我们会看到WebRTC很多东西是相比于目前这一套,还是有一些侧重的。大家知道WebRTC是谷歌在推的一套标准,但是它需要很多家都支持。你不能说我这样干,苹果就会跟着你。我不能说我先要加一个东西,然后其他家就要跟着你走。这里面有很大的情况是依赖于各个实验方,在意见上是一致的。

小程序解决方案,很大程度上,我们的扩展性和定制性会非常强。我们跟微信团队的合作是一个月就可以出一个版本,经常会更新很多新功能上去。像美颜、截图,各种其他的东西都会随着版本迭代快速更新。大家关注有哪些需求,变成现在的刚需或者热点,这些东西都很落地,在WebRTC这一块就比较困难。

另外WebRTC还是不支持内嵌的解决方案。WebRTC还是很强大的,得到了很多浏览器的支持,我们要去跟它对抗,最好的办法就是加入他们,所以说,最新的解决方案里面,我们的新版本里面,我们在6.6.6的微信版本里面,支持了两个平台的互通,这是依赖于我们的服务器,可以做多重转换。

在使用上比较简单,具体后面的内容,我会在我们的官网的文章里面,会给大家一些指引的。

我们有一些配套的开源的组件,有互动课堂,或者多轮会议,或者双人通讯,有一些快速上手的解决方案,用起来会比较简单。填一下房间号,填一下属性,填一下有几个人就可以了。

最后是有一些相应的资料指引。我今天的分享就到这里!

QA

Q:咱们有没有提供一些视频链接之类的?

A:有一套(英文)有电子版的,下周也会加入进去,这些都是开源的。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能头条

华宴小露,重幔初挑:SDCC 2017·深圳站讲师+议题首轮抢鲜

23230
来自专栏企鹅号快讯

微信小程序游戏其实一般,我也就站在寒风里玩了一个小时

NAUGHTY Tech —2018,祝大家狗年大吉吧— 2017 年 12 月 28 日火了一个游戏。你需要做的,就是通过按住屏幕的时间长短来控制一枚跳棋从一...

33790
来自专栏腾讯大讲堂的专栏

“喂,你要不要让自己试试看?”

12830
来自专栏ytkah

林兴爆料小程序很快可以支持各个 App 直接打开小程序

24020
来自专栏吾真本

Release It! 第2版中译稿试读:赞誉、致谢、前言及第1章生产环境的生存法则第2版赞誉致谢前言第1章 生产环境的生存法则

迈克是软件行业最深刻的思想家,也是最清晰的沟通者。与第1版相比,第2版不仅同样文笔优美,还用现代技术对内容进行了扩展(最显著的是持续部署、云基础设施和混沌工程)...

10410
来自专栏PPV课数据科学社区

为什么大数据如此重要?

? 大数据 大数据是一种现代云基础架构,它包含了多种与其他人连接和共享信息的方法。它推动了“物联网”的发展,如通过社交网站连接人、通过共享朋友或网络来寻找人们...

28940
来自专栏ytkah

微信公众号刷量工具崩溃原来是接口变了

  这两天微信公众号刷点击阅读量的工具崩溃了的消息漫天遍布,原来是腾讯在9月27号晚上将接口key改为了“cookie”,公号刷量工具就不能通过post的方式进...

73080
来自专栏MasiMaro 的技术博文

毕业两年的反思

到今年6月份,已经毕业两年了,在这两年中换过一家公司,从银行外包到安全行业,经历过加班,也经历过无所事事,心中有些感慨和想法与大家分享

14420
来自专栏非著名程序员

Google 推出的编程学习应用 Grasshopper

15640
来自专栏AI科技大本营的专栏

资讯 | 你肯定不知道今晚微软还有个开发者大会

今晚,微软 Build 2017 大会将在西雅图开幕。 Win10、语音助手、混合现实……你更关心哪一个的出场? 我们简单来盘点一下三个值得关注的产品: 1...

360100

扫码关注云+社区

领取腾讯云代金券