掌桥专利:专业的专利平台
掌桥专利
首页

同源视频流的音视频和AI检测结果同步方法及系统

文献发布时间:2023-06-19 19:30:30


同源视频流的音视频和AI检测结果同步方法及系统

技术领域

本发明涉及音视频同步技术领域,具体涉及一种同源视频流的音视频和AI检测结果同步方法及系统。

背景技术

双录系统指银行业等金融机构对自有理财产品及代销产品销售过程同步录音录像的系统。双录系统可以对工作人员的整个销售过程进行监控和记录,通过对记录数据的分析,可以了解销售人员在销售理财等产品过程中的言行是否合规。但双录系统存在以下几个不足之处,导致不少违规行为还是难以被发现:

1、双录系统只记录双录时间段内的言行,双录时间段外,销售人员与客户的沟通情况不被记录,难以发现双录时间段外的违规行为;

2、双录系统进行是否合规质检时,仅检查销售人员是否合规的完成了对应的话术或动作,对销售过程中的其他违规语言和动作并不检查。

为了解决双录系统存在的上述问题,通常采用建立全天候24小时音视频监控的方式采集销售人员的音视频数据,然后进行智能分析,查找双录时间段内外是否存在违规的话术和动作,以作为双录系统质检的一种补充。

基于音视频监控数据对销售人员进行话术和动作是否违规检测时,通常需要对同源视频流执行或同时执行如ASR自动语音识别、目标跟踪、人脸识别等多项AI检测服务,并要求将经短暂处理时间后得到的各项AI检测结果准确渲染到对应视频帧,并对延迟后的音频、视频流进行同步、合并,最后转推出效果流。

但由于无法保证各AI检测服务的成功拉流的起始时间相同,意味着各AI检测服务的初始拉流帧号时间戳通常并不相同,最终将形成各AI检测服务针对同一视频流检测出基于各自的拉流时间轴的含视频流帧号和检测信息的结果队列。显然,将各AI检测服务分别对应的具有不同拉流时间轴的结果队列渲染到同一视频流中,转推出的效果流将非常杂乱,渲染效果很差,因此,迫切需要一种将各AI检测服务的结果队列同步到一条第三方时间轴上的方案,以解决上述问题。

目前,市面上大多数音视频同步方案大体都是开辟一片共享内存区,在这一内存区中设置一个第三方时钟作为参考时钟,视频和音频的播放速度都以该时钟为标准。当播放源比参考时钟慢,则加快其播放速度,或者丢弃帧;快了,则延迟播放。显然,通过第三方时钟进行音视频同步的方案并不适用于在音视频同步的基础上还需同步渲染相应的AI检测结果的应用场景,因为AI检测是需要耗费大量算力资源的,这种通过读取内存获取时钟的方式意味着大量的AI检测服务需要部署在同一服务器中,这会导致服务器硬件资源紧张,提高了单台服务器的配置标准,不利于服务器的长期稳定运行。

发明内容

本发明以对同源视频流作音视频同步的基础上实现AI检测结果同步渲染为目的,提供了一种同源视频流的音视频和AI检测结果同步方法及系统。

为达此目的,本发明采用以下技术方案:

提供一种同源视频流的音视频和AI检测结果同步方法,步骤包括:

为各服务设定统一时钟,所述服务包括AI检测服务和流处理服务;

各所述服务对源视频流进行拉流并实时推送拉流最新帧信息给Redis消息频道,各所述AI检测服务对拉取到的音频流、视频流作相应的AI检测,并将检测结果实时推送给所述Redis消息频道;

成功拉取到流的各所述服务每间隔指定间隔时间执行定时任务,所述定时任务以在任务中最早拉到流的所述服务首次推送的帧号为领头帧号,更新自身不断拉取的流的实时帧号与所述领头帧号的帧号差;

系统将所述流处理服务实时拉取到的流以及从所述Redis消息频道中获取到的各所述AI检测结果存入到对应的cache缓冲区中,所述cache缓冲区包括音频帧cache缓冲区和视频帧及AI检测结果cache缓冲区;

从所述音频帧cache缓冲区和所述视频帧及AI检测结果cache缓冲区中匹配出帧号对应的音频帧、视频帧和所述AI检测结果并合成后作为效果流推出。

作为优选,各所述服务对所述源视频流开始拉流之前,首先对所述源视频流进行一次转发操作,以解除产生所述源视频流的监控设备默认存在的拉流数限制。

