直播行业的竞争越来越激烈,经过近几年的洗牌后,已经度过了蛮荒暴力期,剩下的都是在不断追求体验。
直播中的首屏加载时间是直播体验中的一个很重要的指标,也就是说用户从进入直播间播放器加载到第一帧画面出来的时间越短越好。直播平台源代码可以从客户端、直播播放器端、APP业务逻辑等多方面着手优化。
1. 在客户端的优化
直播平台源代码搭建直播系统的过程中,可以提前在直播列表页拿到每个直播间对应的直播流地址,然后在进入直播间的时候直接传过去,进入直播间播放器就可以拿着直播流地址开始播放,不用播放器等到进入直播间请求到直播流地址后再播放,这样节省了从服务器请求直播流地址的时间。
2、播放器相关耗时
当set一个源给播放器后,播放器需要open这个流,然后和服务端建立长连接,然后demux,codec,最后渲染。我们可以按照播放器的四大块,依次优化
·数据请求耗时
·解复用耗时
·解码耗时
·渲染出图耗时
数据请求
这里就是网络和协议相关。无论是http-flv,还是rtmp,都主要是基于tcp的,所以一定会有tcp三次握手,同时打开tcp.c分析。
改动地方主要是hints.ai_family = AF_INET;,原来是 hints.ai_family = AF_UNSPEC;,原来设计是一个兼容IPv4和IPv6的配置,如果修改成AF_INET,那么就不会有AAAA的查询包了。如果只有IPv4的请求,就可以改成AF_INET。当然有IPv6,这里就不要动了。这么看是否有,可以通过抓包工具看。
3、优化APP业务逻辑层面
(1)可以提前做好DNS解析,且提前做好测速和选择最优线路的准备。然后经过预处理之后,在点击播放按钮时,就能极大程度的提高下载时的性能。
(2)还可以围绕传输层面来进行性能优化,或者也可以从客户端的播放行为,优化业务逻辑。两者之间可以形成有效的互为补充,为“秒开”提供足够的优化空间。
4、SSR
与传统 SPA (单页应用程序 (Single-Page Application)) 相比,服务器端渲染 (SSR) 的优势主要在于:
更好的 SEO,由于搜索引擎爬虫抓取工具可以直接查看完全渲染的页面。
更快的内容到达时间 (time-to-content),特别是对于缓慢的网络情况或运行缓慢的设备。无需等待所有的 JavaScript 都完成下载并执行,才显示服务器渲染的标记,所以你的用户将会更快速地看到完整渲染的页面。通常可以产生更好的用户体验,并且对于那些「内容到达时间(time-to-content) 与转化率直接相关」的应用程序而言,服务器端渲染 (SSR) 至关重要。