正如展晓凯总结的那样,一个技术人或团队的成功离不开业务打下的基础,业务高层的高瞻远瞩以及对技术的敬畏,以及技术人的学习与探索精神。LiveVideoStack对全民快乐研发高级总监展晓凯进行了邮件采访,他总结了在与唱吧从零成长的历程。作为一个“零”多媒体基础的技术人,展晓凯的经验也许是你成长路上的参考。
策划 / LiveVideoStack
LiveVideoStack:展晓凯你好,能否简要介绍下自己,包括目前的主要工作及关注领域?
展晓凯:大家好,我是展晓凯,Java出身,曾经工作于淘宝参与开发机票搜索业务,然后在唱吧做了5年多,主要从事音视频方面的开发与架构设计,正好伴随着唱吧从刚上线到几千万月活的阶段,这一阶段不论是技术以及对互联网的认识都成长了很多,目前工作于全民快乐,主要从事海外直播相关的业务-包括视频直播、音频直播、PGC直播(知识答题、专业网红的高清直播)以及接入第三方的连麦厂商做互动直播。目前我所关注的领域主要是低延时、高并发、高清晰度的流媒体应用的架构设计与实践。
LiveVideoStack:从淘宝机票搜索业务到唱吧多媒体技术,技术的转换跨度不小。在加入唱吧前是否有多媒体开发的经验?如果没有,你是如何完成这一转换?
展晓凯:这个转换确实不小,并不是我预期中的转变,本来在淘宝的时候是想借着淘宝这个平台把Java的基础以及中间件深入的去琢磨学习一下,但是没有想到过了7年以后,现在却在另外一个领域扎根了。说到转换过程其实也是摸着石头过河,当时在唱吧没有专业做音视频这一块的技术人员,事情就在那里,我们也只能硬着头皮去做,前面我说过我是Java出身,当时做音视频之前并没有在工作中写过C或者C 的代码,一大堆音视频的概念,新的语法需要熟悉,新的框架(FFmpeg)需要学习,所以当时确实举步维艰。但是现在回过头来看我自己技术栈的转换其实也是蛮成功的,而我复盘了一下具体有哪几点关键因素促使我转换成功的呢?主要是以下几点:
- 唱吧老板们大都是技术出身,整体的技术氛围还是很不错的,知道需要在技术方面的投入可能不是立马就有回报的,所以给了我很大的耐心;
- 我本身还是投入了很多时间与精力去思考,在做一个平台(Android)的时候也同时在想另外一个平台(iOS)的事情,想如何提高整个开发团队的效率,降低维护成本
- 公司的业务发展非常健康,而和我对音视频技术的进一步深入起到了一个正向循环的促进作用,并且公司的业务也从音频发展到视频,从点播发展到了直播,跟着一个产品迭代多年,也给了我对之前设计的架构进行调整,实践总结的机会,总之公司业务的健康发展让我对整个架构的演进以及自己知识体系的形成有非常大的帮助。
LiveVideoStack:从唱吧上线到4亿用户,新产品,不断暴增的用户,你是如何完成知识体系不断更新,来实现对业务的支撑?
展晓凯:之前也聊到过,对于音视频我并非是科班出身,大学时候的确有多媒体方向,当时也完全被我忽视掉了,而在工作中需要用到的任何知识都得去补充,包括基础乐理知识,小学时候都学过,但是当时就没学明白,再加上中国的应试教育根本也不重视这些方面的培养,这确实导致了很多东西需要去补充。但是经历过来之后,让我成长很大的是我接触新事物的能力和我的架构能力,其实架构设计本身是一个非常有意思的事情,主要跟你的经验有关系(当然也跟你对所做架构领域的熟知程度有关系), 然后需要花时间去思考,一般会得出几个架构,最后再考虑一下优缺点和对未来业务的支撑情况,选择一个适合自己目前产品的架构。其实读过的优秀代码越多(我曾经读过几个印象比较深刻的源码库:kxMovie,Volley,GPUImage,FFmpeg,目前有时间会去读WebRTC),其实就越有助于做出更好的架构, 跟的产品迭代越多,也有助于你实践架构以及对架构演进的机会就会越多。
LiveVideoStack:唱吧从上线到4亿用户,经历了哪些重大的技术更新,每次重大更新解决了哪些问题?
展晓凯:记得好像是2013年吧,从纯音频到视频,这个改变其实是比较大的,如果现在让我来重新做这个架构设计可能会很容易,但是当时就是完全使用系统的API,很简陋的实现了录制视频、发布视频的核心功能;然后要想做好视频这条线,必须得自己能控制得住播放器(包括音频原始数据、视频原始数据、解码器等),所以我们开始自己实现了一套播放器(当时iOS使用的是kxMovie,Android我自己照着kxMovie撸了一套),播放器支持普通播放的同时,可以支持音频的处理(音效处理,混音处理等);接着我们还需要处理视频,比如美颜、比如视频合唱等业务,这个时候我就开发了一套跨平台的视频处理系统(VideoEffectProcessor-基于OpenGL ES的跨平台视频帧处理系统),实现了美颜、贴纸以及视频主题的功能,后来我们又开发我了想和你唱的视频、音频联动的玩法;到这里其实我们公司对于音视频的技术积累已经比较丰富了,这个时候我们公司又开展了一条直播产品线,从录播做到直播我又把整体架构进行了一次梳理和重构,同时满足录播与直播的业务需求,有一些基础公用的模块,然后不同业务有自己特殊的实现继承自公用模块,公共模块仓库使用git submodule进行管理。
LiveVideoStack:能否聊聊从零到4亿用户,你和你的团队经历了哪些难忘的故事?
展晓凯:难忘的事情有很多,很感激和战友一块经历过的岁月,从最开始没有多少用户,到突然有一天用户流量把我们服务器给撑爆,上线2个月我们用户就破千万,后面陆陆续续也经历过几个爆点和挫折(客户端的瘦身、服务端受到半连接的攻击,对直播一点都不懂就踏入音频直播的行业),这其中无论服务器还是客户端都慢慢经历过好多次架构的演进,团队人员也扩充了很多,比较庆幸的是整体团队的健康程度还是比较好,不会因为某几个人的离开对产品的稳定程度以及迭代速度差生很大的影响,这其中也不得不提到有很多竞争对手,面临压力的同时,也在使得我们的产品提升的更好,整个团队都一起克服困难,共同成长,其实我认为最关键的是大家相互信任,都是想把产品做好,给我们的用户提供更好的服务,只有这样才能体现出我们花了这么多时间和精力的价值。
LiveVideoStack:聊聊《音视频开发进阶指南:基于Android与iOS平台的实践》这本书吧。你在前言重提到,在工作中“边学边做”。这和大部分初学多媒体开发的技术人一样,并非科班出身。如此看来,这本书真的适合哪些没有多少多媒体开发经验的技术人吗?
展晓凯:这本书倾入了我很多精力,本质是想可以帮助更多入门不了的人或者刚开始入门的人可以顺利的走进来这个领域,可以让大家写出更优秀的代码,为自己的公司贡献出更大的价值,如果为我们音视频领域还能有一点推进的话,那真是我的荣幸了。因为多媒体领域其实是很大的一个领域,包括但不限于采集、处理、编码、传输,解码,渲染等等,每一部分深入的话都可以出一本书来进行学习,比如传输,大家最常用的可能就是RTMP和HLS,而基于UDP的一些协议可能就会更加复杂一些,比如kcp、srt、rtp/rtcp,要想吃透传输这部分,绝非一朝一夕的事情,而这本书是以移动平台作为最终运行目标,来把整个音视频的知识体系进行了一次梳理。其实我也接到了很多反馈,有正面的,也有负面的,有的读者戏称看了几天之后感觉从此对音视频无望,说要从入门到放弃,有的读者觉得写得很好,很适合他们,当然正面的居多。
其实借着这个机会我也想跟一些读者说几句话,其实大家的智商都是差不多的(天才除外),那什么样的人才能更被企业认可呢?自学能力强、沟通能力好、个人习惯好的人会更被认可,这部分人会更加容易的做好事情。所以大家看书也是一样,我写的这本书其实从目录大纲上就可以看出大家需要掌握的知识,让大家先有一个整体架构的认知,然后对于每一个章节也都会有对应的代码案例产出(github.com/zhanxiaokai),只要大家对着书以及对着代码花时间、花精力慢慢看下来,我相信肯定会有收获,因为在书中不单单对于音视频有所讲解,包括对于一些架构的设计,一些设计模式的实践我也会带出来进行讲解,分析这个架构的优缺点,到底适不适合当下以及未来的产品发展,所以大家对于看书来讲还是要沉得下心来,花时间花精力去学习,去总结,当然如果书中我讲的不够透彻的,或者有错误的欢迎大家邮件跟我交流(zhanxiaokai2008@126.com),或者去书的网站上跟我沟通(music-video.cn)。
LiveVideoStack:在5G、4K时代到来之后,对多媒体技术带来哪些挑战?对于开发而言,有哪些机遇?
展晓凯:我个人从事的主要方向还是在移动互联网领域,而对于已经出现了好久的4K,目前在广电领域是有投入生产的,但是目前在移动互联网领域还是很少被使用到,而多媒体领域向来也是从广电领域开始先进入生产,慢慢的走向移动互利网场景,给用户带来更好的感知与便利。而在移动互利网的应用领域,其实大家最关心的还是能否快速的集成到移动设备中,比如H.265出来了好久,大家最终用的最好的也只是iPhone7设备以上使用VideoToolbox来做硬件编码,而像AV1何时可以比较容易的集成到移动设备中我认为是比较重要的。
当然不论在任何行业都会分为研究型和应用型两个方向,这两个方向都是很重要的,没有研究型的人才或者组织来贡献出一些标准、一些实际的代码产出,是很难最终被应用到实际应用场景中的,反之,只有应用场景发展的越好,才能给研究型人才提供更好的专利费用、更好的环境。其实不论是任何新技术、新方向只要能给人类带来价值,就一定可以获得相应的资源,而多媒体领域在这个理论下表现得尤为突出。
LiveVideoStack:在你看来,2018年哪些多媒体相关技术将得到快速发展?
展晓凯:我觉得WebRTC技术会在2018年得到飞速发展,其实本身从人的生理感知能力来讲,文字->图片->语音->视频->直播->实时交互,这是感知的层级递进关系,而流媒体目前可以说是百花齐放,这两年实时互动(RTC)的发展也催生了各个产业往前更加迈一步的能力,从秀场直播的连麦、PK,教育行业的一对一教学或者小班课的产品,游戏行业狼人杀等实时互动的桌游产品,这无疑都是实时互动领域的发展给各个行业带来的巨大红利,而WebRTC也是Google开源的非常强大的框架,当然一个普通的小公司要想直接基于WebRTC进行二次开发来满足自己的需求还是太难了,这个门槛会比较高,前期使用一些连麦的服务商来快速验证产品的逻辑、留存以及盈利的可能性是正确的做法,当然后期如果用户量起来了,多接几家厂商,包括做自研RTC也是可行的,具体技术架构和技术团队的构建应该是完全根据产品发展阶段来慢慢演变的,没有绝对正确的事情,只有最适合的事情。