监控数据回放方法及编码器、视频管理服务器
技术领域
本发明涉及数据传输技术领域,具体涉及监控数据回放方法及编码器(EC,Encoder)、视频管理服务器(DM,Data Management)。
背景技术
目前在监控系统中使用IP存储区域网络(IPSAN,Internet ProtocolStorage Area Network)作为存储普遍应用,将摄像头采集的数据存储到IPSAN中,当用户需要查看历史录像时,从IPSAN中读取录像数据。
图1给出了现有的典型IP监控组网,如图1所示,数据存储和回放过程如下:
数据存储过程:EC对摄像头采集的视频数据进行编码后以帧组(GOP,Group of Picture)为单位写入IPSAN,一个GOP包括一个I帧和若干个P帧。
数据回放过程:视频客户端(VC,Video Client)或解码客户端(DC,Decoder)向视频管理服务器(VM,Video Management)发出回放申请,由DM以GOP为单位从IPSAN读取数据,然后将数据转发给VC或DC;或者由VC或DC直接从IPSAN中读取GOP数据。
I帧图像采用帧内编码方式,只利用了单帧图像内的空间相关性,压缩倍数相对较低。I帧图像是周期性出现在图像序列中的。P帧和B帧图像采用帧间编码方式,同时利用了空间和时间上的相关性,可以大大提高压缩倍数。
目前一般一个GOP数据的长度为1秒或2秒,I帧由于存储了完整的图像,数据量较大,这样回放时会占用较大带宽。
发明内容
本发明提供监控数据回放方法及EC、VM,以降低监控数据回放时占用的带宽。
本发明的技术方案是这样实现的:
一种监控数据回放方法,该方法包括:
编码器EC接收监控摄像头采集的视频数据,EC对所述视频数据进行编码,当对一个连续时间段内的非第一个帧组GOP进行编码时,对于每个GOP的第一帧,EC同时进行I帧编码和P帧编码,其中P帧编码的参考帧为前一个GOP的最后一帧;对于每个GOP除第一帧外的其它帧,EC进行帧间编码;EC将编码后的帧写入存储设备;
管理服务器接收到客户端发来的回放请求时,在存储设备中查找到对应的GOP,读取的第一个GOP的第一帧为I帧,第一个GOP的其余帧为帧间编码所得的帧,读取的其它GOP的第一帧为P帧,其余帧为帧间编码所得的帧,管理服务器将读取的帧返回给客户端。
当客户端在进行视频回放时,若发现丢帧,向管理服务器发起读取I帧请求,管理服务器在读取下一个GOP时,读取的该GOP的第一帧为I帧。
所述DM在存储器中查找到对应的GOP进一步包括:
当管理服务器在读取GOP时,发现当前GOP与前一GOP在时间上不连续,则读取的当前GOP的第一帧为I帧,读取的当前GOP的其余帧为帧间编码所得的帧。
当对于每个GOP的第一帧,EC同时进行I帧编码和P帧编码时,所述EC将编码后的帧写入存储设备的同时进一步包括:EC在编码后的GOP头部添加含第一P帧标志;
且,所述管理服务器在存储设备中查找到对应的GOP之后进一步包括:
判断该GOP是否有含第一P帧标志,若否,则读取该GOP的第一帧为I帧,读取该GOP的其余帧为帧间编码所得的帧;若是,则执行所述读取的第一个GOP的第一帧为I帧,第一个GOP的其余帧为帧间编码所得的帧,读取的其它GOP的第一帧为P帧,其余帧为帧间编码所得的帧的动作。
所述DM在存储设备中查找到对应的GOP之后、判断该GOP是否有含第一P帧标志之前进一步包括:
DM与客户端进行协商,判断客户端是否支持播放第一P帧,若是,执行所述判断该GOP是否有含第一P帧标志的动作;否则,读取该GOP的第一帧为I帧,读取该GOP的其余帧为帧间编码所得的帧,将读取的帧返回给客户端。
一种EC,位于监控系统中,包括:
视频数据接收模块:接收监控摄像头采集的视频数据,将视频数据发送给编码模块;
编码模块:接收视频数据,对所述视频数据进行编码,当对一个连续时间段内的非第一个GOP进行编码时,对于每个GOP的第一帧,EC同时进行I帧编码和P帧编码,其中P帧编码的参考帧为前一个GOP的最后一帧;对于每个GOP除第一帧外的其它帧,EC进行帧间编码;EC将编码后的帧写入存储设备。
所述编码模块进一步用于,当对一连续时间段内的第一个GOP进行编码时,对于该GOP的第一帧,只进行I帧编码,对于该GOP除第一帧外的其它帧,只进行帧间编码,将编码后的帧写入存储设备。
一种VM,位于监控系统中,包括:
回放请求接收模块:接收客户端发来的回放请求,将回放请求转发给回放处理模块;
回放处理模块:接收回放请求,在存储设备中查找到对应的GOP,读取的第一个GOP的第一帧为I帧,第一个GOP的其余帧为帧间编码所得的帧,读取的其它GOP的第一帧为P帧,其余帧为帧间编码所得的帧,管理服务器将读取的帧返回给客户端。
所述回放处理模块进一步用于:
当在读取GOP时,发现当前GOP与前一GOP在时间上不连续,则读取的当前GOP的第一帧为I帧,读取的当前GOP的其余帧为帧间编码所得的帧。
所述回放处理模块进一步用于:当在存储设备中查找到对应的GOP后,判断该GOP是否有含第一P帧标志,若否,读取该GOP的第一帧为I帧,读取该GOP的其余帧为帧间编码所得的帧;若是,则执行所述读取的第一个GOP的第一帧为I帧,第一个GOP的其余帧为帧间编码所得的帧,读取的其它GOP的第一帧为P帧,其余帧为帧间编码所得的帧的动作;其中,当对于GOP的第一帧,EC同时进行I帧编码和P帧编码时,EC将编码后的帧写入存储设备的同时,在编码后的GOP头部添加含第一P帧标志。
所述回放处理模块进一步用于:当在存储设备中查找到对应的GOP之后,与客户端进行协商,判断客户端是否支持播放第一P帧,若是,执行所述判断该GOP是否有含第一P帧标志的动作;否则,读取该GOP的第一帧为I帧,读取该GOP的其余帧为帧间编码所得的帧,将读取的帧返回给客户端。
所述回放处理模块进一步用于:当在回放过程中接收到客户端发来的I帧请求时,在读取下一GOP时,读取该GOP的第一帧为I帧。
与现有技术相比,本发明中,对一个连续时间段内的非第一个GOP进行编码时,对于该GOP的第一帧,同时进行I帧编码和P帧编码;对于每个GOP除第一帧外的其它帧,EC进行帧间编码;在回放时,对于每一个GOP,当该GOP为请求回放的第一个GOP时,读取该GOP的第一帧为I帧,读取该GOP的其余帧为帧间编码所得的帧;否则,读取该GOP的第一帧为P帧,读取该GOP的其余帧为帧间编码所得的帧,本发明有效降低了回放时的带宽消耗;
另外,本发明实施例中,当GOP为一连续时间段的第一个GOP时,对于第一帧只进行I帧编码;在回放时,当发现读取的数据发生中断时,对于下一个GOP,要读取I帧;在回放过程中发现丢帧时,在读下一个GOP时,要读取I帧,这都进一步保证了回放画面的连续性
附图说明
图1为现有的典型IP监控组网示意图;
图2为本发明实施例提供的监控数据回放方法流程图;
图3为本发明实施例提供的监控系统中的EC的组成示意图;
图4为本发明实施例提供的监控系统中的VM的组成示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
图2为本发明实施例提供的监控数据回放方法流程图,如图2所示,其具体步骤如下:
步骤201:EC接收监控摄像头采集的视频数据,以GOP为单位对视频数据进行编码。其中,当GOP为一个连续时间段内的第一个GOP时,对于该GOP的第一帧,只进行I帧编码,对于该GOP的后续帧只进行P帧编码;当GOP为一个连续时间段内的非第一个GOP时,对于该GOP的第一帧,EC同时进行I帧编码和P帧编码,得到I帧和P’帧;对于GOP的后续帧,EC只进行P帧编码,得到后续P帧。
其中,P帧编码的参考帧为前一个GOP的最后一帧。
可见,当GOP为一个连续时间段内的第一个GOP时,对该GOP的编码方案与现有技术相同。
摄像头采集的原始视频数据可能在时间上不连续,而为了保证数据回放过程中画面的连续性,在数据回放时,对于每个连续时间段的第一帧,都应该播放I帧。这样,对于每个连续时间段的第一帧,就没有必要同时进行I帧编码和P帧编码了,只进行I帧编码即可。
步骤202:EC将编码后的GOP写入存储设备。其中,当GOP中包含P’帧时,P’帧紧临I帧,并在GOP中标明P’帧的存储位置,同时在该GOP头部添加含P’帧标志。
以下给出添加P’帧后的GOP存储形式举例:
步骤203:VM接收到客户端发来的回放请求,将该回放请求转发给DM。
客户端为VC或DC,回放请求中可携带请求的回放时间段。
步骤204:DM接收回放请求,在存储设备中查找到对应的GOP,对于每个GOP,执行如下步骤205~209:
步骤205:DM判断该GOP头部是否有含P’帧标志,若是,执行步骤207;否则,执行步骤206。
为与现有的数据回放过程兼容,在本步骤205中,DM可首先与客户端进行协商,若客户端支持播放P’帧,则继续后续“判断该GOP头部是否有含P’帧标志”的动作;否则,直接执行步骤209。
步骤206:DM直接读取该GOP并返回给客户端,本流程结束。
步骤207:DM判断该GOP是否为请求回放的第一个GOP,若是,执行步骤209;否则,执行步骤208。
由于种种原因例如:EC在将一编码后的GOP写入存储设备时,写入失败,导致一段本来连续的原始视频数据在存储设备中却不连续,这样,为了保证回放画面的完整性,当DM发现正在读取的数据发生中断后,对于中断后的第一个GOP,也应该读取其I帧。因此,在步骤207中,DM判定当前GOP不为请求回放的第一个GOP时,可以进一步判断当前GOP与最近一次读取的GOP在时间上是否连续,若是,执行步骤208;否则,执行步骤209。例如:客户端的回放请求中携带的回放时间段为:时刻a-时刻b,设GOP的长度为1秒,当DM读到时刻am的数据时,发现上一次读取的数据的时刻为am-d,其中,d>1秒,则DM确定读取的数据发生中断,从而确定:在读取时刻am的GOP时,应该读取该GOP中的I帧及除P’帧外的所有P帧,即执行步骤209。
步骤208:DM根据GOP中的P’帧的存储位置,读取该GOP中的P’帧及其后所有P帧,并返回给客户端,本流程结束。
步骤209:DM读取该GOP中的I帧及除P’帧外的所有P帧,并返回给客户端。
由于DM向客户端发送的数据也可能丢失,从而导致客户端播放的画面不连续,为了解决该问题,本发明进行了如下改进:
当客户端在播放数据时,若发现有数据帧丢失,则立即向VM发起I帧请求,VM将该I帧请求转发给DM,DM在接收到该I帧请求后,在读取下一个GOP时,直接读取I帧及除P’帧外的所有P帧,并返回给客户端,以保证后续画面的完整。
图3为本发明实施例提供的监控系统中的EC的组成示意图,如图3所示,其主要包括:视频数据接收模块31和编码模块32,其中:
视频数据接收模块31:接收监控摄像头采集的视频数据,将视频数据发送给编码模块32。
编码模块32:接收视频数据接收模块31发来的视频数据,以GOP为单位对视频数据进行编码,其中,当GOP为一个连续时间段内的第一个GOP时,对于该GOP的第一帧,只进行I帧编码,对于该GOP的后续帧只进行P帧编码;当GOP为一个连续时间段内的非第一个GOP时,对于该GOP的第一帧,同时进行I帧编码和P帧编码,得到I帧和P’帧;对于GOP的后续帧,只进行P帧编码,得到后续P帧,将编码后的GOP写入存储设备。
图4为本发明实施例提供的监控系统中的VM的组成示意图,如图4所示,其主要包括:回放请求接收模块41和回放处理模块42,其中:
回放请求接收模块41:接收客户端发来的回放请求,将回放请求转发给回放处理模块42。
回放处理模块42:接收回放请求接收模块41发来的回放请求,在存储设备中查找到对应的GOP,对于每一个GOP,当该GOP为请求回放的第一个GOP时,读取该GOP的第一帧为I帧,读取该GOP的其余帧为P帧;否则,读取该GOP的第一帧为P’帧,读取该GOP的其余帧为P帧,将读取的帧返回给客户端。
回放处理模块42还可进一步用于:当在读取GOP时,发现当前GOP与前一GOP在时间上不连续,则读取的当前GOP的第一帧为I帧,读取的当前GOP的其余帧为帧间编码所得的帧。
回放处理模块42还可进一步用于:当在存储设备中查找到对应的GOP后,判断该GOP是否有含P’帧标志,若有,则执行所述当该GOP为请求回放的第一个GOP时,读取该GOP的第一帧为I帧,读取该GOP的其余帧为P帧;否则,读取该GOP的第一帧为P’帧,读取该GOP的其余帧为P帧,将读取的帧返回给客户端的动作;若没有,则读取该GOP的第一帧为I帧,读取该GOP的其余帧为P帧;其中,当对于GOP的第一帧,EC同时进行I帧编码和P帧编码时,EC将编码后的GOP写入存储设备的同时,在该GOP头部添加含P’帧标志。
回放处理模块42还可进一步用于:当在存储设备中查找到对应的GOP之后,与客户端进行协商,判断客户端是否支持播放P’帧,若是,执行所述判断该GOP是否有含P’帧标志的动作;否则,读取该GOP的第一帧为I帧,读取该GOP的其余帧为P帧,将读取的帧返回给客户端。
回放处理模块42还可进一步用于:当在回放过程中接收到客户端发来的I帧请求时,在读取下一GOP时,读取该GOP的第一帧为I帧,读取该GOP的其余帧为P帧,将读取的帧返回给客户端。
需要说明的是,在本发明所示实施例中,EC在编码时,对于GOP的除第一帧外的其它帧,采用的是P帧编码,在实际应用中,也可以采用其它帧间编码方式如:B帧编码。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。