袁荣喜:心无旁骛,其乐无穷

LiveVideoStack 2017年9月5日


技术源于生活,实践才能出真知


LiveVideoStack:在这16年C语言开发之路上,您认为对于一个技术人来说什么是最核心的点?


袁荣喜:说来很惭愧,16年来我并没有做出什么成绩,对于一个物理专业的学生,走上程序开发的道路完全是个偶然。依稀还记得大学一年级时每周都会有两节《计算机基础》的上机课,内容基本是让大家在DOS系统上运行十几条DOS指令,熟悉计算机的基本操作。这些内容其实在10分钟之内就可以完成,然后同学们就开始在教室里聊天,着实让管理机房的老师头疼。以前我接触过计算机,也懂一些C语言,就利用这些空余的时间做了一个俄罗斯方块的对战游戏,发布在机房的Novell Netware上,从此同学们完成上机操作内容后再也不聊天了,管理机房的老师也把这个程序保留了两年,直到机房全部替换成WINDOWS系统。这可能算是我自己解决的第一个问题。


2001年毕业后,我去了福建一家做路由器和VOIP通信设备的公司,女朋友则选择留在江西省内,我们每天会用电话聊半小时。那个时候还没有QQ、微信语音,IP长途是每分钟3毛钱,一个月下来要花300到400块,对于一个刚毕业的学生来说是个巨大的支出。为了减少支出,我拉了一个ADSL宽带,用SIP/RTP/G.729技术开发了一个简易的PC通话软件,双方运行这个软件就可以进行语音通话,这样省事又省钱,这是我第一次感受到实时媒体通信的便利。


这么多年一直坚持在开发的一线,这样的经历并不在少数,所以要说“什么是技术人最核心的点?”,我个人理解是利用掌握的技术不断去解决自己和周围人群遇到的问题。


LiveVideoStack:您一直喜好解决系统的疑难杂症和debug技术,通常来讲大部分都会对这些感到头痛,但是您对此确实兴趣,甚至可以说遇到这类问题时会有些小兴奋,为什么呢?


袁荣喜:每个技术人对系统的疑难杂症都会感到头疼,其实我也不例外。我们设计好的程序,但是在机器上并没有按照我们的设计执行,这是非常意外的事情。我记得遇到最严重的一次事故:当时是在昆仑万维的RC语音开发项目组,同组的一个小伙伴不小心的进行全表扫描SQL,让整个线上系统足足挂起了10分钟。虽然事后我们都知道是由于数据库系统的事务锁导致的,但我们并不太清楚为什么会这样,锁是怎么发生的,为什么会这么慢?作为后端leader,我难辞其咎。也是从这件事情开始,我花了3年业余时间去学习数据库系统的相关知识——事务、索引、日志、磁盘存储、文件系统、cache、MySQL/innoDB,通过对这些知识的学习,个人对计算机系统有了更深刻的理解。


其实对一个疑难杂症的分析和定位,可能本身代表的是对一个知识体系的梳理和运用,这个过程会让自己更加了解CPU、内存、磁盘和网络的运作机理,这本身就是一件非常兴奋的事。在问题面前保持好奇心,事情会变得更加有趣,心无旁骛方能其乐无穷。


LiveVideoStack:您对于开源技术的理解和看法是怎样的?如果有机会您是否也会加入其中?


袁荣喜:其实不管是产品还是技术领域,现在都很注重生态圈。对于技术领域而言,开源是构建技术生态圈一个非常有效的途径,像Linux、MySQL、Hadoop等,在音视频领域也有非常好的技术生态圈,例如:FFmpeg和WebRTC。正因为有这些优秀的开源项目,才让我们做事更有效率。


个人理解开源技术已经成为行业的支柱技术,个人或者团队已经无法和整个社区的力量做“抗争”,社区有非常多的优秀工程师,他们在各种场景下使用你的项目或者技术,发现问题、报告问题、提交PR等等,这些会使得开源技术做的更加精细和优秀,当然这也离不开对开源项目的技术运营。以前我常常以为把项目代码放在Github上就是开源,其实不然,除了源码开放,还需要做技术运营、持续改进、合并PR等等,这需要消耗很多的时间和精力才能做到,国内已经有这方面做的非常好的团队和个人,我很敬佩他们。


平常我在自己的项目中也大量使用开源技术,偶尔也为社区报告问题、提patch,也算是一种简单的参与,如果条件允许我们也会考虑将自己手上的技术开源出来,也希望得到社区的认可和帮助。


摸着石头过河,在线教育需要什么?


LiveVideoStack:在多人视频互动中使用CDN推流方式延迟会很大,我记得您在去年有分享过一个自己研发的实时超清直播传输的架构,在这个研发的过程中遇到了哪些难点和坑?在一些技术实现上会不会有一些两难的选择?


