视频直播技术详解之直播云SDK性能测试模型

声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载。
做者:七牛云
责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@csdn.net,另有「CSDN 高级架构师群」,内有诸多知名互联网公司的大牛架构师,欢迎架构师加微信qshuguang2008申请入群,备注姓名+公司+职位。前端

七牛云于6月底发布了一个针对视频直播的实时流网络LiveNet和完整的直播云解决方案,不少开发者对这个网络和解决方案的细节和使用场景很是感兴趣。web

结合该实时流网络LiveNet和直播云解决方案的实践,咱们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面、深刻地了解视频直播技术,更好地技术选型。算法

本系列文章大纲以下:数据库

(一)采集
(二)处理
(三)编码和封装
(四)推流和传输
(五)延迟优化
(六)现代播放器原理
(七)SDK性能测试模型编程

本篇是《视频直播技术详解》系列的最后一篇:直播云SDK性能测试模型,SDK的性能对最终App的影响很是大。SDK版本迭代快速,每次发布前都要进行系统的测试,测试要有比较一致的行为,要有性能模型做为理论基础,对SDK的性能作量化评估。本文就是来探讨影响SDK性能的指标并创建相应的性能模型的。微信

影响视频质量和大小的重要参数

在进行测试以前咱们须要明确几个对视频质量和大小影响最大的参数:帧率、码率和分辨率。网络

1. 如何制定帧率微信开发

一帧就是一副静止的画面,连续的帧就造成动画,如电视图象等。咱们一般说帧数,简单地说,就是在1秒钟时间里传输的图片的数,也能够理解为图形处理器每秒钟可以刷新几回,一般用fps(Frames Per Second)表示。每一帧都是静止的图象,快速连续地显示帧便造成了运动的假象。高的帧率能够获得更流畅、更逼真的动画。每秒钟帧数(fps)愈多,所显示的动做就会愈流畅。架构

2. 如何制定码率运维

咱们首先看视频编码的目的,它是为了在有限的带宽中传输尽量清晰的视频,咱们以每秒25帧的图像举例,25帧图像中定义了GOP组,目前主要是有I,B,P帧三种帧格式。I帧是关键帧,你能够想象它就是一幅JPEG压缩图像,而B,P帧是依靠I帧存在的,若是丢失了I帧,B,P帧是看不到图像的,B,P帧描述的不是实际的图像像素内容,而是每一个相关像素的变化量,他们相对于I帧信息量会很小。GOP组是指一个关键帧I帧所在的组的长度,每一个GOP组只有1个I帧。

咱们再来看,一组画面的码流大小跟什么有关?当视频编码的压缩方式都同样,清晰度要求都同样的时候,GOP组的长度格式决定了码流的大小,例如:每秒25帧画面,GOP组长度为5,那么帧格式为IBPBP,那么1秒钟有5个I帧,10个B帧,10个P帧,若是GOP组长度为15,帧格式就是IBBPBBPBBPBBPBB,那么1秒钟内会有2个I帧和16个B帧和7个P帧,那么5个I帧比2个I帧占用的数据信息量大,因此GOP组的长度格式也决定了码流的大小。

3. 如何指定分辨率

分辨率概念视频分辨率是指视频成像产品所成图像的大小或尺寸。常见的视像分辨率有640×480,1088×720,1920×1088。在成像的两组数字中,前者为图片长度,后者为图片的宽度,二者相乘得出的是图片的像素。

影响SDK性能的指标

有了上述的前置知识,咱们能够开始准备测试SDK的性能了,咱们首先分析一下都有哪些指标能够反映SDK的性能,分红Android和iOS两个平台:

Android

  • GC:能够经过GC日志记录,Mirror GC和Full GC的频次和时间,Full GC会形成比较明显的卡顿,须要评估
  • UI Loop就是VSync Loop:反映SDK对App流畅度的影响,理论上60 fps是最流畅的值。
  • Memory:反映SDK占用内存的大小
  • CPU Usage:反映SDK占用计算资源的大小

iOS

  • UI Loop:反映SDK对App流畅度的影响,理论上60 fps是最流畅的值。
  • Memory:反映SDK占用内存的大小
  • CPU Usage:反映SDK占用计算资源的大小

除了上面的一些系统级别的指标外,下面是直播SDK中特有的一些指标,这些指标能够反映出SDK的核心竞争力和一些主要的差别,涉及到视频的清晰度和流畅度,也是能够量化的。

1. 影响视频清晰度的指标

  • 帧率
  • 码率
  • 分辨率
  • 量化参数(压缩比)