作为优选,推送给所述Redis消息频道的所述帧信息包括AI检测服务的服务名称、拉取到的帧的帧时间戳、帧号、与领头帧号的帧号差。

作为优选,各服务更新自身的所述帧号差的方法包括步骤:

L1,获取系统时间戳cTime;

L2,判断cTime是否为整秒,

若是,则转入步骤L3;

若否,则等待至整秒后转入步骤L3;

L3,从所述Redis消息频道中获取整秒时刻往后n秒中各所述服务完成推送的所述帧信息,并创建集合current_frame_array,以存储当前服务在该n秒内实时产生的拉流帧号和拉流帧时间戳;

L4,将获取到的n秒内由同个所述服务产生的各所述帧信息分入到所述服务对应的帧信息集合中;

L5,提取出各个所述帧信息集合中具有相同帧时间戳的各所述帧信息中记载的帧号;

L6,对提取出的各所述帧号进行大小比较,比较出具有最大帧号的一组所述帧信息集合,记为head_frame_array;

L7,循环遍历集合head_frame_array,将每次遍历得到的帧时间戳frame_time去集合current_frame_array中检索是否存在时间戳差值小于±m时间的记录,

若是,则计算本次检索到的时间戳差值小于±m时间的两两时间戳对应的帧号的帧号差frame_bias,并将frame_bias存入到集合frame_bias_array中,

若否,则继续下一次遍历;

L8,遍历完成后,去掉集合frame_bias_array中的最大值和最小值,然后将集合frame_bias_array中出现频次最高的frame_bias作为当前服务与领头服务帧号的最新差值,记为server_frame_bias。

作为优选,步骤S3中,所述指定间隔时间为5分钟,

n=20秒;

m=50毫秒。

作为优选,系统所述流处理服务获取到的所述AI检测结果渲染到对应的视频流中后再将经渲染的所述视频帧存储到所述视频帧及AI检测结果cache缓冲区中,渲染方法为:

系统计算视频帧的当前帧号current_frame_id与server_frame_bias的和值;

根据所述和值从所述流处理服务获取到的各所述AI检测结果中检索出当前拟存入chache的所述视频帧对应的所述AI检测结果,检索成功条件为:

current_frame_id+server_frame_bias=frame_id+frame_bias 公式(1)

公式(1)中的current_frame_id表示视频帧缓冲区中的视频帧帧号;

server_frame_bias表示流处理服务经过帧同步后得到的与领头服务帧号的帧号差;

frame_id表示各个AI服务存入cache中检测到结果的对应视频帧帧号;

frame_bias表示各个AI服务经过帧同步后得到的与领头服务帧号的帧号差;

将检索出的所述AI检测结果渲染到所述视频帧中,然后将所述视频帧再存入到所述视频帧及AI检测结果cache缓冲区中。

作为优选,所述流处理服务在实时拉流时先拉取视频流后拉取音频流。

作为优选,从所述音频帧cache缓冲区和所述视频帧及AI检测结果cache缓冲区中匹配出帧号对应的所述音频帧、所述视频帧和所述AI检测结果并合成后推出效果流的方法包括步骤:

A1,计算视频帧推帧间隔和音频帧推帧间隔;

A2,对所述流处理服务实时先后拉取到的所述音频流和所述视频流记录对应的拉取时间戳,分别记为t2、t1,然后计算拉流帧数差stream_bias=(t2-t1)/(1000/视频流帧率);

A3,根据最新拉取的所述音频流的帧号audio_frame与计算的帧数差stream_bias,计算当前需推出的视频流的帧号,为audio_frame+stream_bias;

A4,在所述视频帧及AI检测结果cache缓冲区中检索以获取帧号为audio_frame+stream_bias的视频帧;

A5,计算步骤A4获取到的帧号为audio_frame+stream_bias的所述视频帧的拉取时间戳VideoDTS和步骤A3最新拉取的所述音频流的拉取时间戳audioDTS的差值作为时间戳实际偏移量Bav,Bav=VideoDTS-audioDTS;

A6,计算的音视频相关单元平均偏移量作为标准偏移量σ

A7,判断Bav的绝对值是否小于所述标准偏移量,

若是,则正常推帧;

若否,则转入步骤A8;

A8,判断Bav是否>0,

若是,则放缓推视频帧的速率;

若否,则加快推视频帧的速率;

