一种用于视频监控设备的数据无锁缓存方法和服务器技术

技术编号:27684570 阅读:14 留言:0更新日期:2021-03-17 03:44
本发明专利技术提供一种用于视频监控设备的数据流无锁缓存方法和服务器,包括:初始化缓存区,所述缓存区包括索引区和数据区;当采集到数据流时,对所述数据流进行封装,得到封装后数据;当所述封装后数据中帧数据的长度超过预设的最大单帧长度时,丢弃所述封装后数据;当所述封装后数据中帧数据的长度不超过预设的最大单帧长度时,将所述封装后数据存入所述数据区,并将所述封装后数据在所述数据区中的起止位置信息保存到所述索引区中;当接收到从缓存区进行数据获取的指令时,通过索引区中保存的起止位置信息获取数据区中对应的封装后数据,并发送所述封装后数据。该方法极大地节省了系统资源调用,提高了数据缓存的效率。

【技术实现步骤摘要】
一种用于视频监控设备的数据无锁缓存方法和服务器
本专利技术涉及视频监控
,尤其涉及一种用于视频监控设备的数据无锁缓存方法和服务器。
技术介绍
现有视频监控设备缓存数据都是使用链式拼接缓存,当产生数据流时,临时从系统动态申请所需内存,连接至上一存储结点的末尾,形成链式存储,由于“消费”周期的不确定,且不定期的存在多个“消费者”,而“生产者”数据持续不断,很容易造成数据堆积,导致大量内存不能及时释放。其中,数据的生产者是指产生数据的电子设备,例如,摄像头采集视频数据流时摄像头生产者;数据的消费者就是指使用数据的电子设备,例如,在屏幕上显示监控视频以及将监控视频存储在硬盘等存储介质上时,显示和存储设备就是消费者。另外,为保证读写数据的正确性,在读写线程之间加入了互斥锁进行隔离操作,平均每30ms就要进行一次lock/unlock操作,降低了系统cpu的使用效率,同时,也反复动态申请/释放内存,造成大量的内存碎片,导致内存的使用效率低下,进而影响产品存储模块、预览模块的不稳定。还有的方案采用固定大小的环形buffer队列,循环使用,但是由于产品实际运行过程中,每帧数据的大小不固定,此种方式会导致内存的浪费。这些都极大降低了数据的缓存使用效率,导致数据缓存的效率低下的问题。
技术实现思路
为解决本专利技术的技术问题,本专利技术公开一种用于视频监控设备的数据无锁缓存方法和服务器,可以提高数据缓存的效率。本专利技术公开一种用于视频监控设备的数据无锁缓存方法,包括:初始化缓存区,所述缓存区包括索引区和数据区,其中,所述数据区用于存放视频监控设备待处理的数据流;所述索引区用于记录所述数据流存放在所述数据区中的起止位置信息;当采集到数据流时,对所述数据流进行封装,得到封装后数据,所述封装后数据包括帧头和帧数据;当所述封装后数据中帧数据的长度超过预设的最大单帧长度时,丢弃所述封装后数据;当所述封装后数据中帧数据的长度不超过预设的最大单帧长度时,将所述封装后数据存入所述数据区,并将所述封装后数据在所述数据区中的起止位置信息保存到所述索引区中;当接收到从缓存区进行数据获取的指令时,通过索引区中保存的起止位置信息获取数据区中对应的封装后数据,并发送所述封装后数据。进一步地,生产者采集的数据流来源于硬件视频编码器中取出的一帧H26x编码视频帧或Mjpeg图像数据以及从麦克风中采集音频数据。进一步地,所述数据流为硬件视频编码器中的一帧H26x编码视频帧或Mjpeg图像数据,或者麦克风采集的音频数据。进一步地,所述将所述封装后数据存入所述数据区,并将所述封装后数据在所述数据区中的起止位置信息保存到所述索引区中,包括:确定所述数据区的环号n,以及所述数据区中的可覆盖空间;将所述封装后数据依次写入所述可覆盖空间中,并将所述封装后数据在所述数据区中的起止位置信息保存到所述索引区中;当所述数据区中不存在所述可覆盖空间时,重新将所述数据区全部确定为可覆盖空间,以及将所述数据区的环号更新为n+1。进一步地,所述通过索引区中保存的起止位置信息获取数据区中对应的封装后数据,包括:通过读句柄的方式,根据索引区中保存的起止位置信息查找数据区中对应的预取的封装后数据;判断所述预取数据是否已覆盖或在数据读取的安全距离以内;当所述预取数据已覆盖或在数据读取的安全距离以内时,则进行数据调整;否则,根据所述指令所携带的消费模式获取封装后数据。进一步地,所述进行数据调整,包括:若所述索引区以及数据区与当前时刻写数据的位置存在跨环,且写数据与读数据之间的距离小于预设的安全距离,则在索引区内依次向前调整,在调整过程中判断是否在安全距离以外且当前帧是IDR帧,是在安全距离以外且当前帧是IDR帧;则将IDR帧的位置信息更新到读句柄中,返回外部调用,调整结束;若欲取的数据离上一帧存在延迟大于初始化的设定值,在索引区中定位到欲取数据的索引信息,从此位置开始,逐个向前调整,判断写-读之间的帧数差值是否小于初始化的设定值,是则继续判断此帧是否为IDR帧,是IDR帧则将此帧的位置信息更新到读句柄中,返回外部调用,调整结束。进一步地,所述进行数据调整,包括:确定消费周期;若所述消费周期稳定且小于预设周期,则将安全距离或帧间距离调小,若所述消费周期稳定且大于预设周期,则将安全距离或帧间距离调大。进一步地,所述根据所述指令所携带的消费模式获取封装后数据,包括:当所述指令所携带的消费模式为预览应用场景模式时,采用帧方式通过索引区中保存的起止位置信息获取数据区中对应的封装后数据;当所述指令所携带的消费模式为录像应用场景模式时,采用块方式通过索引区中保存的起止位置信息获取数据区中对应的封装后数据。进一步地,所述采用帧方式通过索引区中保存的起止位置信息获取数据区中对应的封装后数据,包括:采用帧方式预取数据时,将从索引区中查找当前最新的数据信息放至读句柄;其中,所述采用帧方式获取数据是根据读句柄中的信息定位到对应的索引区,通过索引找到数据区中存放数据的位置,获得数据。进一步地,所述采用块方式通过索引区中保存的起止位置信息获取数据区中对应的封装后数据,包括:块方式预取数据时,先进行预录调整,将当前有效块数据的起始位置数据信息放至读句柄;其中,所述块方式预取数据是先判断读句柄中的停止标志位,所述停止标志位表征停止录像,若是停止录像时,则将当前数据区内全部的有效数据信息返回给到读句柄,写入磁盘;若不是停止录像,则等待数据区可读的数据长度大于等于消费者指定大小的数据时,将数据的存储信息返回读句柄,消费进程取出数据。本专利技术实施例还提供一种服务器,包括处理器和存储器,所述存储器存储有多条指令;所述处理器从所述存储器中加载指令,以执行本专利技术实施例所提供的任一种用于视频监控设备的数据流无锁缓存方法中的步骤。本专利技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本专利技术实施例所提供的任一种用于视频监控设备的数据流无锁缓存方法中的步骤。与现有技术相比,本专利技术具有如下有益效果:根据产品实际功能,预先开辟对应的缓存区,无需频繁的申请/释放内存,并且根据各帧的实际数据大小进行缓存,合理使用并节省内存资源。不同的数据流写入到对应的存储区即可,各个“消费者”读取数据时,只需维护其自身的“句柄”,无需互斥操作,动态调整安全距离及帧间距,减少跳帧的情况发生,根据本产品的“消费”特征,建立了对应的高效读取机制:流式消费和块式消费,极大的提高了数据的缓存使用效率。此缓存区作为原始数据流和上层应用模块之间的“桥梁”,对音视频数据流(H26x/mjpeg/audio)进行管理,其效率直接影响到视频的实时性、正确性。该缓存区采用索引区+数据区的分层管理方式,用于存储复合流、视频流等数据量较大且逻辑控制较多的数据流。以通道/应本文档来自技高网...

