短视频、直播App性能优化调研

前言

偶然间发现20年在负责58部落直播间性能优化时的一些方案的调研文章,由于58部落是偏业务的模块,并且直播底层框架用的是TEG团队开发的SDK,因此我们在做性能优化的时候也比较偏向于业务。因为我不能要求TEG团队去为了我们的业务上的优化去增加一些业务逻辑,这个方向肯定是不可行的,并且从SDK设计上来看也不符合整体的架构设计(底层逻辑中不可以掺杂业务逻辑)。那么我们如果做才能优化我们直播间的性能呢?针对这个方向我做了一些简单的调研,主要是了解当时业内的一些方案(22年各大厂有重新产出了很多直播间的优化方案,可以自行了解),并进行了总结。针对下面提到的方案我们通过对我们的业务分析进行了部分优化,优化效果可以说是十分明显的。例如直播间弱网或者无网络情况下的长链接禁止重连操作,观众端CPU直接优化30%+,主播端CPU优化甚至达到了50%+。

以下是具体的方案内容,注意:方案是20年的。

一、映客App的优化方向有三点:

1、直播大厅优化

2、直播间优化

3、私信消息模块优化

1、直播大厅

优化方案:

1)直播大厅列表刷新机制优化,目的优化大厅列表排名,提高正在直播的房间排名,为主播吸粉;保证直播间入口高可用。

实现策略:采用多种刷新机制相结合的方式。

1)全量刷新,登录之后全量拉去一次数据;

2)顶部刷新,TOP10通过直播流刷新,一个流一个刷新;

3)局部刷新,这个策略主要来说是从用户体验还有服务端缓存策略两个方面进行的。我们对于直播流进行分组,因为实际上当用户来浏览直播大厅时需要对当前一些直播信息进行刷新,比如当前的直播人数。刷新时间间隔通过server端配置。

用户体验方面:

1)滚动大厅或者返回时停止刷新,刷新降频。

2)直播间大厅预先解析房间的视频流地址,加快获取视频流数据的速度,减少直播间起播时间。

2、直播间

关于直播间优化,主要从4个方面讲一下。

1、定时器事件调度

2、房间内长连接消息的处理

3、动画展示

4、主播端的体验优化

下图描述的就是定时器一个事件调度,开始不同的开发人员负责不同的房间内业务模块,使用各种各样的定时器做一些请求,通知等等。后来使用统一的定时器,我们按照不同的时间间隔,对于这些事件进行调度处理。


下面会介绍模块优化的过程。第一个公聊消息列表刷新,用户在下方跟主播进行互动,我们遇到了一个问题,在直播间内公聊消息快速刷新会导致主线的CPU占用非常高,引起整体界面交互卡顿,后面就是怎么一步步解决这个问题。

第一,我们使用长连接消息库,默认就是把代理方法的执行设置到主现场。然后在做一些运营活动或者主播人气特别高的时候,大量广播消息就会导致客户端收到消息过多,很容易引起CPU比较高。针对这个问题,我们的思路是将SocketIO 库中的block执行线程设置为非主线程,缓解主线程中CPU的占用问题。

第二,我们主要是针对性能较低机型上面,会根据收到消息的速度进行实时地统计,根据收到的消息数目来动态调整公聊列表的刷新频率。

接下来我们讲一下怎么进行大量礼物动画的流畅展示,因为这是现在直播APP里面一个标配,这一部分我们优化思路就是下面3点。

首先,我们会对业务里面各种各样的礼物进行分类,收到礼物消息的时候我们就用不同优先级队列进行管理。

然后具体到展示上面,对于点赞还有弹幕,我们使用内存池,缓存点赞和弹幕中执行动画view/layer,以重复使用。

第三点,全屏动画,最开始的时候我们尝试着直接用Gif动画。从UI到产品发布,这个时间迭代时期非常短。后来我们上了一些动画试了效果以后,发现动画在CPU消耗方面会特别严重,需要图片的解码包括加载之类的,非常耗性能。

然后我们逐渐对一些全屏动画采用了Core Animation来进行一些改写。这一块也是需要开发人员对这个框架,对动画里面一些使用特别的熟悉。当然,这个也是结合UI,产品一些效果来对动画里面一些参数进行各种各样的调优。

下面讲一下我们是怎么测试这个系统的?我们会分为下面几点。

首先,就是测试环境里面会在服务端配置一些自动的脚本,对于各种各样的礼物进行压力测试,会关注一些性能指标,例如CPU,内存占用等等,包括有没有一些限制方面的问题。