A9,将放缓或加快的且经AI检测结果渲染后的视频帧与对应的音频帧合成后作为所述效果流推出。

作为优选,所述视频帧推帧间隔的计算方法为:

视频帧推帧间隔=1000/视频流帧率;

所述音频帧推帧间隔的计算方法为:

音频帧推帧间隔=1000/(音频采样率/(1000*一帧采样数))。

作为优选,步骤A6中,所述标准偏移量σ

公式(2)中,Gv(n),Pv(n)是视频流中第n个媒体单元(MU)的产生时间和播放时间;

Ga(m),Pa(m)是音频流中第m个MU的产生时间和播放时间;

Ma是音频流中MU的总数目。

本发明还提供了一种同源视频流的音视频和AI检测结果同步系统,可实现所述的同源视频流的音视频和AI检测结果同步方法,所述系统包括流转发服务模块、AI检测服务模块、Redis消息频道和流处理服务模块,

所述流转发服务模块,用于在作同步处理之前,对源视频流进行一次转发操作以解除产生所述源视频流的监控设备的拉流限制;

所述AI检测服务模块,用于提供各类AI检测服务,

各所述AI检测服务和所述流处理服务模块对转发的所述源视频进行拉流并实时推送拉流最新帧信息、各所述AI检测服务的AI检测结果到所述Redis消息频道中;

所述流处理服务模块用于做帧同步处理,并以同步后的帧号为标准匹配出对应的所述AI检测结果、音频帧、视频帧并经合成后推出效果流。

本发明通过Redis消息通知技术,在拥有统一时钟的前提下将各AI检测服务的检测结果、流处理服务的拉流帧号信息在每一整秒时刻统一推送到约定的Redis消息频道中,各服务可以实时读取频道中其他服务的拉流帧号、检测结果信息存入各自内存中,与本服务拉流的实时帧号进行追帧算法校对,定时更新与频道中同一秒的领头帧号HFN,及某一最早拉流成功服务的最新帧号的帧号差DFN,以达到通过等式(本服务实时帧号CFN)+DFN=HFN来匹配同一帧各服务的检测结果和音频、视频数据,通过这一架于各个服务之上的消息频道作为桥梁,很大程度上解决了以往采用时钟同步方法进行帧同步普遍局限于统一内存中的限制,达到了音视频、检测结果同步以及各AI服务得以灵活部署,最大化利用硬件资源的目的。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一实施例提供的同源视频流的音视频和AI检测结果同步系统的结构示意图;

图2是同步音视频和AI检测结果的时序图;

图3是对音视频和AI检测结果进行同步的流程图;

图4是推出效果流的方法示意图。

具体实施方式

下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。

其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本专利的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。

本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若出现术语“上”、“下”、“左”、“右”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。

在本发明的描述中,除非另有明确的规定和限定,若出现术语“连接”等指示部件之间的连接关系,该术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个部件内部的连通或两个部件的相互作用关系。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

本发明实施例提供的同源视频流的音视频和AI检测结果同步系统,如图1所示,由流转发服务模块、AI检测服务模块、Redis消息频道和流处理服务模块构成,流转发服务模块用于在作同步处理之前,对源视频流进行一次转发操作以解除产生源视频流的监控设备的拉流限制,后续,由AI检测服务模块提供的各AI检测服务以及流处理服务模块相继对转发的源视频流进行拉流并实时推送拉流最新帧信息(包括拉流帧号)、以及各AI检测服务检测到的AI检测结果到Redis消息频道中,再由流处理服务模块做帧同步处理,并以同步后的帧号为标准匹配出对应的AI检测结果、音视频帧(包括音频帧和视频帧)并经合成后推出效果流。

图2示出了同步音视频和AI检测结果的时序图。以下结合图2对本发明实施例提供的同源视频流的音视频和AI检测结果同步方法具体如何实现进行说明:

1、在服务(包括AI检测服务和流处理服务)拉流之前对源视频流(原始流)作一次转发操作,这样做的目的是为了解除大多数监控摄像头默认存在的拉流数限制,使得各AI检测服务后续能够自由拉流、重新连接等操作。