袁荣喜:2016年上半年,公司准备做一个基于音视频的高实时的教育辅导类产品,当时我们也测试过大部分CDN和WebRTC相关技术,都不能满足我们的需求。虽然CDN在高清晰直播行业如日中天,但是在实时互动领域确实显得有些无能为力;而WebRTC虽然是为实时通信构建的一个技术,但它比较难提供稳定的服务质量和超清互动直播,所以当时我们决定自己尝试做一个实时架构,但是真正开始做才知道其中的难度。


我们早期选型是在UDP之上做一层通信可靠保证机制,整个设计的工程量比较巨大。要让延迟更小,就需要保证播放buffer的长度足够小,但是太小了又会出现流畅度的问题;要保证视频流畅,又需要让网络传输更加通畅,要做路由质量评估和决策选路,要评估WIFI的衰减,实时调整视频的动态码率和发送时机;为了避免确认报文泛洪,需要设计合理的报文确认机制来保证媒体报文的及时确认;而为了防止移动端电量消耗过快,就要优化编码端效率、传输模块计算、内存竞争和系统上下文切换等等,我们花费大半年的时间都是在这几个方面寻找平衡点。为了达到目的我们设计了自己的内存池、协议编码、多核无锁并发服务模型和测试评价机制,这些在当时的分享也有介绍(具体内容可以参见《如何实现1080P延迟低于500ms的实时超清直播传输技术》)


LiveVideoStack:当时您还提到了正在研发基于UDP的观看端的一个分发协议,不知道现在是否已经完成?有什么可以和我们分享的?


袁荣喜:在设计完成高清实时互动传输系统后,业务上增加了观看端的需求,当时我们先是采用了引流到CDN网络上进行观看数据分发,但问题接踵而至,观看端用户在某一时刻需要成为发言人,例如上课时学生举手发言。由于CDN传输延迟的关系会造成部分信息丢失,这使得我们不得不研发基于低延时的分发协议。早期我们通过简单的改造实时传输协议可以做到UDP低延迟分发,但在高分辨率大规模分发时,容易造成卡顿和巨大带宽占用的情况。所以我们重新设计基于UDP、基于多点并发传输的分发协议来优化卡顿,后来我们又加入了P2P技术来缓解边缘节点带宽占用过多的问题。


LiveVideoStack:学霸君可以说是在教育场景下对音视频技术的应用,在您看来,“音视频+教育”未来的发展趋势会有怎样的演进?比如VR、全景这样的技术在教育行业的应用会是怎样的?技术上又会有哪些的难点?


袁荣喜:音视频领域和在线教育行业一直保持非常紧密的关联,但教育行业毕竟是个非常特殊的行业,尤其是在线教育。在线教育在进行教学授课时,师生双方都处在学习区(美国心理学家Noel Tichy提出的行为改变理论将人想学习的事务分为3个等级:舒适区、学习区和恐慌区,其中“学习区”表示对自己有一定挑战,因而会感到不适,但不至于过于难受),因此任何技术和产品上的中断,都会让整个过程的挫折感无限放大,这和直播娱乐场景完全不一样。


我认为“音视频+教育”的技术发展都是建立在让师生双方在授课时不出现挫折感、将所有的专注力集中在教和学上,因此这需要更好的实时传输技术、更好的音视频处理技术和编解码技术来做支撑,从而消除空间和距离带来的障碍,未来的VR/AR技术也一定会围绕这一核心问题来做应用,当然这里面有非常多的技术问题需要解决,例如:硬件问题、带宽问题、同步问题、稳定性问题。毕竟VR/AR离真正的生产应用还有一定的距离,作为技术从业者来说解决好当下在线教育行业遇到的技术问题是当务之急。


LiveVideoStack:您对于P2P通信网络一直有比较深的研究,并且刚刚提到使用P2P技术去缓解边缘节点占用带宽过多的问题,而在这次大会上您也会为我们带来有关P2P的内容,这次的分享有什么亮点可以提前跟我们透露下吗?


袁荣喜:P2P技术的产生最早就是源于对媒体数据的分享,其实就是为了解决分享时带宽和速度的问题。但最近几年很奇怪,直播CDN分发大行其道,却很少使用P2P技术来优化分发效率和减少延迟。正因如此,使得直播网站的带宽成本居高不下,延迟问题也得不到彻底解决。


其实这大半年我一直在尝试用P2P的方式解决这两个问题,也算是有了一个初步的结果。这次大会上我会分享一下我们这个技术在一个中大型直播网站上的应用案例,主要是从成本和减少时延的角度来介绍我们的技术原理和解决问题的方法,希望能为同行提供一点技术参考。

还可输入800
全部评论
作者介绍

袁荣喜

学霸君

高级技术总监

文章

粉丝

视频

阅读排行
  • 2周
  • 4周
  • 16周