移动直播技术的极限优化与高效研发

刘恒兵(河伯),腾讯前端技术专家,IVWEB 负责人。现腾讯互动视频业务前端 TeamLeader ,互动视频、NOW 直播 Web 负责人,负责互动视频前端总体架构设计和开发。多年 Web & H5 移动开发经验,对移动监控和优化有深刻研究,同时推进组件生态,致力于打造高复用、高效率的全栈开发体系。OSC 源创会第55期广州站讲师。前端

1、直播业务的变革

一、直播业务发展node

直播业务最先开始于2013年,当时是社区,功能只有简单的语音聊天。随后,YY作了不少从社区转向娱乐的事情,掀起了在娱乐直播行业的一股小高潮。后来,大量的传统媒体和一些有粉丝体系、名人效应的传媒介入之后,直播转变为基于PGC的一个体系。这个阶段的大部分平台基本偏向于专业作直播这一块业务的企业在作,业务质量会相对高一点,那时的行业增加达到了300%。再到后面,发现广大用户也有直播需求,这个真正带动了基于社交的直播。后端

二、直播业务变革浏览器

随着直播业务的快速发展,给技术人员带来的挑战是什么?技术人员要怎么应对这个业务带来的技术上的变革?性能优化

首先,从原来简单的直播,到细分娱乐直播、游戏直播、体育直播等等,再到用户的实时直播,直播场景在不断细化,致使涉及到的技术方案也有必定差别。随着环境复杂度的变化,网络场景和用户场景愈来愈复杂,技术人员须要考虑各类细分的场景,以及各类极端的状况,而不只仅是平均值。同时,硬件的成熟,给技术人员带来了更多机会,之前作不出来的效果,随着机器性能的提高逐步实现。网络条件的成熟,4G/WIFI的普及也让直播变得更为流畅。可是,技术人员也须要用更新的技术来知足用户的诉求。服务器

三、产品体验变革微信

随着硬件和网络条件的成熟,用户对产品体验的要求也愈来愈高。之前的产品主要在PC端,你们只要集中精力把PC端的产品体验作好闭环就行,放到移动端可能玩不转。不少移动端的体验是基于手机的单屏模式,并且用户很容易切出直播界面,好比忽然来了个微信消息,要切换过去看。这给技术人员带来了和PC端不一样的挑战。也就是说,随着移动端的发展成熟,除了技术,产品体验也在变,这就决定了不少技术方案和技术细节须要不断地去变化。网络

四、直播技术变革架构

综合来看,对于技术上带来的挑战就是:并发

  • 对性能有更高的要求:好比之前可能只要20%的用户有好的体验,如今可能要达到90%以上的用户有好的体验。

  • 低端设备更高体验:低端机并无消亡,若是有看移动端的基础设备统计会发现,低端机一直存在。企业若不肯放弃这部分用户,就至少须要能让他们有降级的体验。

  • 用户等待容忍度下降/弱网络良好体验:用户的等待容忍度在不断下降,之前用户会认为本身机器很差、网络很差,能够等待加载和延时,但如今他们会认为是业务体验差。这时如有其它产品作的更好,你的产品就会被卸载,技术门槛就体如今这里。

  • 互动性、实时性/流畅的交互体验:直播行业对于实时性和互动性的要求会很是高,主播在直播时若是没法及时获得观众的响应,体验会很是糟糕。

2、直播极限优化方案

一、深刻掌握极限优化

挑战已列出,接下来就要想办法解决。极限优化这个概念,不一样的人可能有不一样的理解方式,但最终的目的是同样的,配合业务作好体验。

  • 首先,得清楚优化的使用场景,最终是要解决什么问题,是用户的体验问题?仍是性能问题?亦或其它,不能闷头行动。并且,优化方案带来的实际提高要有预估,根据投入成本进行预估。

  • 同时,要深度分析优化方案的可执行性。由于优化每每不是一我的在作,而是一个团队在作,若是方案自己就不可执行,那浪费的是一个团队的时间。并且,要找准关键的点在哪里,根据本身业务的瓶颈来作,不要盲目跟着别人的方案来作。事先清楚和找准后,再去进行深度的方案讨论。

  • 而后,是要尽可能避免过渡优化。怎么理解?在作优化方案的时候每每会有不少不少方案,有些提高的比例可能没那么高,好比从98%提高到99%,但带来的人工和维护成本很是大,这个时候就要考量用户的比量,肯定是否值得投入。

