「视频直播技术详解」系列之七:直播云 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
- 无水印,无美颜
- 码率 1 M
- 网络保证在 0.5 M ~ 2 M
这个条件,反映了大部分低速网络情况下的使用场景,也反映了 SDK 基本的性能情况,可以作为 SDK 基本推流和拉流情况下的基准测试,不引入太多的测试依赖。
测试条件 B
- 分辨率 720p
- 无水印,有美颜
- 码率 1 M
- 网络保证在 0.5 M ~ 2 M
这个条件,反映了大部分客户的使用场景,具有较高的分辨率和美颜视频处理,可以作为 SDK 竞品分析的重要依据,测试结果非常接近真实场景。
1)客观指标测试计划
客观影响 App 稳定性和性能的指标:
- Memory
- 测试 10 分钟,内存曲线
- 测试 1 小时,TP99,TP95,TP90,需要归档
- 测试 1 小时,内存增量,考察是否有内存泄露,需要归档
- 参考值:上次结果
- CPU
- 测试 10 分钟,CPU Usage 曲线
- 测试 10 分钟,TP99,TP95,TP90,需要归档
- 参考值:上次结果
- 码率
- 测试 10 分钟,TP99,TP95,TP90,重点说明,这里的码率控制需要分开来看,如果网络抖动造成码率降低,这样的点不计入进来,只测试 SDK 码率控制,需要归档
- 参考值:1 M(大小都是偏差)
- 耗电量
- 测试一小时,记录进程总耗电量、屏幕显示耗电量、CPU 耗电量,需要归档
- 参考值:上次结果
2)主观指标测试计划
主观影响 App 使用者的指标:
- UI Loop App 本身可以达到的最大帧率,不同于视频帧率,统计他的原因是我们的 SDK 可能会影响整个 App 的流畅度,需要跟踪
- 测试 10 分钟,UI Loop 曲线
- 测试 10 分钟,UI Loop TP99,TP95,TP90,需要归档反复比较
- 参考值:60 fps
- Android GC
- 测试 1 小时,记录 Mirror GC 和 Full GC 的频次,记录 GC 时长的 TP99,TP95,TP90,需要归档反复比较
- 参考值:上次结果
- 帧率(fps)
- 测试 10 分钟,TP99,TP95,TP90,需要归档反复比较
- 参考值:30 fps
- PSNR 比较视频清晰度的指标
- 测试 10 分钟,需要归档反复比较,这个指标可以使用固定视频作为输入。
- 参考值:上次结果
3)结果显示
- 表格显示具体指标
- 曲线显示原始数据和时间轴的数据
- 热图显示和参考值的偏差
- 热图显示距离上次归档值是改善了还是恶化了
通过这种反复迭代的自动化的、系统化的测试,我们以职人之心近乎偏执地反复打磨着 SDK 的性能,只为给最终用户带来最好的直播体验,帮助我们的客户通过次时代的媒体最大化自己的商业价值,我们希望在您披荆斩棘的路上我们始终相伴。
本文作者:七牛云布道师@卜赫,原文可去七牛云官方博客查看。
「视频直播技术详解」系列之七:直播云 SDK 性能测试模型的更多相关文章
- 手游录屏直播技术详解 | 直播 SDK 性能优化实践
在上期<直播推流端弱网优化策略 >中,我们介绍了直播推流端是如何优化的.本期,将介绍手游直播中录屏的实现方式. 直播经过一年左右的快速发展,衍生出越来越丰富的业务形式,也覆盖越来越广的应用 ...
- PHP写在线视频直播技术详解
2016年7月22日 22:26:45 交流QQ:903464207 本文会不断更新 废话一句,如果你要做高性能服务器服务,请去读底层的东西 http tcp/ip socket 了解基础协议,你对如 ...
- 视频技术详解:RTMP H5 直播流技术解析
本文聚焦 RTMP 协议的最精华的内容,接进行实际操作 Buffer 的练习和协议的学习. RTMP 是什么 RTMP 全称即是 Real-Time Messaging Protocol.顾名思义就是 ...
- 「实验课选题详解」用C语言实现万年历
题目要求 编程实现万年历,要求: 可根据用户输入或系统日期进行初始化,如果用户无输入则显示系统日期所在月份的月历,并突出显示当前日期: 可根据用户输入的日期查询,并显示查询结果所在月份的月历,突出显示 ...
- Python开发技术详解(视频+源码+文档)
Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...
- Zookeeper系列二:分布式架构详解、分布式技术详解、分布式事务
一.分布式架构详解 1.分布式发展历程 1.1 单点集中式 特点:App.DB.FileServer都部署在一台机器上.并且访问请求量较少 1.2 应用服务和数据服务拆分 特点:App.DB.Fi ...
- CDN学习笔记二(技术详解)
一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同 ...
- CDN技术详解及实现原理
CDN技术详解 一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精 ...
- 如何将HLS延时缩短至4秒,HLS+技术详解
在直播应用中,RTMP 和 HLS 是两种较为成熟且广泛应用的流媒体协议,基本上可以覆盖所有客户端.RTMP 是互联网 TCP/IP 五层体系结构中应用层的协议,主要优势就是实时性高,基本可将直播延时 ...
随机推荐
- [开源]QuickSwitchSVNClient,快速完成SVN Switch的工具
在实际的开发中,我们一般使用SVN工具进行源代码的管理.在实际的产品开发中,根据项目的一些定制要求,往往需要对某一些代码的修改,但是又不想影响主要的开发,这个时候需要对当前的主分支做一些分支处理(br ...
- android内部培训视频_第三节(3)_常用控件(ViewPager、日期时间相关、ListView)
第三节(2):常用控件之ViewPager.日期时间相关.ListView 一.ViewPager 实例:结合PagerAdapter滑动切换图片 二.日期时间相关:AnalogClock\Dig ...
- Java模块化规范之争(转载)
经过近20年的发展,Java语言已成为今日世界上最成功.使用的开发者人数最多的语言之一,Java世界中无数商业的或开源的组织.技术和产品共同构成了一个无比庞大的生态系统. 与大多数开发人员的普遍认知不 ...
- mac 无法识别seagate硬盘、无法向其写入文件
1,无法识别 Seagate 硬盘 新买的mac air Captian 10.11.6系统,连上硬盘根本不出现盘符,usb插头不要插得太深,慢慢的插入,看到硬盘白灯亮起就可以了 2,无法向 Seag ...
- Docker学习总结
本文作为总结性文章,不会详细讲解Docker.但会把已学习的.了解的内容按照由易到难的顺序串起来,更多的是帮助Docker新手快速的了解Docker,知道目前处在哪个阶段,接下来该学些什么,避免碰太多 ...
- [Java Collection]List分组之简单应用.
前言 今天有一个新需求, 是对一个List进行分组, 于是便百度到一些可用的代码以及我们项目使用的一些tools, 在这里总结下方便以后查阅. 一: 需求 现在我们一个数据库表t_series_val ...
- 创建SSH Key连接github或gitlab
mac下用SoureceTree下载github或gitlab上的项目时,需要进行ssh key验证.每次重装系统啥的都要重新弄,我在csdn上看到一篇不错的文章.转载一下,以后自己找起来也方便. 地 ...
- 神秘的 shadow-dom 浅析
说到 shadow-dom 可能很多人会很陌生.但是其实我们肯定碰到过,本文主要想简单介绍下 shadow-dom.下面直接进入正文. shadow-dom 是什么 顾名思义, shadow-dom, ...
- 设计模式(三):“花瓶+鲜花”中的装饰者模式(Decorator Pattern)
在前两篇博客中详细的介绍了"策略模式"和“观察者模式”,今天我们就通过花瓶与鲜花的例子来类比一下“装饰模式”(Decorator Pattern).在“装饰模式”中很好的提现了开放 ...
- ios 音视频实现边播边缓存的思路和解决方案 (转)
本片为转载内容,主要是以后自己看起来方便一些 原文地址:iOS音视频实现边下载边播放 其实音视频本地缓存的思想都差不多,都需要一个中间对象来连接播放器和服务器. 近段时间制作视频播放社区的功能,期间查 ...