2、在各服务拉流前需要保证各个AI检测服务以及流处理服务拥有统一时钟,也就是不同服务器应用相同的系统时间,本申请采用NTP(Network Time Protocol)网络时间协议(NTP是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟、GPS等)作时间同步化处理,它可以提供高精准度的时间校正(校正精度为:LAN网络上与标准时间的时间差小于1毫秒,WAN网络上时间差为几十毫秒)。NTP的目的是在无需的Internet环境中提供精确和健壮的时间服务)设置主从节点来统一时钟,各AI检测服务正常启动后会先后拉取转发流,此时各服务内部会有基于他们拉流成功时间戳的不断增长的帧号轴。

3、不同的服务向Redis消息频道中推送的消息分为以下两类:

(1)AI检测服务

一方面,各AI检测服务在每一个整秒时刻向Redis消息频道的frame_sync(frame_sync指的是redis消息频道的一个频道名称,用于区分接收哪一类型的消息,frame_sync频道用于接收各个服务拉渠道的最新帧帧号、时间戳等信息)中推送实时帧信息,帧信息内容包括:server_name:服务名称;frame_time:帧时间戳(拉取到帧的时间,单位为毫秒);frame_id:帧号;frame_bias:与领头帧号(为在本服务当前拉流成功的整秒时刻Redis消息频道中各服务最先拉取到帧的帧号,如本服务拉取到当前帧的时间点为8:00:01,则Redis消息频道中存储的拉帧时间戳正好为8:00:01秒时各服务最早拉取的帧的帧号作为领头帧号。这里需要说明的是,各服务拉取到帧时间点很少正好为整秒时刻,比如服务1拉取到帧的时间点为8:00:00:50,服务2拉取到帧的时间点为8:00:00:32,系统将服务1、服务2拉取到帧的时间戳都记录为8:00:01)的帧号差,frame_bias默认为0,在后续每次同步校验后会将该服务内部帧号与领头帧号的差值作为fram_bias字段的值。

这里需要强调的是,虽然各服务会控制在每一帧秒时刻发送帧同步消息,但实际上拉到帧的时间刚好在整秒上的为少数情况,多数只是趋近于整秒,这里把该帧信息判断为整秒帧的标准为拉到帧是的时间戳与整秒的上下差值在1000/视频流帧率/2。

举例而言:假设视频流帧率为25,则当拉到的帧的时间戳在整秒上下1000/25/2=20毫秒内的就算做是整数帧;

例如:

1668671985与1668672000相差15毫秒

1668672008与1668672000相差8毫秒

这两帧就都算作整数帧

另一方面,AI检测服务会在检测到视频流中的关键信息(如检测到人脸、检测到人体目标、ASR语音识别、理财经理违规触碰客户手机代客操作、工作人员未穿工服工牌、对话中含违禁话语等关键信息)时,将检测结果以及对应帧的帧号推送到Redis消息频道的ai_result(ai_result频道则用于接收各AI服务的关键信息检测结果,如在某一帧检测到人脸、人脸信息以及该帧的帧号等)中。需要注意的是,这里的帧号指的是frame_id+frame_bias的值,供后续对检测结果的同步渲染作准备。frame_id指AI服务检测到关键信息时那一帧的帧号,frame_bias指对这个AI服务检测到的帧号frame_id经过帧同步后得到的同步帧的帧号与领头服务帧号的帧号差。

(2)流处理服务

流处理服务则需要将分别拉到的视频流和音频流的实时帧信息在每一整秒时刻推送到Redis消息频道中。

流处理服务拉取到的实时帧信息包括帧号和拉取到该实时帧的时间戳。

4、当各服务成功拉取到流后,各服务会自动开启一个每隔五分钟就执行一次的定时任务,该定时任务的职责是以最早拉到流的服务首次推送的帧号作为领头帧,及时更新各服务不断拉取到的流的实时帧号与该领头帧号的帧号差(即frame_bias),frame_bias的计算以及一些避免同步误差的细节方案如下:

首先获取系统时间戳cTime;

判断cTime是否为整秒,即cTime%1000(%指的是整除取余,来确认当前是否为整秒时间点,以此来判断是否可以开始对帧同步)是否为0,若为整秒,则开始计算帧号差,若不为整秒,则等待至整秒后在开始计算帧号差。

开始计算帧号差后,首先从Redis消息频道中获取即刻起往后20秒各AI检测服务和流处理服务推送的帧信息,以上意味着获取到了最近20秒的各个AI检测服务和流处理服务的帧信息,并创建集合current_frame_array,以存储当前服务在这20秒内产生的拉流帧号和拉流帧时间戳;。