第二块是要和其他的业务模块结合起来进行测试,这一点其实是很多时候往往会被忽略的。可能添加了一些其他业务模块,就会发现整体APP性能不够用。这一点是比较明显的,我们上了美颜功能,还有今年5月份3.0版本的连麦功能的时候,直播间内有三个播放器同时进行工作,一个主播放器,两个小播放器。这个时候如果再有很多的礼物画面进行展示。无论是CPU,GPU压力都是非常大的。

第三点,最终上线以前,我们导入一些线上真实广播消息数据来对这些系统进行压测,看一下整体APP表现形式什么样子。

我们在做直播端体验方面的优化时发现其中非常普遍的一个现象也是很多APP都存在的一个问题,就是一个直播做了很久,好不容易上了一下热门人气非常高了,这个时候APP突然崩溃了怎么办?

这个解决方法说起来比较简单,我们在开始直播的时候保存一些地址,还有直播间的信息。当APP真的是因为性能问题崩溃了以后。会再次启动APP弹出继续直播的按纽,实际上不会对房间内很多的一些业务造成太多的影响。然后,恢复效果其实就是相当于切后台的一个操作。

第二,我们配合后端做的一个优化,在运营时房间内的广告消息压力是非常大的。主要的现象有以下两点,包括礼物持续刷屏,实际上直播体验是非常糟糕的。大家可以看到这一张图,就是前一段时间里约奥运的洪荒之力。


针对这个运营活动的压力,我们主要的解决思路一个是采用服务降级,会在协议上和服务端做一些商定,服务端可以下发很多限制客户端公聊和礼物消息发送频率的一些命令。然后,客户端这一部分我们也会进行一些限制例如点赞及部分礼物的动画展示,尽可能保证主播端的体验。

接下来主要讲下映客在减轻服务端并发请求方面的优化。

关于用户关注关系的拉取。当你进入一个直播间的时候,都需要拉取上面的用户列表中的关注关系,主播结束直播时可能一下子有非常多用户拉取和主播的关注关系。关于这个场景,实际上会给服务端造成非常大的压力。

还有推送消息这一块。当一些明星用户进行开播全量推送时,可能会唤起大量客户端同时拉取大厅直播列表 。关于这一方面的解决思路,主要是采取缓存的策略。我们会对用户profile,关注关系等进行缓存,收到直播推送的时候,不立即刷新直播列表,延迟到退出直播间后再启动大厅刷新机制。

最后讲一点,就是客户端首次安装启动的问题,当用户首次下载映客了以后,点击登陆时会出现卡顿,这个问题的原因在于什么呢?当客户端启动的时候需要下载大量的图片资源,包括对于各种各样的礼物资源,还有很多等级资源进行请求。这个过程当中有很多大量的文件操作,这就需要我们对部分资源首先进行内置保证基本的使用,另外对于资源进行一个增量下载变现。

上面就是直播间里面一些优化的点。最后简单讲一下私信消息模块的整体设计,我们没有用第三方,而是用自己的一个整套方案。

3、私信消息


在私信里面也是涉及到一些送礼,定制化的东西,我们想做的是提高私信聊天页面的打开速度和提供一个好的浏览消息体验,只需要在内存里面缓存少量的几十条数据来进行整个展示。滑屏浏览时,动态更新缓存内容,这样用户点击某一个人进入到聊天界面,体验会得到优化。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容

  • https://cloud.tencent.com/developer/article/1159061 awk 3...
    duenboa阅读 440评论 0 0
  • 1、从微信APP的发现栏目里找到“小程序”,然后搜小程序后再进去。 2、假设有自己的直播账号的话,就登录就可以了,...
    键盘_f8af阅读 90评论 0 0
  • 今日工作 1,crm 录客户订单,客户订单送货做出库 2,除螨回访。出库明细核对 3,建行卡到账金额已跟戚姐核对正...
    35e49cab2d35阅读 111评论 0 0
  • 郑州工业应用技术学院:新工科建设在地方高校生根开花 红旗视野:(河南日报客户端记者 张建华 通讯员 吴杰霞 张黎斌...
    红旗视野阅读 159评论 0 0
  • #今天是什么日子# ⏰起床:05:00 昨天晚上10点入睡,在床上辗转反侧。不应该啊,昨天早上跑了10公里,晚上散...
    特立_独行阅读 276评论 0 0