一种媒体文件中循环文件的实现方法

文档序号:6596735阅读:174来源:国知局
专利名称:一种媒体文件中循环文件的实现方法
技术领域
本发明属于电数字数据处理领域,具体涉及一种媒体文件系统中的循环文件实现
方法。
背景技术
随着数字视频技术的成熟,各种数字视频录像机产品得到了广泛的应用。在数字 视频录像机中,有一项重要的功能,就是时移(Time-Shift)。如图1所示。图中播放位置在 当前实时流位置之前,所以称之为时移。例如,用户错过几分钟前的精彩镜头,需要退回去 重新浏览精彩镜头。 实现Time-Shift时,需要在硬盘中始终记录当前实时流之前的一段视频(比如30 分钟)。这样用户才可以通过操作,进行倒退,观看实时流位置之前的视频。
另外,对于数字视频监控来说,预录像也非常重要,这样可以保留事故发生前的视 频。对于时移来说,对文件的处理,跟预录像是一样的。 众所周知,硬盘空间是有限的,长时间进入时移状态时,会在硬盘中产生大量的视 频数据。 一般做法是将预录像区域之前的数据删掉。比如预录像长度为30分钟时,当录满 30分钟后,将文件数据头部删除一分钟,文件就变成29分钟了,一直重复这个过程,达到文 件长度始终不超过30分钟的目的。 对于文件系统来说,总是以块为单位管理硬盘空间,最小的块为一个扇区,即512 字节。通常,块大小为4K,8K,16K字节。以块为单位管理空间,给删除文件数头部造成了一 定的困难。 一个是只能以块对齐的方式删除,不能删除任意大小。另一个,频繁的删除,会 造成系统性能下降,同时也可能导致磁盘空间碎片。 另一种做法,是开辟一个文件,在里面循环写。当时移结束时同时需要保留预录像 时,需要将循环文件中的数据拷贝到一个新文件中。如图2所示,在循环文件中,段落B实 际上比段落A早,因此,必须要将数据进行重新排列,才能将段落B移到段落A前面,保证播 放时的顺序无误。 一般情况下,媒体文件都非常大,因此这个拷贝的代价也很大。

发明内容
针对现有技术中存在的缺陷,本发明的目的是提供一种媒体文件系统中的循环文 件实现方法,该方法能够高效地处理循环文件,以满足预录像的需求。该方法提供一种写文 件的方法,在预录像时,不需要删除文件头部的数据块;同时在读文件时,提供一种方法,能 够让应用程序获得的数据与录像时的数据一致。
为达到以上目的,本发明采用的技术方案是 在新建文件描述结点i-node中,增加循环区域大小LoopLength、文件起始指针
StartPointer、以及文件状态FileStatus三个描述,所述文件状态FileStatus包括预写、
循环写及正常读写三种,对新建文件依次进行预写、循环写及正常读写; 预写新文件创建后自动进入预写状态,当写入数据长度Length,新的指针为
Pointer = Pointer+Length ; 循环写当文件达到预写长度后,调用本文件系统提供的API,将Pointer赋值给LoopLength,进入循环写状态,文件指针Pointer在LoopLength内循环,写入数据长度Length后,新的指针为 Pointer = (Pointer+Length) % LoopLength ;
实际偏移地址为Offset = (StartPointer+Pointer) % LoopLength ; 正常读写系统提供API结束循环写,自动将当前指针Pointer赋值给
StartPointer,进入正常读写状态,实际偏移地址为Offset = (StartPointer+Pointer) % LoopLength ; 进一步的,上述技术方案中,所述文件预写长度可以根据需要设定。 进一步的,所述循环写的次数是根据上层逻辑,当上层退出循环写状态时或当实
际文件和循环覆盖文件完全重合时,结束循环写。 本发明方法的优点在于高效的读写减少重复性的删除和拷贝,有效的保护硬盘提高效率,非常适合安防行业硬盘录像机进行24小时录像的读和写。


