原创 直播推流sdk测试简介

2020/03/18 直播

前言

2019年底,我加入了直播相关的业务团队,开始负责直播SDK和CDN转推相关的测试工作。其中我们直播SDK基本从0做起,完成从推流端到拉流端实现,所以我将会用直播系列文章记录整个的过程,当然,主要是以测试的角度。

直播SDK包含推流和拉流,这两块测试内容我将会分两篇文章讲述,这一篇讲的是——推流SDK。

在讲直播SDK测试之前,我们先来了解一下整个的直播业务架构从而更好地理解我们究竟要测试什么内容,以腾讯云直播方案为例。

测试内容

要实现一个直播推流端,需要实现采集-预处理-编码-传输,四个主要功能,所以测试也主要围绕这几个方面,所有的测试内容见如下图:

一、调参测试

这里原本应该是单元测试,但由于直播技术的特殊性,它跟硬件、网络强相关,除了逻辑控制,真正的结果往往都体现在网络、硬件输入输出。因此这里变形为调参测试,也叫方法API测试。对于推流端来说,实现的功能对应的API其实是类似的,比如推流基础接口包含:startPreview、stopPreview、startPush、stopPush;视频相关接口:setVideoQuality、switchCamera。首先要梳理清楚直播推流究竟包含哪些API,这些API对应的参数有哪些,比如设置不同的编码分辨率、视频的不同方向、前后置摄像头的切换等等。

这里的调参测试可以理解成修改各个API的相关参数来进行测试,比较推荐的一个方式是通过编写一个Demo,使用推流SDK,动态修改API的参数后直接打包安装来进行测试,需要使用真机。

在这个阶段需要重点关注在外层比较难设置的API参数,这样容易暴露更多的问题,另外需要关注基础性的一些参数,比如GOP、分辨率、帧率(fps),软硬编分别采用什么编码算法,视频profile、颜色格式。

测试API可以参考,腾讯移动直播SDK

二、集成测试

1、Qos测试

Qos-Quality of service,服务质量,在推流SDK中可以理解成一个动态优化器,使得SDK可以最大限度地利用当前带宽进行直播推流,当带宽受限的时候(表现为掉包或延时等),自动降低编码码率,使得观众可以观看更流畅;当带宽变得比较好时又可以升高编码码率,使用户可以观看更清晰的画面。那么如何测试?

Qos测试非常依赖网络,而且逻辑实现上需要实时计算,因此除了代码review,还需要在关键的地方打印日志观察。网络模拟的工具可以使用:

  • 安卓- 腾讯WeTest出品的QNET
  • iOS- 使用自带的 Network Link Conditioner

有条件的可以使用网络模拟损伤仪。

在开启动态编码的情况下我们的Qos才是有意义的,Qos的策略一般有两种,一是根据发送帧率调整编码码率,二是根据发送编码码率调整编码码率或者分辨率。在开启动态码率后,视频编码码率会在MinBitrate和MaxBitrate之间浮动,这是由Qos控制的。当上行带宽比MinBitrate还小,那么就需要主动丢帧,优先丢视频帧,最后才是音频帧,这时候观众就容易看到马赛克了。

2、软硬编码测试

我们都知道硬编的性能完爆软编,但是总有一些情况无法使用硬编,比如切App到后台,或者硬编失效,那么软编的性能能支撑吗?在没有编码优化之前,软编CPU使用率100%是很正常的事情,这时候需要对编码进行优化。测试同学需要了解不同的音视频编码,确定视频软硬编(以h264为例)的画质级别(profile)和level分别使用什么,确定音频基本参数分别使用什么,是需要保持一致,还是需要分别设置不同的配置,这些都需要考虑的。

可以使用ffmpeg截取一段直播视频,提取h264视频流和aac音频流,使用H264Naked查看h264流的sps、pps、sei等信息。还有留意观众侧解码是否有报错。

三、专项测试

1、美颜滤镜测试

我们的美颜滤镜API其实就3个参数,美颜、亮度、红润,给用户就一个美颜百分比的调整条,我们需要找到最优的系数,使得美颜效果不至于太亮、美颜程度过高,这些很大程序需要人的主观感觉。不同的机型,不同性能的机器美颜滤镜的效果和性能是不一样的,需要关注。

2、画质评估测试

影响画质的因素有很多,关于画质也有很多常见的问题,质量指标非常多,除了人肉去看,还可以使用工具去打分,相关的工具有 VQvmaf

这些工具的使用后面做专门介绍。

3、中断测试

作为一个实时交互类的功能——直播,必须要考虑到手机系统中断对APP功能的影响,常见的中断场景有,电话、短信、网络电话、切换后台等。中断对直播推流的影响比较大,对于我们SDK,需要在中断的时候推送一个固定的图片(显示主播已离开)给到观众端,当主播处理完中断后切回APP,直播能够继续进行。

4、性能测试

性能测试重点关注CPU使用率和内存使用率,建议使用专门的工具单独测试长时间直播的耗电量,是否容易出现内存泄露导致crash。

5、兼容性测试

不同的操作系统、手机CPU类型需要尽量覆盖到,优先覆盖业务用户的主流机型。

6、打点上报测试

事件触发是SDK必不可少的能力,在重要的事件发生后上报到服务端才能更好地发现和定位问题。可参考腾讯直播SDK的错误码表

以上便是推流SDK的测试内容,相信随着测试的深入,在结合手工和代码review的基础上,引入和开发相应的工具,对很多指标的测试将会变得更精准和专业。

Search

    Table of Contents