在之前一篇的 DevforDev 专栏中,我们的工程师分享了声网的无参考视频评价体系(VQA)的建立与实践经验。建立一套 VQA 体系需要一个较长的过程,在那之前,大家仍然有很多方法可以来判断实时视频的质量。我们今天就来讲讲有哪些行业通用的视频体验指标。
我们一般通过视频的实时性、流畅性(卡顿率、渲染帧率)、主观画质、首帧出图、音画同步等性能指标来判断视频质量的好与坏。以下内容分别对这些指标做逐一说明,并讲一讲在实验室环境中,每个指标的详细测试方法。
实时性
说到视频直播延时测试,我们就不得不先探讨一下产生延时的几个环节:
part1. 视频采集与编码
part2. 视频设备到服务器的传输
part3. 服务器分发到客户端的传输
part4. 客户端的播放
其中,这个过程延时消耗最大的是 part1 和 part4,也就是编/解码部分,而 part2 和 part3,为网络数据转发与传输,时间消耗是非常小的。视频延时,是一个用于体现视频实时性的指标,发送拍摄内容到接收端渲染的延迟,单位:ms。通常来讲,视频端到端延迟数值越小,实时性越好。
当前业界较为精准的测试方法为在 PC 上开启一个精确到毫秒的计时器,再通过摄像机/手机/桌面编码推流将直播流推送到服务器,再同时开启一个播放器(在本机或者另外的 PC/手机播放器),再通过屏幕截屏或者手机拍照的方式,将源视频和播放视频都包括在一张照片内,再进行时间差值的计算。实验室测试方法和业界测试方法基本类似。
实验室测试方法
1、设备 1 和设备 2 连麦。
2、找一个设备打开精度为 ms 的在线秒表或秒表,将设备 1 后置摄像头正对着秒表,摄像头采集秒表的数字,设备2上能清晰的看到设备 1 发送过来的秒表数字,具体摆放位置如下图 1 所示。
■图1
3、摆好图 1 的位置,然后用 iPhone 拍下 10s 视频,过 3-5 分钟后再拍下 10s 视频,再过 3-5 分钟后拍 10s 视频,共 3 段视频。
4、延时统计:每个视频选 10 个图片(每秒选择一个样点),视频延迟=在线秒表上显示的时刻-手机 2 上显示的时刻(图 1 中的视频延迟=762-447=315ms)。3 段视频共 30 个视频延迟数据,取平均值为最终的视频延迟。
卡顿率和帧率
在视频质量检测中,检测视频是否卡顿也属于视频质量检测的标准之一。
卡顿率:用于体现视频流畅性的指标,测试周期内的卡顿总时长/测试总时长*100%,卡顿率越高,主观体验越差。
帧率:接收端观测到的渲染帧率,帧率越高,流畅性越好。
业界测试流畅性测试方法为:
1.通过自动化录制的测试视频;
2.利用 FFmpe 选择兴趣区域进行截取;
3.拿到兴趣区域进行视频前 10s,中间 10s,后 10s 视频;
4.把三段 10s 的视频进行每 50ms 一张图片;
5.通过 opencv 进行图片的分析;
判断卡顿的主要依据是,当人的视线规则是相同的图片持续 200ms。根据这个规则,通过 opencv 比较上述步骤 4 获取的图片。如果第 n 个图片与第 n+1 的图片比较,像素相似度在某个范围内持续了 4 张图片(50ms*4=200ms)就认为这段视频是卡顿的,从而计算出卡顿率。实验室测试原理与该方法大致相同。
实验室测试方法
1、手机 1 和手机 2 连麦;
2、将手机 1 后置摄像头正对着旋转的地球仪(采集的图像需要保持一直运动),摄像头采集运动的地球仪和运动的主播,球体占整体画面约 1/4 大小,主播占整体画面 1/4。手机 2 上看到手机 1 发送过来地球仪和主播,具体摆放位置如下图 2 所示;
■图2
3、摆好图 2 的位置后,设置弱网,比如限制上行带宽为 500K,丢包 20%。弱网生效后,过约 30-40s,使用手机 2 自带录屏功能录屏 3 分钟,性能较差的手机需要通过转 HDMI 连到电脑,用 QuickTime Player 进行录屏;
4、将录制的 mp4 视频传到电脑,用卡顿率统计脚本计算卡顿率和帧率:200ms 卡顿率:测试周期内,卡顿超过 200ms 的累计时长/测试总时长*100%。
主观画质
视频主观质量评估的目的是准确衡量出人眼对于视频内容的感知。源视频在经过采集编码传输解码等模块传输到人眼之后,会不可避免的引入一些压缩失真,严重的时候甚至会有绿屏、花屏、马赛克等问题。在业界评估视频主观画质有两种常用方法:主观评估和客观评估。主观评估是通过主观打分来验证所有视频质量的等级。客观评估通过一些与主观质量评估结果相近的数学模型来量化人眼对于视频内容的感知,可以提升一些评估的效率。
主观画质是指收到接收端的画面质量,质量等级越高,画面质量越好。
实验室测试方法
观察视频画面质量给出主观画面质量等级评价。
10分: 运动球体清晰,主播轮廓清晰,主播五官清晰,主观感受画质清晰无损
9分: 运动球体清晰,主播轮廓清晰,主播五官有轻微马赛克
8分: 运动球体清晰,主播轮廓清晰,主播五官有马赛克
7分: 运动球体较清晰,主播轮廓较明显,主播五官较糊,有块状马赛克
6分: 运动球体较糊,主播轮廓较明显,主播五官较糊,有大量马赛克
5分: 运动球体模糊,主播轮廓模糊,面部有较多马赛克
4分: 运动球体糊,主播脸大糊,有较多马赛克
3分: 运动球体糊,主播脸大糊,有大量马赛克
2分: 运动球体大糊,主播脸大糊,五官不明显,有大量马赛克
1分: 画面整体大糊,辨识度低
首帧出图
从进入频道到看到对端画面的时间,单位:ms,首帧出图越快越好,至少要达到 1 秒内显示。
简单来讲,视频首帧出图就是视频首帧加载出图的时间,那么这个时间怎么来计算呢?
要想计算出视频首帧加载的时间,我们就需要找到视频首帧加载的标志是什么,也就是我们怎么确定首帧是否加载了,在哪加载的?
这里我们采用的办法是通过播放视频后定时截取图片的方式,找到第一张跟基准图片相似度达到 90% 的图片,就是首帧图片,然后从点击进入频道的系统时间到接收到这张图片的系统时间,这个时间差就是视频首帧加载时间。
实验室测试方法
1、手机 1 先进入频道;
2、手机 2 反复进出 10 次相同的频道,每次在频道内的时间约 10s,在频道外的等候时间约 10s;
3、在录制设备上用固定帧率(如 30 帧/秒)录制手机 2 进出频道的整个过程;
4、将录制好的视频倒入电脑,打开视频编辑软件 Final cut Pro,并导入该视频。在软件中检索录制的视频帧,找出所有点击“进入频道”按钮的帧(图5) ,和所有首帧出现的帧(图6)。由于录制的视频时 30 帧/秒的固定帧率,我们用帧号相减,就得到了两个事件中间隔了多少帧。再按照每帧 1/30 秒,就可以快速计算出每次进入频道的时间;
5、首帧出图时间=[c30+d-(a30+b)]*1000/30,10 次出图时间取平均值;
■图5
■图6
音画同步
所谓音画同步,其原理是对直播进行录像,通过分解录制视频的音频视频文件得出图像时间、音频时间,二者差值得出同步延时差。
音画同步反映视频和音频的同步程度,音画同步的标准是 -200m至200ms,表示:音频最大可以超前视频 200ms,视频最大可以超前音频 200ms。音画同步延迟越靠近 0,同步效果越好。
目前常见的测试音画同步的方式,是由测试人员观看视频,并对比视频画面中人物的唇动和听到的声音是否同步。由于测试人员的个体差异,会有 200ms 左右的误差,因而,需要对视频的音画是否同步进行客观的测试。
实验室测试方法
1、手机 1 和手机 2 进入同一个频道;
2、电脑上循环播放测试用视频文件;
3、将手机 1 后置摄像头正对着电脑屏幕,采集正在播放的同步视频源,保证能在手机 2 端完整地看到红色矩形框以及数字(图7);
3、将手机 2 移到另一个房间,为了防止电脑播放的声音干扰到手机 2 上播放的声音被正确采集。调整电脑播放音量,保证能在手机 2 端较大声地听到滴滴的声音;
5、用 iPhone 录制手机 2 的播放视频和声音,摆放位置如下图8所示;
■图7
■图8
6、将录制的视频导入电脑,播放并分析视频。录制的视频中每一帧都带有帧号,并且在屏幕底部还绘制了一行方格,有一个滑块在上面移动,每帧移动一格,每格代表 1/30 秒(33ms)。在制作测试用的视频时,保证每次打点的声音都正好在滑块位于中心位置时发声。因此播放视频,听到声音立刻暂停,观察帧号或者观察滑块的位置,就可以计算出音画之间的延迟。
带宽跟踪
带宽跟踪,即检测频道内码率传输的大小。
业界测试方法有使用 ping 测试网络,使用测试网站,使用路由跟踪等来测试视频带宽,实验室是通过 wireshark(网络数据包分析软件)截取网络数据包,来分析视频的带宽大小。
实验室测试方法
1、手机连接电脑后,打开 Xcode,然后选择 window–>Device and Simulator–>Device 选中自己的手机,就能看到信息,"Identifier"这一栏,便是UDID;
2、创建 RVI 接口,获取虚拟接口。终端输入 $ rvictl -s
3、打开 wireshark ,在 capture 中选择刚才生成的接口名(例图 9 为 rvi0);
■图9
4、打开 app 开始互通,wireshark 会显示各种各样的的包;
5、选中发送端(本机)和接受端(服务器)的 ip,一般 Source 出现频率最高为本机 ip,Destination 出现频率最高为服务器 ip。(如图 10 和 11);
■图10
■图11
6、复制过滤条件,点击统计,将复制的过滤条件粘贴到显示过滤器一栏中,显示出所抓数据的 I/O 图,便可得到实时通讯的带宽大小(如图 12)
■图12
以上就是我们在 RTC 场景下的视频体验指标,以及对应的实验室测试方法。这些测试方法可以参考用于日常场景开发中。如果大家视频体验还有其它希望了解的知识,可以给我们留言交流。
Dev for Dev专栏介绍
Dev for Dev(Developer for Developer)是声网与 RTC 开发者社区共同发起的开发者互动创新实践活动。透过工程师视角的技术分享、交流碰撞、项目共建等多种形式,汇聚开发者的力量,挖掘和传递最具价值的技术内容和项目,全面释放技术的创造力。