2. 影响视频流畅度的指标

  • 码率
  • 帧率

3. 其余重要指标

直播是流量和性能的消耗大户,有一些指标,直接影响了用户的感觉,也是咱们须要重点关注的:

  • 耗电量
  • 发热(很差量化,大部分状况发热和耗电量正比,可使用耗电量暂时替代)

测试计划

测试过程须要先固化一些测试条件,而后根据不一样的测试条件得出测试结果,这里选择了两个如今最多见的条件,是咱们经过回访大量客户得出的一些统计数字,能够反映大部分直播应用所处的场景。主要从分辨率、视频处理、码率和网络环境几个维度进行限制。

最后分为几个两种测试指标:客观和主观指标,前者反映了SDK对系统的消耗程度,但虽然说是客观指标也并不是对用户没有影响,只是说得出的结果用户感觉不明显。主观指标则会直接影响最终用户体验,但在传统的测试中反而容易被忽略,由于很差量化,这里抛砖引玉地提出一些量化的方式,但愿引发读者的思考。

测试条件A

  • 分辨率480p
  • 无水印,无美颜
  • 码率1M
  • 网络保证在0.5M~2M

这个条件,反映了大部分低速网络状况下的使用场景,也反映了SDK基本的性能状况,能够做为SDK基本推流和拉流状况下的基准测试,不引入太多的测试依赖。

测试条件B

  • 分辨率720p
  • 无水印,有美颜
  • 码率1M
  • 网络保证在0.5M~2M

这个条件,反映了大部分客户的使用场景,具备较高的分辨率和美颜视频处理,能够做为SDK竞品分析的重要依据,测试结果很是接近真实场景。

1. 客观指标测试计划

客观影响App稳定性和性能的指标:

  • Memory
  • 测试10分钟,内存曲线
  • 测试1小时,TP99,TP95,TP90,须要归档
  • 测试1小时,内存增量,考察是否有内存泄露,须要归档
  • 参考值:上次结果
  • CPU
  • 测试10分钟,CPU Usage曲线
  • 测试10分钟,TP99,TP95,TP90,须要归档
  • 参考值:上次结果
  • 码率
  • 测试10分钟,TP99,TP95,TP90,重点说明,这里的码率控制须要分开来看,若是网络抖动形成码率下降,这样的点不计入进来,只测试SDK码率控制,须要归档
  • 参考值:1M(大小都是误差)
  • 耗电量
  • 测试一小时,记录进程总耗电量、屏幕显示耗电量、CPU耗电量,须要归档
  • 参考值:上次结果

2. 主观指标测试计划

主观影响App使用者的指标:

  • UI Loop App自己能够达到的最大帧率,不一样于视频帧率,统计他的缘由是咱们的SDK可能会影响整个App的流畅度,须要跟踪
  • 测试10分钟,UI Loop曲线
  • 测试10分钟,UI Loop TP9九、TP9五、TP90,须要归档反复比较
  • 参考值:60fps
  • Android GC
  • 测试1小时,记录Mirror GC和Full GC的频次,记录GC时长的TP9九、TP9五、TP90,须要归档反复比较
  • 参考值:上次结果
  • 帧率(fps)
  • 测试10分钟,TP99,TP95,TP90,须要归档反复比较
  • 参考值:30fps
  • PSNR比较视频清晰度的指标
  • 测试10分钟,须要归档反复比较,这个指标可使用固定视频做为输入。
  • 参考值:上次结果

3. 结果显示

  • 表格显示具体指标
  • 曲线显示原始数据和时间轴的数据
  • 热图显示和参考值的误差
  • 热图显示距离上次归档值是改善了仍是恶化了

经过这种反复迭代的自动化、系统化的测试,咱们以职人之心近乎偏执地反复打磨着SDK的性能,只为给最终用户带来最好的直播体验,帮助咱们的客户经过次时代的媒体最大化本身的商业价值,但愿在您披荆斩棘的路上咱们始终相伴。


2016年11月18日-20日,由CSDN重磅打造的年终技术盛会SDCC 2016中国软件开发者大会将在北京举行,大会秉承干货实料(案例)的内容原则,本次大会共设置了12大专题、近百位的演讲嘉宾,并邀请业内顶尖的CTO、架构师和技术专家,与参会嘉宾共同探讨电商架构、高可用架构、编程语言、架构师进阶、微信开发、前端、平台架构演进、基于Spark的大数据系统设计、自动化运维与容器实践、高吞吐数据库系统设计要领、移动视频直播技术等。10月14日还是五折抢票,最低1400元,注册参会