一种基于无锁缓存队列的多路h264视频数据缓存方法及系统技术方案

技术编号:19518320 阅读:45 留言:0更新日期:2018-11-23 20:13
本发明专利技术公开了一种基于无锁缓存队列的多路h264视频数据缓存方法及系统,该方法包括:获取针对第一缓存队列的当前缓存子块c1i的所述多路h264视频数据中的一帧数据;判断该帧数据是否为I帧数据;当帧数据为I帧数据时,将帧数据写入与当前缓存子块c1i对应的第二缓存队列中的缓存子块c2i,并继续获取针对第一缓存队列的下一缓存子块c1(i+1)的多路h264视频数据中的下一帧数据;当帧数据不为I帧数据时,将帧数据写入当前缓存子块c1i,并继续获取针对第一缓存队列的下一缓存子块c1(i+1)的多路h264视频数据中的下一帧数据。可见,本发明专利技术实现了保证关键帧(I帧)的完整性,减少视频数据的跳帧现象,进而保证后续播放视频数据时的流畅度和完整性的目的。

【技术实现步骤摘要】
一种基于无锁缓存队列的多路h264视频数据缓存方法及系统
本专利技术涉及多路视频数据存取
,特别是涉及一种基于无锁缓存队列的多路h264视频数据缓存方法及系统。
技术介绍
当今,随着科学技术和社会经济的飞速发展,人们可以随时随地记录下产生的各类数据,在记录各类数据的过程中,人们主要关心的问题是如何将监控到的数据忠实地、完整地记录下来,即如何保证存储数据的可靠性和完整性。在实际应用中,通常需要将多个摄像头采集到的多路视频数据以恒定速率不间断地写入分布式存储系统中,比如在某个直播节目的现场,需要将众多摄像机采集到的视频数据写入分布式存储系统,然后在经过一定处理提供给观众。在现有的基于无锁缓存队列的将多路视频数据存至分布式缓存系统的方法中,生产线程和消费线程共用一个缓存,该缓存切分为多个缓存子块。生产线程以恒定速率从多路视频数据中读取一帧数据并写入缓存中的一个缓存子块,多个消费线程从这个缓存子块中读取一帧数据存入到文件中。每写完一个缓存子块,缓存子块的计数值加1。参考图1,刚开始时,生产线程向缓存中写入数据,消费线程开始读取缓存并写入到分布式系统中;参考图2,当生产线程写满缓存时,在缓存的开始继续写入;当消费线程的读取速度比生产线程的写入速度慢很多时,消费线程会跳过被覆盖的块,然后再从缓存中获取,比如,在图3中,消费线程读取了16后,下一个应该为17,但是被生产线程将17覆盖变成了25,这时,消费线程会跳过25而读取18。在这种情况下,如果17对应的视频数据为数据量比较大或者是重要性比较高的数据时,易导致视频数据的跳帧现象,进而会影响后续播放这个视频数据时的流畅度和完整性。
技术实现思路
有鉴于此,本专利技术提供了一种基于无锁缓存队列的多路h264视频数据缓存方法及系统,以实现保证关键帧的完整性,减少视频数据的跳帧现象,进而保证后续播放视频数据时的流畅度和完整性的目的。为解决上述技术问题,本专利技术提供一种基于无锁缓存队列的多路h264视频数据缓存方法,该方法包括:获取针对第一缓存队列的当前缓存子块c1i的所述多路h264视频数据中的一帧数据;判断所述帧数据是否为I帧数据;当所述帧数据为I帧数据时,将所述帧数据写入与所述当前缓存子块c1i对应的第二缓存队列中的缓存子块c2i,并继续获取针对所述第一缓存队列的下一缓存子块c1(i+1)的所述多路h264视频数据中的下一帧数据;当所述帧数据不为I帧数据时,将所述帧数据写入所述当前缓存子块c1i,并继续获取针对所述第一缓存队列的下一缓存子块c1(i+1)的所述多路h264视频数据中的下一帧数据;当i+1>N时,c1(i+1)为c11;其中,所述第一缓存队列C1={c11,c12,…,c1i,…,c1N},所述第二缓存队列C2={c21,c22,…,c2i,…,c2N},i=1,2,3,……,N;c1i为所述第一缓存队列中的第i个缓存子块,c2i为所述第二缓存队列中与c1i相对应的缓存子块;各所述缓存子块的内存大小相等。上述方法中,优选地,在判定所述帧数据为I帧数据之后,还包括:判断所述缓存子块c2i中是否存有数据;当所述缓存子块c2i中存有数据时,将所述帧数据写入所述当前缓存子块c1i,并继续获取所述下一帧数据;当所述缓存子块c2i中没有存有数据时,将所述帧数据写入所述缓存子块c2i,并继续获取所述下一帧数据。上述方法中,优选地还包括:判断与所述第一缓存队列的缓存子块c1j相对应的所述第二缓存队列中的缓存子块c2j中是否存有数据;j=1,2,3,……,N;当所述缓存子块c2j中存有数据时,对所述缓存子块c2j中的数据进行剪切,得到待存入数据;当所述缓存子块c2j中没有存有数据时,获取所述缓存子块c1j中的数据作为所述待存入数据;将所述待存入数据存储至分布式存储系统。上述方法中,优选地在得到所述待存入数据之后,还包括:返回执行判断与所述第一缓存队列的缓存子块c1(j+1)相对应的所述第二缓存队列中的缓存子块c2(j+1)中是否存有数据;其中,当j+1>N时,c1(j+1)为c11,c2(j+1)为c21。上述方法中,优选地还包括:记录所述获取针对所述第一缓存队列的当前缓存子块c1i的所述多路h264视频数据中的一帧数据的获取时间;记录将所述待存入数据存储至分布式存储系统的存入时间;将所述获取时间与所述存入时间之间的差值作为存储延时。本专利技术还提供了一种基于无锁缓存队列的多路h264视频数据缓存系统,该系统包括:第一获取单元,用于获取针对第一缓存队列的当前缓存子块c1i的所述多路h264视频数据中的一帧数据;第一判断单元,用于判断所述帧数据是否为I帧数据;写入单元,用于当所述帧数据为I帧数据时,将所述帧数据写入与所述当前缓存子块c1i对应的第二缓存队列中的缓存子块c2i,并通知所述第一获取单元继续获取针对所述第一缓存队列的下一缓存子块c1(i+1)的所述多路h264视频数据中的下一帧数据;当所述帧数据不为I帧数据时,将所述帧数据写入所述当前缓存子块c1i,并通知所述第一获取单元继续获取针对所述第一缓存队列的下一缓存子块c1(i+1)的所述多路h264视频数据中的下一帧数据;当i+1>N时,c1(i+1)为c11;其中,所述第一缓存队列C1={c11,c12,…,c1i,…,c1N},所述第二缓存队列C2={c21,c22,…,c2i,…,c2N},i=1,2,3,……,N;c1i为所述第一缓存队列中的第i个缓存子块,c2i为所述第二缓存队列中与c1i相对应的缓存子块;各所述缓存子块的内存大小相等。上述系统中,优选地,所述第一判断单元还用于在判定所述帧数据为I帧数据之后,判断所述缓存子块c2i中是否存有数据;所述写入单元还用于当所述缓存子块c2i中存有数据时,将所述帧数据写入所述当前缓存子块c1i,并通知所述第一获取单元继续获取所述下一帧数据;当所述缓存子块c2i中没有存有数据时,将所述帧数据写入所述缓存子块c2i,并通知所述第一获取单元继续获取所述下一帧数据。上述系统中,优选地,还包括:第二判断单元,用于判断与所述第一缓存队列的缓存子块c1j相对应的所述第二缓存队列中的缓存子块c2j中是否存有数据;j=1,2,3,……,N;第二获取单元,用于当所述缓存子块c2j中存有数据时,对所述缓存子块c2j中的数据进行剪切,得到待存入数据;当所述缓存子块c2j中没有存有数据时,获取所述缓存子块c1j中的数据作为所述待存入数据;存入单元,用于将所述待存入数据存储至分布式存储系统。上述系统中,优选地,还包括:所述第二判断单元,还用于在得到所述待存入数据之后,返回执行判断与所述第一缓存队列的缓存子块c1(j+1)相对应的所述第二缓存队列中的缓存子块c2(j+1)中是否存有数据;其中,当j+1>N时,c1(j+1)为c11,c2(j+1)为c21。上述系统中,优选地,还包括:存储延时确定单元,用于记录所述获取针对所述第一缓存队列的当前缓存子块c1i的所述多路h264视频数据中的一帧数据的获取时间;记录将所述待存入数据存储至分布式存储系统的存入时间;将所述获取时间与所述存入时间之间的差值作为存储延时。以上本专利技术提供的一种基于无锁缓存本文档来自技高网
...

