一种流数据校验方法、装置、设备及介质与流程
未命名
08-07
阅读:101
评论:0

1.本技术涉及流媒体技术领域,特别是涉及一种流数据校验方法、装置、设备及介质。
背景技术:
2.在流媒体飞速发展的时代,各种以视频形式出现的信息(包括短视频、电视剧、电影等等)充斥着我们的生活,无论是在家庭、交通或办公领域,都在对视频数据的正确性提高要求。但往往由于硬件或者软件的原因,视频丢包的现象给用户带来困扰,一般会出现画面花屏、丢包等情况,影响用户视觉体验。因此视频流数据正确性的校验显得尤为重要,它可以最直接、快速的帮我们定位到流数据是否丢包、丢包时间和丢包原因。但由于数据传输快、解析困难等因素,人工定位待测接口增加了工作量,降低了确定错误流数据对应的待测接口的定位效率。
3.鉴于上述存在的问题,寻求如何快速确定错误流数据对应的待测接口,并提高确定错误流数据对应的待测接口的定位效率是本领域技术人员竭力解决的问题。
技术实现要素:
4.本技术的目的是提供一种流数据校验方法、装置、设备及介质,用于快速确定错误流数据对应的待测接口,并提高确定错误流数据对应的待测接口的定位效率。
5.为解决上述技术问题,本技术提供一种流数据校验方法,包括:
6.调用lua解释器并加载多个lua脚本,其中,lua脚本分为lua父脚本和lua子脚本,且lua父脚本的个数小于lua子脚本的数量;
7.根据lua子脚本启动测试动态库,并利用测试动态库解析待测接口的流数据;
8.获取解析流数据的输出结果,并对流数据进行校验,其中输出结果至少包括确认号和视频。
9.优选地,当输出结果为确认号时,获取解析流数据的输出结果,并对流数据进行校验包括:
10.判断确认号是否连续;
11.若是,则确认待测接口对应的流数据正确;
12.若否,则确认待测接口对应的流数据错误。
13.优选地,当输出结果为视频时,获取解析流数据的输出结果,并对流数据进行校验包括:
14.判断视频是否丢帧;
15.若否,则确认待测接口对应的流数据正确;
16.若是,则确认待测接口对应的流数据错误。
17.优选地,在确认待测接口对应的流数据错误之后,还包括:
18.存储待测接口的错误信息至日志。
19.优选地,根据lua子脚本启动测试动态库包括:
20.根据存储于lua子脚本中的入口函数启动测试动态库。
21.优选地,在根据lua子脚本启动测试动态库之后,还包括:
22.判断测试动态库是否启动成功;
23.若是,则进入利用测试动态库解析待测接口的流数据的步骤;
24.若否,则结束。
25.优选地,在调用lua解释器并加载多个lua脚本之后,在根据lua子脚本启动测试动态库之前,还包括:
26.根据lua父脚本进行初始化。
27.为解决上述技术问题,本技术还提供了一种流数据校验装置,包括:
28.调用并加载模块,用于调用lua解释器并加载多个lua脚本,其中,lua脚本分为lua父脚本和lua子脚本,且lua父脚本的个数小于lua子脚本的数量;
29.第一启动模块,用于根据lua子脚本启动测试动态库,并利用测试动态库解析待测接口的流数据;
30.获取并校验模块,用于获取解析流数据的输出结果,并对流数据进行校验,其中输出结果至少包括确认号和视频。
31.此外,该装置还包括以下模块:
32.优选地,当输出结果为确认号时,获取解析流数据的输出结果,并对流数据进行校验包括:
33.第一判断模块,用于判断确认号是否连续;
34.若是,则触发第一确认模块,用于确认待测接口对应的流数据正确;
35.若否,则触发第二确认模块,用于确认待测接口对应的流数据错误。
36.优选地,当输出结果为视频时,获取解析流数据的输出结果,并对流数据进行校验包括:
37.第二判断模块,用于判断视频是否丢帧;
38.若否,则触发第三确认模块,用于确认待测接口对应的流数据正确;
39.若是,则触发第四确认模块,用于确认待测接口对应的流数据错误。
40.优选地,在确认待测接口对应的流数据错误之后,还包括:
41.存储模块,用于存储待测接口的错误信息至日志。
42.优选地,根据lua子脚本启动测试动态库包括:
43.第二启动模块,用于根据存储于lua子脚本中的入口函数启动测试动态库。
44.优选地,在根据lua子脚本启动测试动态库之后,还包括:
45.第三判断模块,用于判断测试动态库是否启动成功;
46.若是,则进入利用测试动态库解析待测接口的流数据的步骤;
47.若否,则结束。
48.优选地,在调用lua解释器并加载多个lua脚本之后,在根据lua子脚本启动测试动态库之前,还包括:
49.初始化模块,用于根据lua父脚本进行初始化。
50.为解决上述技术问题,本技术还提供了一种流数据校验设备,包括:
51.存储器,用于存储计算机程序;
52.处理器,用于指向计算机程序,实现流数据校验方法的步骤。
53.为解决上述技术问题,本技术还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时,实现上述全部流数据校验方法的步骤。
54.本技术所提供的一种流数据校验方法,包括:调用lua解释器并加载多个lua脚本,其中,lua脚本分为lua父脚本和lua子脚本,且lua父脚本的个数小于lua子脚本的数量,避免数据量冗余;根据lua子脚本启动测试动态库,并利用测试动态库解析待测接口的流数据;获取解析流数据的输出结果,并对流数据进行校验,其中输出结果至少包括确认号和视频。由于此时使用的lua脚本具有体积小、启动速度快等特点,可实现快速对待测接口的流数据进行校验,缩短了确定错误流数据对应的待测接口的时间,并提高了确定错误流数据对应的待测接口的定位效率。
55.本技术还提供了一种流数据校验装置、设备及介质,效果同上。
附图说明
56.为了更清楚地说明本技术实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
57.图1为本技术实施例所提供的一种流数据校验方法流程图;
58.图2为本技术实施例所提供的一种流数据校验流程示意图;
59.图3为本技术实施例所提供的另一种流数据校验流程示意图;
60.图4为本技术实施例所提供的一种流数据校验装置结构图;
61.图5为本技术实施例所提供的一种流数据校验设备结构图。
具体实施方式
62.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本技术保护范围。
63.本技术的核心是提供一种流数据校验方法、装置、设备及介质,其能够快速确定错误流数据对应的待测接口,并提高确定错误流数据对应的待测接口的定位效率。
64.为了使本技术领域的人员更好地理解本技术方案,下面结合附图和具体实施方式对本技术作进一步的详细说明。
65.图1为本技术实施例所提供的一种流数据校验方法流程图,如图1所示,该流数据校验方法,包括:
66.s10:调用lua解释器并加载多个lua脚本;
67.其中,lua脚本分为lua父脚本和lua子脚本,且lua父脚本的个数小于lua子脚本的数量;
68.s11:根据lua子脚本启动测试动态库,并利用测试动态库解析待测接口的流数据;
69.s12:获取解析流数据的输出结果,并对流数据进行校验;
70.其中,输出结果至少包括确认号和视频。
71.需要说明的是,lua解释器用于进行数据交换。lua解释器预读lua脚本中的信息并将信息入栈,在接口调用时出栈运行。具体为,lua解释器载入并执行lua程序(可以理解为lua脚本),lua脚本为文本源形式或预编译二进制形式,其中,预编译二进制用lua编译器输出。lua解释器可被用作批量解释器,并且具有交互性。
72.给出的options被执行之后,文件script中的lua脚本被载入并执行。给出的args可作为arg命名的全局表中的字符串为script所用。如果这些参数含有空白或其他对全局表来说特殊的字符,那么其应该被引用。arg中的参数起始于0,它包含字符串“script”。最后一个参数的索引存储在arg.n中。命令行中,在script之前给出的参数,包括lua解释器的名称,在arg中可通过负数索引引用。在真正开始或者是处理命令行之前,如果定义了环境变量lua_init,lua解释器会先执行环境变量lua_init的内容。如果lua_init的值是“@filename”的形式,那么filename会被执行;否则,该字符串作为一条lua语句执行。
73.lua脚本中的信息一般包括多种字符、函数、初始化设置等等,作为一种更优选的实施例,在本实施例中,lua脚本是基于lua语言编写的接口测试脚本,主要用来实现加载测试动态库以及编写流数据分析的逻辑;同时,测试动态库主要用于封装待测接口,在校验流数据的整个过程中,测试动态库与待测接口一一对应,且可以同时调用多个测试动态库,并且提供lua脚本可识别的接口,直接与lua脚本对接;待测接口用于提供流数据的校验与回调接口。基于此,在调用lua解释器并加载多个lua脚本之后,在根据lua子脚本启动测试动态库之前,还包括:根据lua父脚本进行初始化。此时需要说明的是,在lua父脚本一般设置有通用的字符、函数、初始化设置等等。当这样的lua脚本中的信息被调用时,是通过栈(stack)进行的。栈又可称为堆栈,是一种运算受限的线性表。限定仅在表尾进行插入操作和删除操作的线性表。当其中相对地较高的一端被称为栈顶,则另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,该操作是把新元素或信息放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,该操作是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
74.需要说明的是,根据lua子脚本启动测试动态库包括:根据存储于lua脚本中的入口函数启动测试动态库。由于lua脚本一般包括多种字符、函数、初始化设置等等,因此当启动测试动态库时,调用lua脚本中的入口函数启动测试动态库;并且需要判断测试动态库是否启动成功;若是,则进入利用测试动态库解析待测接口的流数据的步骤;若否,则结束。需要说明是,判断测试动态库是否启动成功可以通过输出的提示信息进行表示。需要说明的是,提示信息可以使用文字形式或数据串形式进行表述。当用文字形式表示提示信息时,该提示信息可以表示为“成功”或“on”等;当用数据串形式表示提示信息时,该数据串可以为1位、2位、4位、8位等等,按照上述提及的次序可以依次表示为“1”、“10”、“1100”“00100111”,需要说明的是,上述提及的对于提示信息的表示方法仅为众多实施例中的几种,并不对提示信息的表示方法做出限定,此外,还可以通过数据串转换为十进制或十六进制的数值,判断该数值是否超出预设值,当超出预设值时,输出该提示信息;还可以通过统计数据串中0和1的个数,当1的个数多于0的个数时,则输出该提示信息;还可以判断数据串中0或1的个数是否超出预设个数,若超出预设个数,则输出该提示信息。上述所提及的实施方式并不对
本技术中的提示信息做出任何限定,可根据实施场景确定其实施方式。
75.lua是一种小巧的脚本语言,具有体积小、启动速度快等特点。从技术角度考虑,lua语言支持c语言的语法解释,不仅可以被c/c++代码调用,同样也可以调用c/c++的函数。同时lua几乎支持所有的操作系统,具有跨平台的特点,使得我们可以轻易的在各个平台上编译和运行。此时基于lua脚本可实现自动对接并调用待测接口对应的流数据,同时在lua脚本中对回调的流数据进行分析与校验。在流数据发生丢包等异常情况下,可以迅速定位丢包位置、丢包时间以及丢包原因,极大的缩短了故障排查的时间,提高了视频故障问题解决的效率。
76.图2为本技术实施例所提供的一种流数据校验流程示意图,如图2所示,以一个lua父脚本和三个lua子脚本(分别为lua子脚本1、lua子脚本2、lua子脚本3)为例,当通过lua解释器调用了lua父脚本和lua子脚本后,通过对应的lua子脚本中的入口函数调用对应的测试动态库(分别为测试动态库1、测试动态库2、测试动态库3),并校验对应的待测接口(分别为待测接口1、待测接口2、待测接口3)。其中。lua父脚本主要做一些基础的初始化操作,例如加载通用函数、初始化日志库、初始化内存管理等功能。同时,可以理解的是,可以通过编写不同的lua脚本来实现实时流、录像流或文件流等流数据的校验,在lua脚本中加载测试动态库成功后即可调用其中的函数进行流数据测试,调用函数的过程也应该为函数出栈的过程(与上述提及的信息出栈过程相同)。测试动态库由lua脚本直接加载,实现了c/c++语言与lua脚本之间的数据传递,lua脚本中实现流数据解析,此时实现了待测接口与流数据的分离。测试动态库主要有以下要求:测试动态库的对外接口必须以“luaopen_*”格式命名;测试动态库内部的接口定义应该尽量定义为“lua_待测接口的名称”,如要测试sdk的“idk_openstream”接口,测试接口则可以定义为“lua_idk_openstream”。
77.其中,对于入栈以及出栈作以下具体说明:
78.栈在计算机领域里指的是数据暂时存储的地方。首先,系统或者数据结构栈中数据内容的读取与插入(压入,push)和弹出(出栈,pop)是两回事。压入是增加数据,弹出是删除数据,这些操作只能在栈顶进行,但读取栈中的数据是随便的。系统栈在计算机体系结构中又起到一个跨部件交互的媒介区域的作用,即cpu与内存的交流通道,cpu只从系统规定的栈入口线性表读取执行指令,可以理解为管道线或流水线(pipeline)。栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
79.栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。栈也称为先进后出表。栈可以用来在函数调用的时候存储断点,做递归时要用到栈。在计算机系统中,栈是一个动态内存区域。程序可以将数据压入栈中,也可以将数据从栈顶弹出。压栈的操作使得栈顶的地址减小,弹出的操作使得栈顶的地址增大。栈在程序的运行中有着举足轻重的作用。最重要的是,栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。堆栈帧一般包含如下几方面的信息:函数的返回地址和参数;临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。
80.进栈算法如下:
81.若top≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则置top=top+1(栈指针加1,指向进栈地址);s(top)=x,结束(x为新进栈的元素);其中n为该栈中最大存储单元的个数;
82.出栈算法如下:
83.若top≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈,空则下溢;不空则作x=s(top),(退栈后的元素赋给x);top=top-1,结束(栈指针减1,指向栈顶)。
84.栈分顺序栈和链式栈,以下用三种程序语句实现顺序栈:
85.需要说明的是,三种程序语句分别为:pascal、c语言、c++语言;
86.其中,当使用pascal实现顺序栈还分为数组型和记录型,具体如下:
87.数组型的实现语句为:
88.const
89.m=栈表目数的上限;
90.type
91.stack=array[1..m]of stype;{栈类型}
[0092]
var
[0093]
s:stack;{栈}
[0094]
top:integer;
[0095]
记录型的实现语句为:
[0096]
const
[0097]
m=栈表目数的上限;
[0098]
type
[0099]
stack=record
[0100]
elem:array[1..m]of elemtp;
[0101]
top:0..m;{栈顶指针}
[0102]
end;
[0103]
var
[0104]
s:stack;{栈}
[0105]
当使用c语言实现顺序栈,具体如下:
[0106]
[0107]
[0108][0109]
当使用c++语言实现顺序栈,具体如下:
[0110]
[0111]
[0112][0113]
此外,还能使用简单代码定义stack,具体如下:
[0114]
stack《int》sta;
[0115]
入栈:sta.push(x);
[0116]
出栈:sta.pop();
[0117]
判断栈的大小:sta.size();
[0118]
判断栈是否为空:sta.empty();
[0119]
本技术所提供的一种流数据校验方法,包括:调用lua解释器并加载多个lua脚本,其中,lua脚本分为lua父脚本和lua子脚本,且lua父脚本的个数小于lua子脚本的数量,避免数据量冗余;根据lua子脚本启动测试动态库,并利用测试动态库解析待测接口的流数据;获取解析流数据的输出结果,并对流数据进行校验,其中输出结果至少包括确认号和视频。由于此时使用的lua脚本具有体积小、启动速度快等特点,可实现快速对待测接口的流数据进行校验,缩短了确定错误流数据对应的待测接口的时间,并提高了确定错误流数据对应的待测接口的定位效率。
[0120]
此外,图3为本技术实施例所提供的另一种流数据校验流程示意图,如图3所示,首先加载获取到lua脚本后,应当执行脚本调度程序,并通过该脚本调用程序动态加载测试动态库,找到与测试动态库对应的待测接口,并得到输出结果。在上述实施例的基础上,作为一种更优选的实施例,当输出结果为确认号时,获取解析流数据的输出结果,并对流数据进行校验包括:
[0121]
判断确认号是否连续;
[0122]
若是,则确认待测接口对应的流数据正确;
[0123]
若否,则确认待测接口对应的流数据错误。
[0124]
同样的,当输出结果为视频时,获取解析流数据的输出结果,并对流数据进行校验包括:
[0125]
判断视频是否丢帧;
[0126]
若否,则确认待测接口对应的流数据正确;
[0127]
若是,则确认待测接口对应的流数据错误。
[0128]
此外,在确认待测接口对应的流数据错误之后,还包括:存储待测接口的错误信息至日志。
[0129]
需要说明是,判断确认号是否连续以及判断视频是否丢帧可以通过输出的错误信息进行表示。其中,错误信息可以使用文字形式或数据串形式进行表述。当用文字形式表示错误信息时,该错误信息可以表示为“丢包位置”、“丢包时刻”或“丢包确认号”等等;当用数据串形式表示错误信息时,该数据串可以为1位、2位、4位、8位等等,按照上述提及的次序可以依次表示为“1”、“10”、“1010”“01100110”,需要说明的是,上述提及的对于错误信息的表示方法仅为众多实施例中的几种,并不对错误信息的表示方法做出限定,此外,还可以通过数据串转换为十进制或十六进制的数值,判断该数值是否超出预设值,当超出预设值时,输出该错误信息;还可以通过统计数据串中0和1的个数,当1的个数多于0的个数时,则输出该错误信息;还可以判断数据串中0或1的个数是否超出预设个数,若超出预设个数,则输出该错误信息。上述所提及的实施方式并不对本技术中的错误信息做出任何限定,可根据实施场景确定其实施方式。同时,输出结果在一个待测接口只能选择确认号或视频中的一种;当有多个待测接口时,每个待测结果的输出结果可以通过具体实施场景确定其输出确认号或者视频。也就是说,以有5个待测接口为例,其中2个待测接口的输出结果可以是确认号,另
外3个待测接口的输出结果可以是视频。
[0130]
在上述实施例中,对于流数据校验方法进行了详细描述,本技术还提供流数据校验装置对应的实施例。需要说明的是,本技术从两个角度对装置部分的实施例进行描述,一种是基于功能模块的角度,另一种是基于硬件的角度。
[0131]
图4为本技术实施例所提供的一种流数据校验装置结构图,如图4所示,本技术还提供了一种流数据校验装置,包括:
[0132]
调用并加载模块40,用于调用lua解释器并加载多个lua脚本,其中,lua脚本分为lua父脚本和lua子脚本,且lua父脚本的个数小于lua子脚本的数量;
[0133]
第一启动模块41,用于根据lua子脚本启动测试动态库,并利用测试动态库解析待测接口的流数据;
[0134]
获取并校验模块42,用于获取解析流数据的输出结果,并对流数据进行校验,其中输出结果至少包括确认号和视频。
[0135]
需要说明的是,lua解释器用于进行数据交换。lua解释器预读lua脚本中的信息并将信息入栈,在接口调用时出栈运行。具体为,lua解释器载入并执行lua程序(可以理解为lua脚本),lua脚本为文本源形式或预编译二进制形式,其中,预编译二进制用lua编译器输出。lua解释器可被用作批量解释器,并且具有交互性。
[0136]
给出的options被执行之后,文件script中的lua脚本被载入并执行。给出的args可作为arg命名的全局表中的字符串为script所用。如果这些参数含有空白或其他对全局表来说特殊的字符,那么其应该被引用。arg中的参数起始于0,它包含字符串“script”。最后一个参数的索引存储在arg.n中。命令行中,在script之前给出的参数,包括lua解释器的名称,在arg中可通过负数索引引用。在真正开始或者是处理命令行之前,如果定义了环境变量lua_init,lua解释器会先执行环境变量lua_init的内容。如果lua_init的值是“@filename”的形式,那么filename会被执行;否则,该字符串作为一条lua语句执行。
[0137]
lua脚本中的信息一般包括多种字符、函数、初始化设置等等,作为一种更优选的实施例,在本实施例中,lua脚本是基于lua语言编写的接口测试脚本,主要用来实现加载测试动态库以及编写流数据分析的逻辑;同时,测试动态库主要用于封装待测接口,在校验流数据的整个过程中,测试动态库与待测接口一一对应,且可以同时调用多个测试动态库,并且提供lua脚本可识别的接口,直接与lua脚本对接;待测接口用于提供流数据的校验与回调接口。基于此,在调用lua解释器并加载多个lua脚本之后,在根据lua子脚本启动测试动态库之前,还包括:根据lua父脚本进行初始化。此时需要说明的是,在lua父脚本一般设置有通用的字符、函数、初始化设置等等。当这样的lua脚本中的信息被调用时,是通过栈(stack)进行的。栈又可称为堆栈,是一种运算受限的线性表。限定仅在表尾进行插入操作和删除操作的线性表。当其中相对地较高的一端被称为栈顶,则另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,该操作是把新元素或信息放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,该操作是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
[0138]
需要说明的是,根据lua子脚本启动测试动态库包括:根据存储于lua脚本中的入口函数启动测试动态库。由于lua脚本一般包括多种字符、函数、初始化设置等等,因此当启动测试动态库时,调用lua脚本中的入口函数启动测试动态库;并且需要判断测试动态库是
否启动成功;若是,则进入利用测试动态库解析待测接口的流数据的步骤;若否,则结束。需要说明是,判断测试动态库是否启动成功可以通过输出的提示信息进行表示。需要说明的是,提示信息可以使用文字形式或数据串形式进行表述。当用文字形式表示提示信息时,该提示信息可以表示为“成功”或“on”等;当用数据串形式表示提示信息时,该数据串可以为1位、2位、4位、8位等等,按照上述提及的次序可以依次表示为“1”、“10”、“1100”“00100111”,需要说明的是,上述提及的对于提示信息的表示方法仅为众多实施例中的几种,并不对提示信息的表示方法做出限定,此外,还可以通过数据串转换为十进制或十六进制的数值,判断该数值是否超出预设值,当超出预设值时,输出该提示信息;还可以通过统计数据串中0和1的个数,当1的个数多于0的个数时,则输出该提示信息;还可以判断数据串中0或1的个数是否超出预设个数,若超出预设个数,则输出该提示信息。上述所提及的实施方式并不对本技术中的提示信息做出任何限定,可根据实施场景确定其实施方式。
[0139]
lua是一种小巧的脚本语言,具有体积小、启动速度快等特点。从技术角度考虑,lua语言支持c语言的语法解释,不仅可以被c/c++代码调用,同样也可以调用c/c++的函数。同时lua几乎支持所有的操作系统,具有跨平台的特点,使得我们可以轻易的在各个平台上编译和运行。此时基于lua脚本可实现自动对接并调用待测接口对应的流数据,同时在lua脚本中对回调的流数据进行分析与校验。在流数据发生丢包等异常情况下,可以迅速定位丢包位置、丢包时间以及丢包原因,极大的缩短了故障排查的时间,提高了视频故障问题解决的效率。
[0140]
以一个lua父脚本和三个lua子脚本(分别为lua子脚本1、lua子脚本2、lua子脚本3)为例,当通过lua解释器调用了lua父脚本和lua子脚本后,通过对应的lua子脚本中的入口函数调用对应的测试动态库(分别为测试动态库1、测试动态库2、测试动态库3),并校验对应的待测接口(分别为待测接口1、待测接口2、待测接口3)。其中。lua父脚本主要做一些基础的初始化操作,例如加载通用函数、初始化日志库、初始化内存管理等功能。同时,可以理解的是,可以通过编写不同的lua脚本来实现实时流、录像流或文件流等流数据的校验,在lua脚本中加载测试动态库成功后即可调用其中的函数进行流数据测试,调用函数的过程也应该为函数出栈的过程(与上述提及的信息出栈过程相同)。测试动态库由lua脚本直接加载,实现了c/c++语言与lua脚本之间的数据传递,lua脚本中实现流数据解析,此时实现了待测接口与流数据的分离。测试动态库主要有以下要求:测试动态库的对外接口必须以“luaopen_*”格式命名;测试动态库内部的接口定义应该尽量定义为“lua_待测接口的名称”,如要测试sdk的“idk_openstream”接口,测试接口则可以定义为“lua_idk_openstream”。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。栈也称为先进后出表。栈可以用来在函数调用的时候存储断点,做递归时要用到栈。在计算机系统中,栈是一个动态内存区域。程序可以将数据压入栈中,也可以将数据从栈顶弹出。压栈的操作使得栈顶的地址减小,弹出的操作使得栈顶的地址增大。栈在程序的运行中有着举足轻重的作用。最重要的是,栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。堆栈帧一般包含如下几方面的信息:函数的返回地址和参数;临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。
[0141]
此外,该装置还包括以下模块:
[0142]
优选地,当输出结果为确认号时,获取解析流数据的输出结果,并对流数据进行校验包括:
[0143]
第一判断模块,用于判断确认号是否连续;
[0144]
若是,则触发第一确认模块,用于确认待测接口对应的流数据正确;
[0145]
若否,则触发第二确认模块,用于确认待测接口对应的流数据错误。
[0146]
优选地,当输出结果为视频时,获取解析流数据的输出结果,并对流数据进行校验包括:
[0147]
第二判断模块,用于判断视频是否丢帧;
[0148]
若否,则触发第三确认模块,用于确认待测接口对应的流数据正确;
[0149]
若是,则触发第四确认模块,用于确认待测接口对应的流数据错误。
[0150]
优选地,在确认待测接口对应的流数据错误之后,还包括:
[0151]
存储模块,用于存储待测接口的错误信息至日志。
[0152]
优选地,根据lua子脚本启动测试动态库包括:
[0153]
第二启动模块,用于根据存储于lua子脚本中的入口函数启动测试动态库。
[0154]
优选地,在根据lua子脚本启动测试动态库之后,还包括:
[0155]
第三判断模块,用于判断测试动态库是否启动成功;
[0156]
若是,则进入利用测试动态库解析待测接口的流数据的步骤;
[0157]
若否,则结束。
[0158]
优选地,在调用lua解释器并加载多个lua脚本之后,在根据lua子脚本启动测试动态库之前,还包括:
[0159]
初始化模块,用于根据lua父脚本进行初始化。
[0160]
首先加载获取到lua脚本后,应当执行脚本调度程序,并通过该脚本调用程序动态加载测试动态库,找到与测试动态库对应的待测接口,并得到输出结果。在上述实施例的基础上,作为一种更优选的实施例,当输出结果为确认号时,获取解析流数据的输出结果,并对流数据进行校验包括:
[0161]
判断确认号是否连续;
[0162]
若是,则确认待测接口对应的流数据正确;
[0163]
若否,则确认待测接口对应的流数据错误。
[0164]
同样的,当输出结果为视频时,获取解析流数据的输出结果,并对流数据进行校验包括:
[0165]
判断视频是否丢帧;
[0166]
若否,则确认待测接口对应的流数据正确;
[0167]
若是,则确认待测接口对应的流数据错误。
[0168]
此外,在确认待测接口对应的流数据错误之后,还包括:存储待测接口的错误信息至日志。
[0169]
需要说明是,判断确认号是否连续以及判断视频是否丢帧可以通过输出的错误信息进行表示。其中,错误信息可以使用文字形式或数据串形式进行表述。当用文字形式表示错误信息时,该错误信息可以表示为“丢包位置”、“丢包时刻”或“丢包确认号”等等;当用数据串形式表示错误信息时,该数据串可以为1位、2位、4位、8位等等,按照上述提及的次序可
以依次表示为“1”、“10”、“1010”“01100110”,需要说明的是,上述提及的对于错误信息的表示方法仅为众多实施例中的几种,并不对错误信息的表示方法做出限定,此外,还可以通过数据串转换为十进制或十六进制的数值,判断该数值是否超出预设值,当超出预设值时,输出该错误信息;还可以通过统计数据串中0和1的个数,当1的个数多于0的个数时,则输出该错误信息;还可以判断数据串中0或1的个数是否超出预设个数,若超出预设个数,则输出该错误信息。上述所提及的实施方式并不对本技术中的错误信息做出任何限定,可根据实施场景确定其实施方式。同时,输出结果在一个待测接口只能选择确认号或视频中的一种;当有多个待测接口时,每个待测结果的输出结果可以通过具体实施场景确定其输出确认号或者视频。也就是说,以有5个待测接口为例,其中2个待测接口的输出结果可以是确认号,另外3个待测接口的输出结果可以是视频。
[0170]
本技术所提供的一种流数据校验方法,包括:调用lua解释器并加载多个lua脚本,其中,lua脚本分为lua父脚本和lua子脚本,且lua父脚本的个数小于lua子脚本的数量,避免数据量冗余;根据lua子脚本启动测试动态库,并利用测试动态库解析待测接口的流数据;获取解析流数据的输出结果,并对流数据进行校验,其中输出结果至少包括确认号和视频。由于此时使用的lua脚本具有体积小、启动速度快等特点,可实现快速对待测接口的流数据进行校验,缩短了确定错误流数据对应的待测接口的时间,并提高了确定错误流数据对应的待测接口的定位效率。
[0171]
本技术通过lua脚本实现流数据自动校验,lua脚本自动执行获取并加载待测接口对应的流数据并解析视频流数据,此过程完全不需要人工参与即可分析输出结果进而定位流数据在传输过程中是否发生丢包,保证了在系统测试过程中能够快速定位流丢包问题,通过lua解释器加载不同的lua脚本,实现不同接口文件测试。
[0172]
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
[0173]
图5为本技术实施例所提供的一种流数据校验设备结构图,如图5所示,流数据校验设备包括:
[0174]
存储器50,用于存储计算机程序;
[0175]
处理器51,用于执行计算机程序时实现如上述实施例中所提到的流数据校验方法的步骤。
[0176]
本实施例提供的流数据校验设备可以包括但不限于智能手机、平板电脑、笔记本电脑或台式电脑等。
[0177]
其中,处理器51可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器51可以采用数字信号处理(digital signal processing,dsp)、现场可编程门阵列(field-programmable gate array,fpga)、可编程逻辑阵列(programmable logic array,pla)中的至少一种硬件形式来实现。处理器51也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(central processing unit,cpu);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器51可以集成有图像处理器(graphics processing unit,gpu),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器51还可以包括人工智能(artificial intelligence,ai)处理器,该ai处理器用于处理有关机器学习的计
算操作。
[0178]
存储器50可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器50还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器50至少用于存储以下计算机程序,其中,该计算机程序被处理器51加载并执行之后,能够实现前述任意一个实施例公开的流数据校验方法的相关步骤。另外,存储器50所存储的资源还可以包括操作系统和数据等,存储方式可以是短暂存储或者永久存储。其中,操作系统可以包括windows、unix、linux等。数据可以包括但不限于流数据校验方法等。
[0179]
在一些实施例中,流数据校验设备还可包括有显示屏、输入输出接口、通信接口、电源以及通信总线。
[0180]
本领域技术人员可以理解,图5中示出的结构并不构成对流数据校验设备的限定,可以包括比图示更多或更少的组件。
[0181]
本技术实施例提供的流数据校验设备,包括存储器50和处理器51,处理器51在执行存储器50存储的程序时,能够实现流数据校验方法。
[0182]
最后,本技术还提供一种计算机可读存储介质对应的实施例。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述方法实施例中记载的步骤。
[0183]
可以理解的是,如果上述实施例中的方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory),rom、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0184]
以上对本技术所提供的一种流数据校验方法、装置、设备及介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以对本技术进行若干改进和修饰,这些改进和修饰也落入本技术权利要求的保护范围内。
[0185]
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
技术特征:
1.一种流数据校验方法,其特征在于,包括:调用lua解释器并加载多个lua脚本,其中,所述lua脚本分为lua父脚本和lua子脚本,且所述lua父脚本的个数小于所述lua子脚本的数量;根据所述lua子脚本启动测试动态库,并利用所述测试动态库解析待测接口的流数据;获取解析所述流数据的输出结果,并对所述流数据进行校验,其中所述输出结果至少包括确认号和视频。2.根据权利要求1所述的流数据校验方法,其特征在于,当所述输出结果为所述确认号时,所述获取解析所述流数据的输出结果,并对所述流数据进行校验包括:判断所述确认号是否连续;若是,则确认所述待测接口对应的所述流数据正确;若否,则确认所述待测接口对应的所述流数据错误。3.根据权利要求1所述的流数据校验方法,其特征在于,当所述输出结果为所述视频时,所述获取解析所述流数据的输出结果,并对所述流数据进行校验包括:判断所述视频是否丢帧;若否,则确认所述待测接口对应的所述流数据正确;若是,则确认所述待测接口对应的所述流数据错误。4.根据权利要求2或3所述的流数据校验方法,其特征在于,在所述确认所述待测接口对应的所述流数据错误之后,还包括:存储所述待测接口的错误信息至日志。5.根据权利要求1所述的流数据校验方法,其特征在于,所述根据所述lua子脚本启动测试动态库包括:根据存储于所述lua子脚本中的入口函数启动所述测试动态库。6.根据权利要求1所述的流数据校验方法,其特征在于,在所述根据所述lua子脚本启动测试动态库之后,还包括:判断所述测试动态库是否启动成功;若是,则进入所述利用所述测试动态库解析待测接口的流数据的步骤;若否,则结束。7.根据权利要求1所述的流数据校验方法,其特征在于,在所述调用lua解释器并加载多个lua脚本之后,在所述根据所述lua子脚本启动测试动态库之前,还包括:根据所述lua父脚本进行初始化。8.一种流数据校验装置,其特征在于,包括:调用并加载模块,用于调用lua解释器并加载多个lua脚本,其中,所述lua脚本分为lua父脚本和lua子脚本,且所述lua父脚本的个数小于所述lua子脚本的数量;第一启动模块,用于根据所述lua子脚本启动测试动态库,并利用所述测试动态库解析待测接口的流数据;获取并校验模块,用于获取解析所述流数据的输出结果,并对所述流数据进行校验,其中所述输出结果至少包括确认号和视频。9.一种流数据校验设备,其特征在于,包括:存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至7任意一项所述的流数据校验方法的步骤。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任意一项所述的流数据校验方法的步骤。
技术总结
本申请公开了一种流数据校验方法、装置、设备及介质,涉及流媒体技术领域。该流数据校验方法包括:调用lua解释器并加载多个lua脚本,其中,lua脚本分为lua父脚本和lua子脚本,且lua父脚本的个数小于lua子脚本的数量,避免了数据量冗余;根据lua子脚本启动测试动态库,并利用测试动态库解析待测接口的流数据;获取解析流数据的输出结果,并对流数据进行校验,其中输出结果至少包括确认号和视频。由于此时使用的lua脚本具有体积小、启动速度快等特点,可实现快速对待测接口的流数据进行校验,缩短了确定错误流数据对应的待测接口的时间,并提高了确定错误流数据对应的待测接口的定位效率。率。率。
技术研发人员:管泽栋
受保护的技术使用者:济南浪潮数据技术有限公司
技术研发日:2023.04.21
技术公布日:2023/8/6
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/