二、常见优化方案

每一个团队所用的技术、方案都不太同样,因此在优化上面也会有所差别。在此,针对常见的3种方案进行优化分析:

  • 先后端分离:最初的大部分的业务应该都是先后端分离的方式,前端就聚焦在前端上面,后端专一于后端的一些接口、数据的调用。这时要怎么去优化?首先,随着业务愈来愈复杂,前端要作分层处理、模块化,以便维护。同时, 要重点作前端资源加载的优化,由于后端只是在作数据拉取,只要可以抗住量,就没有太大问题。并且,要清楚每一个资源、数据在异常状况下带来的影响。举个列子,你的业务可能有不少不少的资源,当第一个资源失败,会带来什么结果,第二个资源失败,又会带来什么结果,这些都要很是清楚。不然,当用户把问题反馈过来时,很难第一时间发现问题所在。此外,网络场景要去细分,了解用户的重点是在哪里,是在4G网络,仍是在WIFI网络,优化重点要进行偏重。

  • 重前端MV*:随着前端的发展,前端MV*框架越发常见,不少业务、团队都有在用。这种状况下的前端更重,就须要考虑前端并发,不能让用户去等待不少不少的信息。同时要去作同步渲染降级,让用户快速看到。还要考虑在业务里面的SEO,对于浏览器来说,当它拉的信息都是同样的,它会认为页面的更新很是低,搜索引擎很难抓取并更新。

  • Node全栈研发:在发现诉求愈来愈多的时候,就须要有一个能同时聚焦到先后端的工具,恰好Node就能帮咱们作不少事情。这和先后端分离有点像,但又不彻底一致。能够当作,前者是前端一我的后端一我的,但更好的状况是能先后端只有1我的,这样他会更清楚先后端的逻辑,并且这些逻辑要尽量的在先后端复用,这个时候就要考虑先后端的复用体系。Node自己很强,但还须要注意更深刻的一些东西,好比TCP/UDP协议的解析。由于你后端的数据是来源于它的后端的一些数据调用,若是这个时候可以用node解决,那是最好的,前提是node能撑住这个量的场景。

三、效率至上

优化的同时,要对团队的效率进行掌握。效率至上来作优化,才是合理的。对于效率,能够从如下几个方面去看:

第一个是刚才讲的复用体系,先后端复用体系怎么去复用;

第二个就是须要有完整的构建工程体系,如今其实有不少构建工具,在此不作列举,能用工具解决的事情都不要去用人力去作,哪怕是一个简单的更改。由于工具解决不会出问题,但人力解决不免会出问题。

第三个是须要有完整的研发技术栈,研发技术栈决定了团队的统一性,可以帮助新人快速融入和业务的交接。

四、研发生态

虽说效率至上,但也不能只讲效率,还要有全部工具体系的一个生态闭环。它能不能自动更新、自动维护,能不能有一个方式去迭代。好比说其中的一个组件,它可能会升级、会改变,升级的方案是什么?升级后怎么快速的可以跑起来、用起来,不出问题?这就是生态,生态会有不少方面,把业务里面的生态创建起来后,团队的优化才是最高效的。

3、直播优化实践

肯定了方案,下一步就要应用到业务中实践。一样,每一个业务的状况都不同,这里仍是以直播的业务来举例。

1.一、监控——加载监控体系

首先,要知道你的业务瓶颈,这就是经过业务的监控分析出来的。没有监控是很难知道业务的瓶颈在哪里。那到底要监控哪些点呢?可能有人会比较茫然,那么多业务,哪些点是重点,哪些点是必需要作的点,难道每一个都要监控吗?

