调试视频通话延迟

2019-01-13  本文已影响10人  bigonelby

最近的工作任务是,找到我们视频通话中的延迟瓶颈,找一找解决方案
之前没有做过类似的工作,所以这次做起来还是有些挑战。

这里总结一下这次工作的主要思路:

  1. 首先就是梳理流程

充分的了解视频发送端和接收端的流程,是找到时间延迟的关键,我的思路就是阅读代码,配合xcode的断点,梳理出代码的逻辑,并且总结出UML图。我比较喜欢画类图,这样可以比较清晰的看出类和类之间的关系。一般画UML图还要画时序图,我不喜欢画时序图,我个人习惯于在类图上以注释的方式说明类和类之间的调用流动关系。

在画类图的时候还有一个小技巧,就是不要想着画的面面俱到。因为太细致了就会让我们迷失方向,最好是有针对性的画。有时,为了凸显类之间协同完成的一个功能,则引入了类的一些成员和方法;如果描述另一个功能,可能同一个类引入的就是完全不一样的成员和方法了。所以类图的精髓在于简单,只说明一个道理,只说清一个流程就好。

  1. 增加时间的打印

有了流程的梳理,下面就是增加一些时间的打印了,在各个流程上增加一些必要的log,以便提供分析的素材。增加log的时候,实际上就可以理解为一个独立的计时统计的模块。为了保证代码的高聚合低耦合,我们最好设计出统计时间的文件和对应的类,并且提供简单的宏调用。

设计的这个类可以是一个单例,也可以是一个静态类。这样在代码流程的不同地方,可以方便的增加打印信息。有了这些打印的log,我们就有了素材,有了素材,我们就可以进一步的分析时间的消耗了

  1. 数据分析

首先我们需要从log中提取出数据,提取的过程可以用shell的awk,grep,必要的时候配合sort,uniq等常用的处理程序。我们可以将我们感兴趣的数据保存成一个文件,并且通过excel表对数据进行画图分析。

另一种高效的方法就是利用python了,利用python我们可以非常方便的定制化我们的提取流程,并且通过python自带的绘图库,就可以直接画出绘图曲线。通过绘制出的图,我们很容易的可以找到时间的消耗。

  1. 性能分析

我们可以通过xcode的profile功能,进行性能的分析。用xcode的profile跑一段数据,我们可以研究profile中录制的数据,看看在性能的跳变点,是否有可以进行优化的。

比如,log信息实际上是非常费性能的,如果在xcode的profile分析路径中发现有log信息的话,我们就可以直接将log信息去掉。如果log信息非常必要的话,我们也可以减少log打印的频度,可以每隔几秒输出一次log。

另外就是还有一些流程是否可以优化,比如音频如果进行了重采样,就可以想一想,是否可以让采集的采样率和实际处理发送的采样率保持一致?

通过这样的分析,就可以有效的对性能进行优化了。

上一篇 下一篇

猜你喜欢

热点阅读