图1是实现时移的示意图。 图2是现有技术实现循环写的方法示意图。 图3为本发明所述i-node的结构图。 图4是本发明文件3个状态的状态转换图。 图5是写文件的流程图。 图6是读文件的流程图。
具体实施例方式
下面结合附图,对本发明的技术方案作进一步的阐述。 图2是现有技术中实现循环写的方法示意图。这种方法的不足之处在于当时移结束时同时需要保留预录像时,需要将循环文件中的数据拷贝到一个新文件中。媒体文件都非常大,因此这个拷贝的代价也很大。因此本发明设计了一种新方案,即在新建文件中增加一循环区域LoopLength,当新建文件进行预写至设定长度时,对文件进行循环写,文件指针Pointer在LoopLength内循环,因而无需再做很大的拷贝,高效的读写减少重复性的删除和拷贝。当上层逻辑结束循环写时,再计算实际偏移地址Offset。
基于上述原理,本发明具体的技术方案如下 如图3、图5所示,首先在新建文件描述结点i-node中,增加循环区域大小LoopLength、文件起始指针StartPointer、以及文件状态FileStatus三个描述,所述文件状态FileStatus包括预写、循环写及正常读写三种,对新建文件依次进行预写、循环写及正常读写; 预写新文件创建后自动进入预写状态,当写入数据长度Length,新的指针为
Pointer = Pointer+Length ;
循环写当文件达到预写长度后,预写长度可以根据需要设定,调用本文件系统提供的API,将Pointer赋值给LoopLength,进入循环写状态,文件指针Pointer在LoopLength内循环,写入数据长度Length后,新的指针为
Pointer = (Pointer+Length) % LoopLength ;
实际偏移地址为 Offset = (StartPointer+Pointer) % LoopLength ; 正常读写系统提供API结束循环写,自动将当前指针Pointer赋值给
StartPointer,进入正常读写状态,实际偏移地址为 Offset = (StartPointer+Pointer) % LoopLength ; 上述述循环写的次数是根据上层逻辑,当上层退出循环写状态时或当实际文件和循环覆盖文件完全重合时,结束循环写。 图4显示的是本发明文件3个状态的状态转换图。新文件创建后即依次进行预写、循环写及正常读写。 对于利用上述方法形成的媒体文件,对文件进行循环写,文件指针Pointer在LoopLength内循环,因而无需再做很大的拷贝。再对该种媒体文件进行读取,即可能够让应用程序获得的数据与录像时的数据一致,如图6所示,因此在读该种文件时首先判断文件是否是循环写的模式写入的,如果不是,则进行正常的读写,如果是,则继续步骤读出开始保存的文件写入的偏移量Offset,计算出文件开头指针,即保存到数据库的值,实际就是实际的偏移量,再根据设定的每次写入大小,这个是预先设定的,是数据长度Length,依次读出相关数据。如果数据读到整个区域结尾,将从文件头部开始读。
权利要求
一种媒体文件中循环文件的实现方法,所述方法的特征在于在新建文件描述结点i-node中,增加循环区域大小LoopLength、文件起始指针StartPointer、以及文件状态FileStatus三个描述,所述文件状态FileStatus包括预写、循环写及正常读写三种,对新建文件依次进行预写、循环写及正常读写;预写新文件创建后自动进入预写状态,当写入数据长度Length,新的指针为Pointer=Pointer+Length;循环写当文件达到预写长度后,调用本文件系统提供的API,将Pointer赋值给LoopLength,进入循环写状态,文件指针Pointer在LoopLength内循环,写入数据长度Length后,新的指针为Pointer=(Pointer+Length)%LoopLength;实际偏移地址为Offset=(StartPointer+Pointer)%LoopLength;正常读写系统提供API结束循环写,自动将当前指针Pointer赋值给StartPointer,进入正常读写状态,实际偏移地址为Offset=(StartPointer+Pointer)%LoopLength;
2. 根据权利要求1所示的一种媒体文件中循环文件的实现方法,其特征在于所述文 件预写长度可以根据需要设定。
3. 根据权利要求1所示的一种媒体文件中循环文件的实现方法,其特征在于所述循 环写的次数是根据上层逻辑,当上层退出循环写状态时或当实际文件和循环覆盖文件完全 重合时,结束循环写。
全文摘要
本发明属于电数字数据处理领域,具体涉及一种媒体文件系统中的循环文件实现方法。本发明采用的技术方案是在新建文件描述结点i-node中,增加循环区域大小LoopLength、文件起始指针StartPointer、以及文件状态FileStatus三个描述,所述文件状态FileStatus包括预写、循环写及正常读写三种,对新建文件依次进行预写、循环写及正常读写;本发明方法的优点在于高效的读写减少重复性的删除和拷贝,有效的保护硬盘提高效率,非常适合安防行业硬盘录像机进行24小时录像的读和写。
文档编号G06F17/30GK101794294SQ20101000019
公开日2010年8月4日 申请日期2010年1月8日 优先权日2010年1月8日
发明者唐玉勇 申请人:李钢
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1