发明内容
本发明提供了一种可变码率录像存储的方法及设备,使得存储设备存储告警事件发生前的高码率录像。
一种可变码率录像存储的方法,应用于包括编码器和存储设备的系统中,该方法包括:
在没有发生告警时,所述编码器同时采用高码率和低码率进行编码,将低码率码流向所述存储设备发送,将当前时刻之前N秒的高码率码流进行缓存;
在发生告警时,所述编码器至少采用所述高码率进行编码,将告警发生后编码得到的高码率码流向所述存储设备发送,并将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送,使所述存储设备存储告警发生后以及告警时刻之前N秒的高码率码流。
所述将当前时刻之前N秒的高码率码流进行缓存包括:
所述编码器内设置缓存空间,用于缓存N秒的高码率码流,假定高码率的值为Y,缓存空间的大小为M,则M>N*Y。
所述编码器将告警发生后编码得到的高码率码流向所述存储设备发送,并将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送,使所述存储设备存储告警发生后以及告警时刻之前N秒的高码率码流包括:
所述编码器在所述存储设备的第一文件写入所述低码率码流与告警发生后编码得到的高码率码流,在所述存储设备的第一文件之外写入所述告警时刻之前N秒的高码率码流;或者
所述存储设备接收所述编码器发送的码流,在第一文件存储所述低码率码流与告警发生后编码得到的高码率码流,在所述第一文件之外存储所述告警时刻之前N秒的高码率码流。
所述编码器将告警发生后编码得到的高码率码流向所述存储设备发送,并将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送,使所述存储设备存储告警发生后以及告警时刻之前N秒的高码率码流包括:
假定T2时刻发生告警,所述编码器获取T1时刻的码流写入位置Pos1,T1时刻为T2时刻之前N秒;根据T2时刻之前N秒的高码率码流在缓存中占用的空间大小,从Pos1开始预留一段存储空间;在预留的存储空间内写入所述告警时刻之前N秒的高码率码流;或者
假定T2时刻发生告警,所述存储设备接收所述编码器发送的码流以及告警通知,根据所述告警通知获取T1时刻的码流存储位置Pos1以及预留存储空间的大小,从Pos1开始预留一段存储空间,在预留的存储空间存内储所述告警时刻之前N秒的高码率码流,其中T1时刻为T2时刻之前N秒。
所述将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送包括:
在CPU负载小于阈值时将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送。
所述编码器将告警发生后编码得到的高码率码流向所述存储设备发送,并将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送,使所述存储设备存储告警发生后以及告警时刻之前N秒的高码率码流包括:
假定T2时刻发生告警,所述编码器获取T1时刻的码流写入位置Pos1,从Pos1开始顺序写入告警时刻之前N秒的高码率码流、告警发生后编码得到的高码率码流,其中T1时刻为T2时刻之前N秒;或者
所述编码器将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送,然后再发送告警发生后编码得到的高码率码流;假定T2时刻发生告警,所述存储设备根据所述编码器发送的告警通知,获取T1时刻的码流存储位置Pos1,从Pos1开始存储接收到的高码率码流,其中T1时刻为T2时刻之前N秒。
一种编码器,应用于包括存储设备的系统中,该编码器包括:
编码单元,用于在没有发生告警时,同时采用高码率和低码率进行编码;在发生告警时,至少采用所述高码率进行编码;
第一发送单元,与所述编码单元连接,用于在没有发生告警时,将低码率码流向所述存储设备发送;
缓存单元,与所述编码单元连接,用于在没有发生告警时,将当前时刻之前N秒的高码率码流进行缓存;
第二发送单元,与所述编码单元连接,用于将告警发生后编码得到的高码率码流向所述存储设备发送,并将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送。
所述缓存单元具体用于:在设置的缓存空间内缓存正常情况下当前时刻之前N秒的高码率码流,假定高码率的值为Y,缓存空间的大小为M,则M>N*Y。
所述第一发送单元具体用于:在所述存储设备的第一文件写入所述低码率码流;所述第二发送单元具体用于:在所述存储设备的第一文件写入所述告警发生后编码得到的高码率码流,在所述存储设备的第一文件之外写入所述告警时刻之前N秒的高码率码流。
所述第二发送单元具体用于:
假定T2时刻发生告警,获取T1时刻的码流写入位置Pos1,T1时刻为T2时刻之前N秒;根据T2时刻之前N秒的高码率码流在缓存中占用的空间大小,从Pos1开始预留一段存储空间;在预留的存储空间内写入所述告警时刻之前N秒的高码率码流。
所述第二发送单元具体用于:
在CPU负载小于阈值时将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送。
所述第二发送单元具体用于:
假定T2时刻发生告警,获取T1时刻的码流写入位置Pos1,从Pos1开始顺序写入告警时刻之前N秒的高码率码流、告警发生后编码得到的高码率码流,其中T1时刻为T2时刻之前N秒;或者
将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送,然后再发送告警发生后编码得到的高码率码流。
与现有技术相比,本发明至少具有以下优点:
本发明实施例中,编码器在发生告警后向存储设备发送告警时刻之前N秒的高码率码流,使得存储设备能够存储告警发生后以及告警时刻之前N秒的高码率码流,即告警事件完整过程的高码率录像。
具体实施方式
本发明中,为了描述方便,将采用低码率编码得到的码流称为低码率码流、采用高码率编码得到的码流称为高码率码流。
正常情况下,即没有发生告警时,编码器同时采用高码率和低码率进行编码,将低码率码流向存储设备发送,将当前时刻之前N秒的高码率码流进行缓存。为了缓存N秒的高码率码流,编码器设置缓存空间,假定该缓存空间的大小为M,高码率大小为Y,则M>N*Y,N的取值由用户预先设置。需要说明,假定该缓存空间为第一缓存空间,则编码器还可以设置第二缓存空间,该第二缓存空间用于缓存编码得到的来不及向存储设备发送的码流。第一缓存空间与第二缓存空间还可以合并。
发生告警时,编码器只采用高码率进行编码,将告警发生后编码得到的高码率码流向存储设备发送,并将缓存的告警时刻之前N秒的高码率码流向存储设备发送,使存储设备录制告警事件完整过程的高码率录像。需要说明,发生告警时,编码器也可以同时采用高码率和低码率进行编码,低码率码流此时被丢弃。
下面结合具体实施例介绍本发明提供的可变码率录像存储的方法。
实施例一
本发明实施例一提供一种可变码率录像存储的方法,该方法中,预先配置编码器能够直接向存储设备写入码流。结合图2所示,该方法的过程如图3所示,包括以下步骤:
步骤301,正常情况下,编码器采用码率X和码率Y同时进行编码,其中码率X<码率Y。
步骤302,编码器向存储设备的第一文件写入低码率码流,在任一时刻缓存该时刻之前N秒的采用码率Y编码得到的码流。
在存储设备预先设定与各编码器分别对应的码流写入文件。编码器将码流顺次写入该文件,即第一文件,该第一文件用于写入正常情况下的低码率码流、以及告警发生后编码器编码得到的高码率码流。本实例中,存储设备内还设备第二文件,用于写入编码器缓存的告警时刻之前N秒的高码率码流。
步骤303,T2时刻发生告警,编码器向存储设备的第一文件写入以码率Y编码得到的码流,向存储设备的第二文件写入缓存的T2时刻之前N秒的高码率码流。
可选的,编码器在CPU负担小于阈值时将缓存的T2时刻之前N秒的高码率码流写入存储设备的第二文件。
存储第二文件与告警事件之间的关系,在输出告警事件的录像时,根据该关系获取告警前N秒的采用码流Y编码得到的录像,即事前录像。
实施例二
本发明实施例二提供一种可变码率录像存储的方法,编码器直接向存储设备写入码流,结合图4所示,该方法的过程如图5所示,包括以下步骤:
步骤501,正常情况下,编码器采用码率X和码率Y同时进行编码,其中码率X<码率Y。
步骤502,编码器向存储设备的第一文件写入低码率码流,在任一时刻缓存该时刻之前N秒的采用码率Y编码得到的码流。
步骤503,T2时刻发生告警,编码器获取T1时刻的码流写入位置Pos1,其中,T1时刻为T2时刻之前N秒。
本实例中,编码器直接向存储设备写入码流,因此,编码器能够获知每一时刻码流在存储设备的写入位置。
步骤504,编码器获取T1时刻的码流写入位置Pos1,从Pos1开始预留存储空间。其中,T1时刻为T2时刻之前N秒,预留存储空间的大小等于T2时刻之前N秒的高码率码流在缓存中占用的空间大小。
编码器获知T2时刻之前N秒的高码率码流在缓存中占用的存储空间的大小,根据该值预留存储空间。
步骤505,编码器在空闲状态时将T2时刻之前N秒的高码率码流写入预留空间。该空闲状态优选的,为CPU负担小于阈值时的状态。
实施例三
本发明实施例三提供一种可变码率录像存储的方法,编码器直接向存储设备写入码流,该方法的过程如图6所示,包括以下步骤:
步骤601,正常情况下,编码器采用码率X和码率Y同时进行编码,其中码率X<码率Y。
步骤602,编码器向存储设备的第一文件写入低码率码流,在任一时刻缓存该时刻之前N秒的采用码率Y编码得到的码流。
步骤603,T2时刻发生告警,编码器获取T1时刻的码流写入位置Pos1,其中,T1时刻为T2时刻之前N秒。
步骤604,编码器缓存当前编码得到的高码率码流,从Pos1开始写入缓存的T2时刻之前N秒的高码率码流。
通常情况下,编码器发送码流的速度大于编码的速度,因此,一般不会出现缓存溢出的情况,编码器缓存的码流量越来越小。优选的,本实例中设置第二文件、或者第一文件的空间大于Y*N。
上述实施例中编码器直接向存储设备写入码流,如果是由存储设备接收到码流后执行写入功能,则本发明提供的方法通过下述实施例实现。
实施例四
本发明实施例四提供一种可变码率录像存储的方法,正常情况下:编码器将低码率码流向存储设备发送,缓存当前时刻之前N秒的高码率码流。存储设备将接收的低码率码流写入第一文件。发生告警后:编码器将告警后编码得到的高码率码流向存储设备发送,在空闲状态时将缓存的告警时刻之前的N秒得高码率码流向存储设备发送。存储设备接收发生告警后编码器编码得到的高码率码流并存储到第二文件,将编码器缓存的告警时刻之前的N秒得高码率码流写入第二文件,记录第二文件与告警事件的对应关系。
其中,编码器向存储设备发送的码流中可以携带特定标识,存储设备根据该特定标识确定将码流写入第二文件。特定标识可以根据实际需要预先设置,本发明实例中对其具体形式不做限制,例如可以为特定数字等。
实施例五
本发明实施例五提供一种可变码率录像存储的方法,正常情况下:编码器将低码率码流向存储设备发送,缓存当前时刻之前N秒的高码率码流。存储设备将接收的低码率码流写入第一文件。T2时刻发生告警后:编码器向存储设备发送告警通知,将告警后编码得到的高码率码流向存储设备发送,在空闲状态时将缓存的告警时刻之前的N秒得高码率码流向存储设备发送。存储设备接收告警通知,获取T1时刻的码流的写入位置Pos1,从Pos1开始预留存储空间。其中,T1时刻为T2时刻之前N秒,预留存储空间的大小等于T2时刻之前N秒的高码率码流在缓存中占用的大小,该值携带在告警通知中发送至存储设备。存储设备从Pos2开始存储发生告警后编码器编码得到的高码率码流,将编码器缓存的告警时刻之前的N秒的高码率码流写入预留空间。
其中,编码器向存储设备发送的码流中携带预留空间标识,存储设备根据该预留空间确定将码流写入第一文件。预留空间标识可以根据实际需要预先设置,本发明实例中对其具体形式不做限制,例如可以为特定数字等,还可以与实施例四中的特定标识相同。
实施例六
本发明实施例六提供一种可变码率录像存储的方法,正常情况下:编码器将低码率码流向存储设备发送,缓存当前时刻之前N秒的高码率码流。存储设备将接收的低码率码流写入第一文件。T2时刻发生告警后:编码器向存储设备发送告警通知,向存储设备发送缓存的T2时刻之前N秒的高码率码流,然后发送告警后编码得到的高码率码流。存储设备接收告警通知,获取T1时刻的码流的写入位置Pos1,T1时刻为T2时刻之前N秒。存储设备自Pos1开始存储编码器发送的码流。
实施例七
基于与上述方法实施例相同的技术构思,本发明实施例七提供一种编码器,应用于包括存储设备的系统中,如图7所示,该编码器包括:
编码单元11,用于在没有发生告警时,同时采用高码率和低码率进行编码;在发生告警时,至少采用所述高码率进行编码;
第一发送单元12,与所述编码单元11连接,用于在没有发生告警时,将低码率码流向所述存储设备发送,
缓存单元13,与所述编码单元11连接,用于在没有发生告警时,将当前时刻之前N秒的高码率码流进行缓存;
第二发送单元14,与所述编码单元11连接,用于将告警发生后编码得到的高码率码流向所述存储设备发送,并将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送。
所述缓存单元13具体用于:在设置的缓存空间内缓存正常情况下当前时刻之前N秒的高码率码流,假定高码率的值为Y,缓存空间的大小为M,则M>N*Y。
所述第一发送单元12具体用于:在所述存储设备的第一文件写入所述低码率码流;所述第二发送单元14具体用于:在所述存储设备的第一文件写入所述告警发生后编码得到的高码率码流,在所述存储设备的第一文件之外写入所述告警时刻之前N秒的高码率码流。
所述第二发送单元14具体用于:
假定T2时刻发生告警,获取T1时刻的码流写入位置Pos1,T1时刻为T2时刻之前N秒;根据T2时刻之前N秒的高码率码流在缓存中占用的空间大小,从Pos1开始预留一段存储空间;在预留的存储空间内写入所述告警时刻之前N秒的高码率码流。
所述第二发送单元14具体用于:
在CPU负载小于阈值时将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送。
所述第二发送单元14具体用于:
假定T2时刻发生告警,获取T1时刻的码流写入位置Pos1,从Pos1开始顺序写入告警时刻之前N秒的高码率码流、告警发生后编码得到的高码率码流,其中T1时刻为T2时刻之前N秒;或者
将缓存的告警时刻之前N秒的高码率码流向所述存储设备发送,然后再发送告警发生后编码得到的高码率码流。
本发明实施例中,编码器在发生告警后向存储设备重传告警时刻之前N秒的高码率码流,使得存储设备能够存储告警发生后以及告警时刻之前N秒的高码率码流,即告警事件完整过程的高码率录像。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。