【技术保护点】
1.一种用于视频监控设备的数据流无锁缓存方法,其特征在于,包括:/n初始化缓存区,所述缓存区包括索引区和数据区,其中,所述数据区用于存放视频监控设备待处理的数据流;所述索引区用于记录所述数据流存放在所述数据区中的起止位置信息;/n当采集到数据流时,对所述数据流进行封装,得到封装后数据,所述封装后数据包括帧头和帧数据;/n当所述封装后数据中帧数据的长度超过预设的最大单帧长度时,丢弃所述封装后数据;/n当所述封装后数据中帧数据的长度不超过预设的最大单帧长度时,将所述封装后数据存入所述数据区,并将所述封装后数据在所述数据区中的起止位置信息保存到所述索引区中;/n当接收到从缓存区进行数据获取的指令时,通过索引区中保存的起止位置信息获取数据区中对应的封装后数据,并发送所述封装后数据。/n

【技术特征摘要】
1.一种用于视频监控设备的数据流无锁缓存方法,其特征在于,包括:
初始化缓存区,所述缓存区包括索引区和数据区,其中,所述数据区用于存放视频监控设备待处理的数据流;所述索引区用于记录所述数据流存放在所述数据区中的起止位置信息;
当采集到数据流时,对所述数据流进行封装,得到封装后数据,所述封装后数据包括帧头和帧数据;
当所述封装后数据中帧数据的长度超过预设的最大单帧长度时,丢弃所述封装后数据;
当所述封装后数据中帧数据的长度不超过预设的最大单帧长度时,将所述封装后数据存入所述数据区,并将所述封装后数据在所述数据区中的起止位置信息保存到所述索引区中;
当接收到从缓存区进行数据获取的指令时,通过索引区中保存的起止位置信息获取数据区中对应的封装后数据,并发送所述封装后数据。