在此,列出了在业务中须要作的点:

无论是从资源的加载,仍是资源的使用,仍是版本的覆盖,仍是自己的前端的错误,这些都是要作的。若是这些都没有作,那么说明对业务的掌控是不够的,你不知道用户哪里出了问题。因此说监控是很重要的点, 如今有不少开源工具能够帮助你去作,也有不少现成的统计工具。

固然,监控不是最终目的,优化业务和提高业务才是。工具作好以后,就要去在监控中发现问题,最好是能主动发现问题,而不是被动的依靠用户投诉。

1.二、监控——视频流监控体系

在直播业务中,还有个很特别的东西就是视频流。由于它的特色是量很大,加载对用户的网络要求很高,在视频上面对视频流须要比传统的资源更细致的处理。须要去从它的加载、播放等各个方面作监控和完善。作完这些你才知道你的业务问题和瓶颈在哪里。而后再通过分析,就能知道要从哪里下手进行优化。

1.三、监控——机器性能指标监控体系

同时,刚才也有提到,业务对机器的性能要求愈来愈高。有不少的机器甚至可能根本没办法支持很高的FPS业务。性能对业务的影响很是大,一样的性能,A业务能跑起来,B业务若是跑不起来,用户的感受就是B业务作得烂,团队不好。性能可以帮助创建业务的影响力和用户的口碑。

对于性能,其实也有不少办法能够去作监控,好比说给业务在机器上作性能的评分,经过评分可以知道机器究竟是什么状况,用户的机器到底能承载多少FPS业务,再根据结果进行降级和升级优化。这就须要统计和分析用户究竟是处在什么样的机器性能什么。还有给不一样动画进行FPS归类、针对资源分类打包等等方式,都是监控性能比较好的方式。

1.四、监控——前端日志监控体系

刚刚也有提到,用户的环境很是复杂,这也是为何说作前端要去细分到每一个用户的缘由。不像作服务端,机器上跑什么版本你是知道的,搞定这个版本怎么作就ok。但用户不同,每一个用户都是不一样的,出了问题不必定能知道。在大量的数据状况下,是须要测试才能测出来的。所以,要对用户的实际状况进行监控,到底业务走到哪里了,没有走到的缘由是什么?将这些信息所有收集上来。

二、监控体系的自动化

有了这么多监控方式,天然但愿说它们可以自动化去处理。仅仅依靠人力,每一个业务上线都去弄一遍,那很难跑下来,人力成本会十分恐怖。所以须要去作自动化的处理,可以实时的知道业务出了问题,问题出在哪。并且但愿可以经过一些前端的染色,毕竟用户的网络其实也是有成本的,什么都上报,流量费用比其它业务高不少,用户可能会进行投诉,这就须要染色的能力。染色的能力就是说经过配置server去抓取你想要的用户出错信息。

3.一、业务优化实践——节点、场景优化

有了这些自动化以后,就要开始实践了。在业务中去实践的时候能够看到,一个页面的加载会分为不少流程。这些流程下面就是须要去针对细化的各个节点,并肯定每一个点到哪一步须要什么优化方案。还有在各类场景的细分和划分,针对这些场景进行优化。

3.二、业务优化实践——移动页面性能优化

对直播业务来讲,移动端的业务量很是大。所以要学会充分利用性能工具来作事情,学会用工具做分析。同时要关注CPU变化趋势和GPU渲染能力。若是说实在经过H5已经解决不了问题了,就要适当去找你的环境,环境会提供不少native的能力,无论是用React-Native仍是用原生native接口的方式,都只有一个目标,就是经过环境来帮助你业务能够更好的体验。

3.三、业务优化实践——图片资源优化

在直播行业,有两个资源比较重要,一个是视频,一个是图片。先看图片要怎么去作优化。

图片其实有不少不少方式能够作,首先要考虑用户的状况:第一,这个图片能不能快速的加载下来;第二,这个图片在用户端能不能快速渲染。这些决定了图片在业务上打开的快慢。