【技术保护点】
1.一种基于无锁缓存队列的多路h264视频数据缓存方法,其特征在于,该方法包括:获取针对第一缓存队列的当前缓存子块c1i的所述多路h264视频数据中的一帧数据;判断所述帧数据是否为I帧数据;当所述帧数据为I帧数据时,将所述帧数据写入与所述当前缓存子块c1i对应的第二缓存队列中的缓存子块c2i,并继续获取针对所述第一缓存队列的下一缓存子块c1(i+1)的所述多路h264视频数据中的下一帧数据;当所述帧数据不为I帧数据时,将所述帧数据写入所述当前缓存子块c1i,并继续获取针对所述第一缓存队列的下一缓存子块c1(i+1)的所述多路h264视频数据中的下一帧数据;当i+1>N时,c1(i+1)为c11;其中,所述第一缓存队列C1={c11,c12,…,c1i,…,c1N},所述第二缓存队列C2={c21,c22,…,c2i,…,c2N},i=1,2,3,……,N;c1i为所述第一缓存队列中的第i个缓存子块,c2i为所述第二缓存队列中与c1i相对应的缓存子块;各所述缓存子块的内存大小相等。

【技术特征摘要】
1.一种基于无锁缓存队列的多路h264视频数据缓存方法,其特征在于,该方法包括:获取针对第一缓存队列的当前缓存子块c1i的所述多路h264视频数据中的一帧数据;判断所述帧数据是否为I帧数据;当所述帧数据为I帧数据时,将所述帧数据写入与所述当前缓存子块c1i对应的第二缓存队列中的缓存子块c2i,并继续获取针对所述第一缓存队列的下一缓存子块c1(i+1)的所述多路h264视频数据中的下一帧数据;当所述帧数据不为I帧数据时,将所述帧数据写入所述当前缓存子块c1i,并继续获取针对所述第一缓存队列的下一缓存子块c1(i+1)的所述多路h264视频数据中的下一帧数据;当i+1>N时,c1(i+1)为c11;其中,所述第一缓存队列C1={c11,c12,…,c1i,…,c1N},所述第二缓存队列C2={c21,c22,…,c2i,…,c2N},i=1,2,3,……,N;c1i为所述第一缓存队列中的第i个缓存子块,c2i为所述第二缓存队列中与c1i相对应的缓存子块;各所述缓存子块的内存大小相等。2.如权利要求1所述的方法,其特征在于,在判定所述帧数据为I帧数据之后,还包括:判断所述缓存子块c2i中是否存有数据;当所述缓存子块c2i中存有数据时,将所述帧数据写入所述当前缓存子块c1i,并继续获取所述下一帧数据;当所述缓存子块c2i中没有存有数据时,将所述帧数据写入所述缓存子块c2i,并继续获取所述下一帧数据。3.如权利要求1或2所述的方法,其特征在于,还包括:判断与所述第一缓存队列的缓存子块c1j相对应的所述第二缓存队列中的缓存子块c2j中是否存有数据;j=1,2,3,……,N;当所述缓存子块c2j中存有数据时,对所述缓存子块c2j中的数据进行剪切,得到待存入数据;当所述缓存子块c2j中没有存有数据时,获取所述缓存子块c1j中的数据作为所述待存入数据;将所述待存入数据存储至分布式存储系统。4.如权利要求3所述的方法,其特征在于,在得到所述待存入数据之后,还包括:返回执行判断与所述第一缓存队列的缓存子块c1(j+1)相对应的所述第二缓存队列中的缓存子块c2(j+1)中是否存有数据;其中,当j+1>N时,c1(j+1)为c11,c2(j+1)为c21。5.如权利要求4所述的方法,其特征在于,还包括:记录所述获取针对所述第一缓存队列的当前缓存子块c1i的所述多路h264视频数据中的一帧数据的获取时间;记录将所述待存入数据存储至分布式存储系统的存入时间;将所述获取时间与所述存入时间之间的差值作为存储延时。6.一种基于无锁缓存队列的多路h264视频数据缓存系统,其特征在于,该系统包括:第一获取单元,用于获取针对第一缓存队列的当前缓存子...

【专利技术属性】
技术研发人员:毕敬强
申请(专利权)人:浪潮北京电子信息产业有限公司
类型:发明
国别省市:北京,11

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

1