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

文档序号:9847208阅读:689来源:国知局
一种基于无锁缓存队列的多路h264视频数据缓存方法及系统的制作方法
【技术领域】
[0001]本发明涉及多路视频数据存取技术领域,特别是涉及一种基于无锁缓存队列的多路h264视频数据缓存方法及系统。
【背景技术】
[0002]当今,随着科学技术和社会经济的飞速发展,人们可以随时随地记录下产生的各类数据,在记录各类数据的过程中,人们主要关心的问题是如何将监控到的数据忠实地、完整地记录下来,即如何保证存储数据的可靠性和完整性。
[0003]在实际应用中,通常需要将多个摄像头采集到的多路视频数据以恒定速率不间断地写入分布式存储系统中,比如在某个直播节目的现场,需要将众多摄像机采集到的视频数据写入分布式存储系统,然后在经过一定处理提供给观众。
[0004]在现有的基于无锁缓存队列的将多路视频数据存至分布式缓存系统的方法中,生产线程和消费线程共用一个缓存,该缓存切分为多个缓存子块。生产线程以恒定速率从多路视频数据中读取一帧数据并写入缓存中的一个缓存子块,多个消费线程从这个缓存子块中读取一帧数据存入到文件中。每写完一个缓存子块,缓存子块的计数值加I。
[0005]参考图1,刚开始时,生产线程向缓存中写入数据,消费线程开始读取缓存并写入到分布式系统中;参考图2,当生产线程写满缓存时,在缓存的开始继续写入;当消费线程的读取速度比生产线程的写入速度慢很多时,消费线程会跳过被覆盖的块,然后再从缓存中获取,比如,在图3中,消费线程读取了 16后,下一个应该为17,但是被生产线程将17覆盖变成了25,这时,消费线程会跳过25而读取18。在这种情况下,如果17对应的视频数据为数据量比较大或者是重要性比较高的数据时,易导致视频数据的跳帧现象,进而会影响后续播放这个视频数据时的流畅度和完整性。

【发明内容】

[0006]有鉴于此,本发明提供了一种基于无锁缓存队列的多路h264视频数据缓存方法及系统,以实现保证关键帧的完整性,减少视频数据的跳帧现象,进而保证后续播放视频数据时的流畅度和完整性的目的。
[0007]为解决上述技术问题,本发明提供一种基于无锁缓存队列的多路h264视频数据缓存方法,该方法包括:
[0008]获取针对第一缓存队列的当前缓存子块C11的所述多路h264视频数据中的一帧数据;
[0009]判断所述帧数据是否为I帧数据;
[0010]当所述帧数据为I帧数据时,将所述帧数据写入与所述当前缓存子块C11对应的第二缓存队列中的缓存子块C21,并继续获取针对所述第一缓存队列的下一缓存子块c1(1+1)的所述多路h264视频数据中的下一帧数据;
[0011]当所述帧数据不为I帧数据时,将所述帧数据写入所述当前缓存子块Cll,并继续获取针对所述第一缓存队列的下一缓存子块cm+υ的所述多路h264视频数据中的下一帧数据;当i+l>N时,ci(i+i)为Cu;
[0012]其中,所述第一缓存队列C1=I^11,C12,"_,Cll,"_,C1N},所述第二缓存队列C2=
{C21,C22,…,C2i,…,C2n},i = I,2,3,......,N; Cli为所述第一缓存队列中的第i个缓存子块,
C21为所述第二缓存队列中与CU相对应的缓存子块;各所述缓存子块的内存大小相等。
[0013]上述方法中,优选地,在判定所述帧数据为I帧数据之后,还包括:
[0014]判断所述缓存子块C2l中是否存有数据;
[0015]当所述缓存子块C21中存有数据时,将所述帧数据写入所述当前缓存子块Cll,并继续获取所述下一帧数据;
[0016]当所述缓存子块C2l中没有存有数据时,将所述帧数据写入所述缓存子块C2l,并继续获取所述下一帧数据。
[0017]上述方法中,优选地还包括:
[0018]判断与所述第一缓存队列的缓存子块(^相对应的所述第二缓存队列中的缓存子块c2j中是否存有数据;j = I,2,3,……,N;
[0019]当所述缓存子块C2j中存有数据时,对所述缓存子块C2j中的数据进行剪切,得到待存入数据;
[0020]当所述缓存子块C2j中没有存有数据时,获取所述缓存子块Clj中的数据作为所述待存入数据;
[0021 ]将所述待存入数据存储至分布式存储系统。
[0022]上述方法中,优选地在得到所述待存入数据之后,还包括:
[0023]返回执行判断与所述第一缓存队列的缓存子块C1G+1)相对应的所述第二缓存队列中的缓存子块cm+υ中是否存有数据;
[0024]其中,当j+l>N时,ci(j+i)为cii,c2(j+i)为C21。
[0025]上述方法中,优选地还包括:
[0026]记录所述获取针对所述第一缓存队列的当前缓存子块Cll的所述多路h264视频数据中的一帧数据的获取时间;
[0027]记录将所述待存入数据存储至分布式存储系统的存入时间;
[0028]将所述获取时间与所述存入时间之间的差值作为存储延时。
[0029]本发明还提供了一种基于无锁缓存队列的多路h264视频数据缓存系统,该系统包括:
[0030]第一获取单元,用于获取针对第一缓存队列的当前缓存子块Cll的所述多路h264视频数据中的一帧数据;
[0031]第一判断单元,用于判断所述帧数据是否为I帧数据;
[0032]写入单元,用于当所述帧数据为I帧数据时,将所述帧数据写入与所述当前缓存子块CU对应的第二缓存队列中的缓存子块C21,并通知所述第一获取单元继续获取针对所述第一缓存队列的下一缓存子块cm+υ的所述多路h264视频数据中的下一帧数据;当所述帧数据不为I帧数据时,将所述帧数据写入所述当前缓存子块CU,并通知所述第一获取单元继续获取针对所述第一缓存队列的下一缓存子块cm+υ的所述多路h264视频数据中的下一帧数据;当i+l>N时,ci(i+i)为C11;
[0033]其中,所述第一缓存队列C1=I^11,C12,h_,C1i,h_,C1N},所述第二缓存队列C2=
{C21,C22,…,C2i,…,C2n},i = I,2,3,......,N; Cli为所述第一缓存队列中的第i个缓存子块,
C21为所述第二缓存队列中与CU相对应的缓存子块;各所述缓存子块的内存大小相等。
[0034]上述系统中,优选地,所述第一判断单元还用于在判定所述帧数据为I帧数据之后,判断所述缓存子块C21中是否存有数据;
[0035]所述写入单元还用于当所述缓存子块C21中存有数据时,将所述帧数据写入所述当前缓存子块CU,并通知所述第一获取单元继续获取所述下一帧数据;当所述缓存子块C21中没有存有数据时,将所述帧数据写入所述缓存子块C21,并通知所述第一获取单元继续获取所述下一帧数据。
[0036]上述系统中,优选地,还包括:
[0037]第二判断单元,用于判断与所述第一缓存队列的缓存子块Clj相对应的所述第二缓存队列中的缓存子块(?中是否存有数据;j = l,2,3,……,N;
[0038]第二获取单元,用于当所述缓存子块C2j中存有数据时,对所述缓存子块C2j中的数据进行剪切,得到待存入数据;当所述缓存子块C2j中没有存有数据时,获取所述缓存子块Clj中的数据作为
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1