当前位置: 首页 > 专利查询>李钢专利>正文

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

技术编号:3748855 阅读:234 留言:0更新日期:2012-04-11 18:40
本发明专利技术属于电数字数据处理领域,具体涉及一种媒体文件系统中的循环文件实现方法。本发明专利技术采用的技术方案是:在新建文件描述结点i-node中,增加循环区域大小LoopLength、文件起始指针StartPointer、以及文件状态FileStatus三个描述,所述文件状态FileStatus包括预写、循环写及正常读写三种,对新建文件依次进行预写、循环写及正常读写;本发明专利技术方法的优点在于:高效的读写减少重复性的删除和拷贝,有效的保护硬盘提高效率,非常适合安防行业硬盘录像机进行24小时录像的读和写。

【技术实现步骤摘要】

本专利技术属于电数字数据处理领域,具体涉及一种媒体文件系统中的循环文件实现方法。
技术介绍
随着数字视频技术的成熟,各种数字视频录像机产品得到了广泛的应用。在数字 视频录像机中,有一项重要的功能,就是时移(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包括本文档来自技高网
...

【技术保护点】
一种媒体文件中循环文件的实现方法,所述方法的特征在于:在新建文件描述结点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;。...

【技术特征摘要】

【专利技术属性】
技术研发人员:唐玉勇
申请(专利权)人:李钢
类型:发明
国别省市:11[中国|北京]

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

1