随后,根据server_name将获取到的各服务在这20秒中推送的帧信息分入到对应的帧信息集合中,每类服务对应一个帧信息集合,每个帧信息集合包含对应类服务在这20秒中推送的帧信息。

然后,提取出各个帧信息集合中具有相同frame_time(帧时间戳)的帧信息中记载的帧号,

对提取出的各帧号进行大小比较,比较出具有最大帧号的一组帧信息集合,记为head_frame_array。

然后,循环遍历集合head_frame_array,将每次遍历得到的帧时间戳frame_time去集合current_frame_array中检索是否存在时间戳差值小于±50毫秒的记录,

若是,则计算时间戳差值小于±50毫秒的两两时间戳对应的帧号的帧号差frame_bias,frame_bias=frame_id1-frame_id2,frame_id1、frame_id2分别表示本次遍历到的帧时间戳和检索到的帧时间戳,并将frame_bias存入到集合frame_bias_array中,

若否,则继续下一次遍历;

在这20秒的帧号比对完毕后,会得到一个存储有在这20秒内的每一个整秒时刻,领头服务的帧号与当前服务的实时帧号的帧号差值的集合frame_bias_array,去掉frame_bias_array中的最大值和最小值,然后将frame_bias_array中出现频次最高的frame_bias作为当前服务与领头服务帧号(即领头帧号)的最新差值,记为server_frame_bias。

5、同步音视频和AI检测结果

在流处理服务分别拉取音频流和视频流成功后,系统实时地将新拉取到的视频帧、音频帧以及它们对应的帧号分别存入一个固定大小的集合cache中,cache的大小取决于缓冲区门限值M与各个AI检测允许的最长检测时间*视频帧率的乘积的较大值(即cache的大小与M或乘积有关)。门限值M通过如下公式计算:

M=2×(dmax-dmin)×r (1)

其中dmax是媒体单元通过网络的最大延迟,dmin是媒体单元通过网络的最小延迟,r为数据传输速率。

这里以ASR检测长句子的十秒左右为例,若M<10*音频帧率,则音频帧的cache大小为10*音频帧率,反之cache大小为M,同理视频帧的cache大小为10*视频帧率,这两个音视频帧缓冲区以队列形式存于内存中,未满时正常加入,集合已满时抛弃最早的帧后再加入最新实时帧。

6.流处理服务需要不断地读取Redis消息频道的ai_result中的各类AI检测结果信息,并将这些AI检测结果以集合的形式存入到视频帧及AI检测结果cache缓冲区中。

7.不同于音频帧的直接更新,在将视频帧存入视频帧及AI检测结果cache缓冲区之前,系统根据视频帧的当前帧号current_frame_id+server_frame_bias的值与流处理服务不断获取的各AI检测结果进行帧信息匹配,并将匹配到的AI检测结果以画框、加字幕等形式画入到对应视频帧中。匹配方法为:

current_frame_id+server_frame_bias=frame_id+frame_bias 公式(2)

公式(2)中的current_frame_id表示视频帧缓冲区中的视频帧帧号;

server_frame_bias表示流处理服务经过帧同步后得到的与领头服务帧号的帧号差;

frame_id表示各个AI服务存入cache中检测到结果的对应视频帧帧号;

frame_bias表示各个AI服务经过帧同步后得到的与领头服务帧号的帧号差。

8、在成功拉取到音视频流后,流处理服务开始效果流的推流工作,分别为推音频帧、视频帧开出两个定时任务线程,这两个线程每次执行推帧任务的定时间隔取决于各自的音频帧率或视频帧率及采样率,计算方法如下:

视频帧推帧间隔=1000/视频流帧率;

音频帧推帧间隔=1000/(音频采样率/(1000*一帧采样数))。

对于音频帧的推流,本申请直接提取音频cache缓冲区中的首帧,以每次间隔音频帧推帧间隔的时间往推流器中推送音频帧数据。

在流处理服务拉流时,需要先拉视频流,后拉音频流,在成功拉取到视频流和音频流时记录对应的拉取时间戳,分别记为t1、t2,然后计算得到先后两次拉取的流的帧数差stream_bias=(t2-t1)/(1000/视频流帧率),因此针对视频帧的推流,需要实时获取最新推出的音频帧缓存数据的音频流帧号audio_frame,此时所需推出的视频帧的帧号为audio_frame+stream_bias,然后在视频帧及AI检测结果cache缓冲区中检索以获取帧号为audio_frame+stream_bias的视频帧;