3.四、业务优化实践——视频资源优化

在直播行业,通用的视频架构几乎都会包含下面这些模块,每个模块在处理时都须要时间,而最终都会体如今影响用户体验的时延。主播开始直播,从上传视频源的这一秒开始计时,到用户能看到主播说这话的这个时间段就是时延。时延是直播业务很是重要的参考数据,时延过高,互动性会很是差。

举例来讲,主播开播,那他就是视频的上行,从上行的开始,要去申请不少不少流程,同时要把这个视频流作一些格式的封装和解码,这就须要处理时间。同时,视频资源比较大, 不能以普通的服务器来承载,要用CDN这种方式来承载,这时流的传送也是一个时延。

在下行端也同样,CDN的架构会有不少不少的云,用户接入时候须要从异地云上拉取资源,这也有时间等待。这里面的时间最终会体如今用户的拉取时延上面,打开视频,可能要等3秒、5秒、10秒。

视频要怎么优化?互动时延和加载时延的问题要怎么解决?

直播业务里面有一个比较关键的数据——GOP关键帧,就是一组动画关键帧。在播放器播放时,是按关键帧解析,非关键帧没法独立解析,必须依赖关键帧才能去渲染。在移动端H5的播放时须要3个HLS分片,分片是关键帧在服务端通过转码以后打包后出来的。所以,要解决互动时延的问题,其实就是优化关键帧的间隔。好比5秒一个HLS分片,3个就是15秒,那主播说一句话,用户要等15秒后才能听到。加载时延就是上面提到的流的分配,能不能优化主动去push到这些节点而不是等用户去拉取。并且上行不少时候是不稳定的,更须要去作不少不少处理,假设丢包了,不少画面解析不出来,这时候还要补帧。

另外就是回放,回放和直播惟一的不一样是不须要互动性,主要须要优化加载时延。这涉及到另一个概念,就是MP4的格式。MP4是按个块封装,能够理解为一个一个的指针,指针的位置是须要相乘,MP4的文件头须要下载下来才能播,若是指针的信息愈来愈多,索引愈来愈多的话,不利于加载,这就须要在服务端处理。

4、直播高效研发之道

前面既然说了这么多须要作的优化工做,那天然是但愿可以不用每一个业务都去作一遍,这就须要去作一些研发效率方面的事情,帮助技术人员快速去作这些事情。

研发效率怎么理解?首先须要有完整的构建体系。这个体系里的工具是根据业务的特色来选择,没有好坏之分,没只有合适之分。同时,须要组件体系来管理组件,你的先后端复用最终都是要以组件的方式存在,组件能够把业务分解到很是细的密度,利于更好的复用。在组件的使用上面须要更快捷的使用方式,上传、更新之后,在须要的时候能快速更新到业务里面去。这些全部的其实都是基于技术栈的统一。

体系创建之后,怎么在业务中使用呢?

业务组件分两种:一是基础组件,就是没有业务区分、通用的,这种不涉及逻辑,只有UI组件,使用的时候能够直接引入UI组件。二是业务组件,须要去作合理的拆分。一般的直播间要拆分为不少不少点,视频、点赞、送礼等等。拆分后若是之后有业务不须要点赞功能,把点赞组件引用去掉就能够,这样就能快速组成新的业务。在引用的时候有3个原则,第一是以快速的搭建为目标,第二是用户只要install下来就能用,三是运行要简单,不须要某个的时候把它干掉就好。

5、优化无极限

最后,每一个业务都有不一样的业务要求,做为技术人员,要思考的点是优化有没有极限?没有!可是业务是有极限的,业务的目标是什么?业务负责人要充分的考虑这些点。

团队研发也是同样的,你的目标是要解决什么问题?最终要让团队达到什么样的目标或lever,都是须要考虑的。最终在业务里面使用的时候,要细分到每一个场景,关注每一个细节,根据这些细分的场景和方案,作业务的支持。

相关文章
相关标签/搜索