举例来说,主播开播,那他就是视频的上行,从上行的开始,要去申请很多很多流程,同时要把这个视频流做一些格式的封装和解码,这就需要处理时间。同时,视频资源比较大, 不能以普通的服务器来承载,要用CDN这种方式来承载,这时流的传送也是一个时延。
在下行端也一样,CDN的架构会有很多很多的云,用户接入时候需要从异地云上拉取资源,这也有时间等待。这里面的时间最终会体现在用户的拉取时延上面,打开视频,可能要等3秒、5秒、10秒。
视频要怎么优化?互动时延和加载时延的问题要怎么解决?
直播业务里面有一个比较关键的数据——GOP关键帧,就是一组动画关键帧。在播放器播放时,是按关键帧解析,非关键帧无法独立解析,必须依赖关键帧才能去渲染。在移动端H5的播放时需要3个HLS分片,分片是关键帧在服务端经过转码之后打包后出来的。因此,要解决互动时延的问题,其实就是优化关键帧的间隔。比如5秒一个HLS分片,3个就是15秒,那主播说一句话,用户要等15秒后才能听到。加载时延就是上面提到的流的分配,能不能优化主动去push到这些节点而不是等用户去拉取。而且上行很多时候是不稳定的,更需要去做很多很多处理,假设丢包了,很多画面解析不出来,这时候还要补帧。
另外就是回放,回放和直播唯一的不同是不需要互动性,主要需要优化加载时延。这涉及到另外一个概念,就是MP4的格式。MP4是按个块封装,可以理解为一个一个的指针,指针的位置是需要相乘,MP4的文件头需要下载下来才能播,如果指针的信息越来越多,索引越来越多的话,不利于加载,这就需要在服务端处理。
四、直播高效研发之道
前面既然说了这么多需要做的优化工作,那自然是希望能够不用每个业务都去做一遍,这就需要去做一些研发效率方面的事情,帮助技术人员快速去做这些事情。
研发效率怎么理解?首先需要有完整的构建体系。这个体系里的工具是根据业务的特点来选择,没有好坏之分,没只有合适之分。同时,需要组件体系来管理组件,你的前后端复用最终都是要以组件的方式存在,组件可以把业务分解到非常细的密度,利于更好的复用。在组件的使用上面需要更快捷的使用方式,上传、更新以后,在需要的时候能快速更新到业务里面去。这些所有的其实都是基于技术栈的统一。
体系建立以后,怎么在业务中使用呢?
业务组件分两种:一是基础组件,就是没有业务区分、通用的,这种不涉及逻辑,只有UI组件,使用的时候可以直接引入UI组件。二是业务组件,需要去做合理的拆分。通常的直播间要拆分为很多很多点,视频、点赞、送礼等等。拆分后如果以后有业务不需要点赞功能,把点赞组件引用去掉就可以,这样就能快速组成新的业务。在引用的时候有3个原则,第一是以快速的搭建为目标,第二是用户只要install下来就能用,三是运行要简单,不需要某个的时候把它干掉就好。
五、优化无极限
最后,每个业务都有不同的业务要求,作为技术人员,要思考的点是优化有没有极限?没有!但是业务是有极限的,业务的目标是什么?业务负责人要充分的考虑这些点。
团队研发也是一样的,你的目标是要解决什么问题?最终要让团队达到什么样的目标或lever,都是需要考虑的。最终在业务里面使用的时候,要细分到每个场景,关注每个细节,根据这些细分的场景和方案,做业务的支持。