然后计算获取到的帧号为audio_frame+stream_bias的视频帧的拉取时间戳VideoDTS和最新拉取的音频流的拉取时间戳audioDTS的差值作为时间戳实际偏移量Bav,Bav=VideoDTS-audioDTS;

计算标准偏移量σ

其中,Gv(n),Pv(n)是视频流中第n个媒体单元(MU,媒体单元是指在媒体类别中实际使用的创意尺寸或长度,可以理解为自定义的单位长度,这里可以理解为视频帧和

音频帧)的产生时间和播放时间;

Ga(m),Pa(m)是音频流中第m个MU的产生时间和播放时间;

公式(3)假设音频流中第m个MU的产生时间与视频流中第n个MU的产生时间最接近。Ma是音频流中MU的总数目,该值用于度量音视频相关单元平均偏移。

媒体失步程度(指将前后两个时间点的偏移量相减得到的值来评估偏移的程度。)

也可用SPD来表示。SPD定义为两个强相关对象也即两个时间上最邻近的对象与其原始时间间隔发生的时间间隔变化,以此来衡量当前正推的音视频帧同原始时间间隔的偏

移,相关公式如下:

Dav=(P

然后将Bav与计算得到的标准偏移量σ

若是,则放缓推视频帧的速率;

在视频帧推帧间隔为1000/视频流帧率的定时任务中,在每次推帧后主动阻塞该推视频帧的定时任务线程,阻塞的时长可分摊到后续待推的十帧中,即(Bav-σ

在视频帧推帧间隔为1000/视频流帧率的定时任务中,丢弃当前所正要推的帧,转推缓存中的下一帧。

效果流的推流分为两个阶段,在推流初期,由于每次推的是缓冲区的首帧,在刚开始推流前几秒的填充时间里,缓冲区还未填满,首帧保持不变,此时效果流会呈现短暂的输出同一帧、同一音频的情况,也可认为是白噪音,待缓冲区已满,frame_bias值同步更新完毕,效果流即可呈现带有实时AI检测结果的音视频同步视频流效果,具体的对帧同步过程如图4所示。

以下结合图4对对帧同步的过程进行具体说明:

流处理服务先后拉取视频流、音频流后,记录两次拉流成功的时间差t2-t1,介于检测时间较长的ASR服务影响,流处理服务会前十五秒的视频帧和音频帧存入一个长度为十五秒的缓冲区中,同时开始推出效果流,首先开启的是一个执行间隔为1000/视频流帧率的定时任务线程,该线程以原流视频帧推出的速率不断推出画面帧缓冲区的第一帧,随后等待t2-t1毫秒后开启的是一个执行间隔为1000/(音频采样率/(1000*一帧采样数))的定时任务线程,该线程以原流音频帧推出的速率不断推出音频帧缓冲区的第一帧,待各服务拉流稳定后,开始各自的帧同步,最终得到各自与领头帧的帧号差,对于AI检测服务则是不断将检测到的结果以及对应帧的帧号(这里指同步后的帧号,即原帧号+帧同步后该检测服务的帧号差),此时流处理服务便会从Redis ai_result消息频道中不断读取ai检测结果存入各类检测结果cache中,并在每次渲染画面帧时去遍历各类检测结果cache,通过当前推出帧的帧号+流服务帧同步得到的帧号差去和各类检测结果cache中的帧号做匹配,若帧号相同则将该检测结果以字幕、画框等形式渲染到画面帧上推出。对于图4举例来说就是流处理服务先后拉视频流音频流,得到t2-t1=推出2帧视频帧所需的时间,优先推出画面帧,待t2-t1毫秒后推出音频帧,并在推出每一帧画面帧时匹配ai检测结果cache,在图中体现为当前正推帧流处理服务的帧号为15的画面帧,此时流处理服务相对领头服务的帧号差为4,便去检索ai检测结果帧号+该ai服务帧号差等于19的检测结果渲染到画面帧上最后推出画面帧。

需要声明的是,上述具体实施方式仅仅为本发明的较佳实施例及所运用技术原理。本领域技术人员应该明白,还可以对本发明做各种修改、等同替换、变化等等。但是,这些变换只要未背离本发明的精神,都应在本发明的保护范围之内。另外,本申请说明书和权利要求书所使用的一些术语并不是限制,仅仅是为了便于描述。

技术分类

06120115936463