2.如权利要求1所述的用于视频监控设备的数据流无锁缓存方法,其特征在于,所述数据流为硬件视频编码器中的一帧H26x编码视频帧或Mjpeg图像数据,或者麦克风采集的音频数据。


3.如权利要求1所述的用于视频监控设备的数据流无锁缓存方法,其特征在于,将所述封装后数据存入所述数据区,并将所述封装后数据在所述数据区中的起止位置信息保存到所述索引区中,包括:
确定所述数据区的环号n,以及所述数据区中的可覆盖空间;
将所述封装后数据依次写入所述可覆盖空间中,并将所述封装后数据在所述数据区中的起止位置信息保存到所述索引区中;
当所述数据区中不存在所述可覆盖空间时,重新将所述数据区全部确定为可覆盖空间,以及将所述数据区的环号更新为n+1。


4.如权利要求1所述的用于视频监控设备的数据流无锁缓存方法,其特征在于,所述通过索引区中保存的起止位置信息获取数据区中对应的封装后数据,包括:
通过读句柄的方式,根据索引区中保存的起止位置信息查找数据区中对应的预取数据,所述预取数据为预取的封装后数据;
判断所述预取数据是否已覆盖或在数据读取的安全距离以内;
当所述预取数据已覆盖或在数据读取的安全距离以内时,则进行数据调整;
否则,根据所述指令所携带的消费模式获取封装后数据。


5.如权利要求4所述的用于视频监控设备的数据流无锁缓存方法,其特征在于,所述进行数据调整,包括:
若所述索引区以及数据区与当前时刻写数据的位置存在跨环,且写数据与读数据之间的距离小于预设的安全距离,则在索引区内依次向前调整,直至当前帧在安全距离以...

【专利技术属性】
技术研发人员:刘宇健文毅曾俊
申请(专利权)人:成都焱之阳科技有限公司
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1