一种音视频文件转存及检索方法

文档序号:8546392阅读:915来源:国知局
一种音视频文件转存及检索方法
【技术领域】
[0001]本发明涉及视频文件存储及检索领域,尤其涉及一种音视频文件转存及检索方法。
【背景技术】
[0002]目前有很多以MP4、WMV、RM等文件格式存储的节目文件,当需要观看某个绝对时间段的录像内容时,操作非常复杂。以MP4文件为例,首先需要查找到待观看的录像分布在哪些MP4的录像文件中,然后打开该MP4文件,拖动播放位置到OSD显示为待观看的时间处,然后再进行观看。比如说,当观看2014年12月I日14:00?14:20的一档电视节目的时候,首先需要确定该电视节目分布在哪些录像文件中,然后拖动到视频画面上显示时间为14:00的位置开始进行观看。当需要当观看的时间段不连续时,需要反复上述操作多次。所以这种查看某段时间节目视频的操作非常麻烦。

【发明内容】

[0003]有鉴于此,本发明提供一种音视频文件转存方法,该方法包括:对若干待转存的音视频文件按照时间顺序进行排序;依次对排好序的各个待转存文件按照块格式进行存储;在对每一个待转存的文件按照块格式进行存储包括:在存储设备上,开辟出块格式存储区域,向其中的超级块区域中填入对应的超级块信息,向其中的一级索引区填入一级时间索引,数据单元的二级时间索引区填入二级时间索引,数据单元的数据区中填入I帧组数据;其中,一级时间索引区中的第一条一级时间索引中填入该待转存的文件的媒体开始时间Tl ;在第一个数据单元的二级时间索引区的第一条二级时间索引中填入所述时间Tl,在该第一个数据单元的二级时间索引区的第η条二级时间索引中填入时间Τη,其中Tn =Τ1+(η-1)*Ι帧组的帧数/帧率,η为从2开始的自然数;第一个数据单元的数据区填入各二级时间索引对应的I帧组数据;在I帧组的每个帧的ES头中填充帧内包序号、帧首包标识、帧结尾标识、帧类型、码流类型、ES净长度、帧率。
[0004]优选地,每隔预设时间间隔,利用I帧数据解码获取OSD时间对所述二级索引时间进行校准。
[0005]优选地,当存在待插入的音视频文件时,重新开辟一块块格式存储区域用于该音视频文件的补存;对该块格式存储区域的一级时间索引区进行标记,以表示其为补存录像的索引区;将该补存的块格式文件与之前已经存储的块格式文件进行索引重构。
[0006]优选地索引重构包括:利用二分法在已经存储的块格式文件的二级时间索引中确定所述补存索引区的第一条时间索引的时间之前相邻的二级时间索引,将该相邻的二级时间索引进行标记,添加指向补存索引区的信息。
[0007]优选地,在对按照块格式存储的文件进行检索的时候,忽略存在补存标记的一级时间索引区,用二分法定位待检索录像的开始时间在其他一级时间索引区的一级时间索引中的位置,进一步用二分法定位待检索录像的开始时间在对应的二级时间索引中的位置,如果定位后的位置紧挨着存在补存录像标记的二级时间索引且在其后,则进一步在该存在补存录像标记的二级时间索引所指向的补存录像索引区再用二分法进行待检索录像开始时间的定位。
[0008]相较于现有技术,本发明的多媒体音视频文件转存方案将多媒体音视频文件按照其媒体时间连续地存储在块存储设备上。当后续要查询某一时间的录像时,系统能迅速定位到该录像并自动进行播放。
【附图说明】
[0009]图1是一种块存储格式。
[0010]图2是一个ES头示例。
[0011]图3是索引重构示例图。
【具体实施方式】
[0012]针对【背景技术】提出的技术问题,本发明提供一种多媒体音视频文件转存方案。该多媒体音视频文件转存方案将多媒体音视频文件按照其媒体时间连续地存储在块存储设备上。当后续要查询某一时间的录像时,系统能迅速定位到该录像并自动进行播放。以下通过具体实施例来详细描述本发明方案。
[0013]本实施例中的多媒体音视频文件包括但不限于MP4、WMV、MR格式的文件。以下以MP4格式文件为例进行说明。
[0014]当前需要对若干个MP4文件按照适于一键式检索的方式进行存储。
[0015]首先对这若干个MP4文件按照时间顺序进行排序。系统先获取各个文件的媒体开始时间,按照该获取的媒体开始时间对这些文件进行排序。获取媒体开始时间的方式包括:读取携带在MP4文件信息中的媒体创建时间;或者读取以文件方式保存的媒体创建时间;或者可以通过获取各个文件的第一帧视频数据,解码出OSD时间作为媒体的开始时间。
[0016]然后依次对排好序的各个MP4文件按照块格式进行存储。本实施例所述的块格式请参图1,其包括如下几部分:
[0017]超级块:一般有几十K(比如16Κ)字节,用来记录块格式的版本号、录像来源设备编码。由于超级块中的数据有限,因此通常有较多的预留空间。
[0018]—级时间索引区:超级块后面为一级时间索引区,索引区中的每条时间索引与一个数据单元一一对应(比如:第η个一级时间索引,对应第η个数据单元),用于记录该数据单元的最早I帧组的时间,从而可以基于时间快速定位到某个数据单元。
[0019]数据单元:一级时间索引区后面是一系列的数据单元,用于保存录像的I帧组数据。为了保证I帧组数据的连续写入,数据单元一般达到几百M字节(比如256Μ字节)。每个数据单元是以一个二级时间索引区开始的,其中每条时间索引项与一个I帧组—对应(比如:第η个二级时间索引,对应本数据单元的第η个I帧组),用于记录该I帧组的开始时间,从而可以基于时间快速定位某个I帧组。二级索引区之后,就是本数据单元中的所有I帧组数据。I帧组:一个I帧组通常就是I秒的录像数据。在I帧组中,存储的是该I帧组的所有视频、音频数据包。I帧组中的视频、音频数据以ES数据的形式进行存储,ES数据具有 ES 头,该 ES 头包括 PTS (Presentat1n Time Stamp 显示时间戳)、DTS (DecodingTime Stamp解码时间戳)。
[0020]将一个MP4文件按照块格式进行存储时要考虑如何生成块格式中的一级时间索弓1、二级时间索引以及I帧组中的ES头部数据。
[0021]在存储设备上,开辟出块格式存储区域,向其中的超级块区域中填入对应的超级块信息,向其中的一级索引区填入一级时间索引,数据单元的二级时间索引区中填入二级时间索引,数据单元的数据区中填入对应的I帧组数据。
[0022]在对排序后的第一个MP4文件按照块格式进行转存时,一级时间索引区中的第一条一级时间索引中填入步骤Sll中获取的该MP4文件的媒体开始时间Tl。对于第一个数据单元的二级时间索引区中第一条二级时间索引(表示为Inl.1)仍然填入上述媒体开始时间Tl,对于Inl.η (第一个数据单元的二级时间索引区中的第η条二级时间索引,η从2开始直到某一个数值)填入的时间值为Τη,该Tn = Τ1+(η-1)*Ι帧组的帧数/帧率。第一个数据单元的数据区则填入各个二级时间索引对应的各个I帧组数据,比如说Inl.1对应的第一个I帧组。如果一个数据单元的大小是256Μ,那么当该数据单元被存满时,则在下一个数据单元中存储时间索引和对应的数据。此时,一级时间索引区中需要填入一条新的一级时间索引,同样的二级时间索引区中也要填入相应的二级时间索引。如果一级时间索引区中设定存储256条一级时间索引,对应的数据单元也有256个,那么当该空间都被存满时,需要在另外的存储空间中按照同样的方式存储MP4文件中的数据。
[0023]为了提高检索精度,本发明实施例利用I帧数据解码获取到的OSD时间对该二级索引时间进行校准。为了提高存储速率,可以每隔一定的时间间隔进行一次校准。比如说,每隔10个GOP就进行一次校准。例如,Inl.1的时间值是Tl,则计算得到的第11个二级时间索引Inl.11的时间值为Τ1+10*Ι帧组的帧数/帧率,在利用OSD进行校准时,可以解码第11个I帧组中的I帧,然后将解码得到的OSD时间与计算得到的Inl.11时间值进行比较,若两者的差值大于设定阈值时,则以当前的OSD时间作为该I帧的二级时间索引中的时间值。后续二级索引时间的计算以该OSD时间为基准进行计算。上述计算得到的二级时间索引中的时间值精度不准的原因有获取到的帧率不准、MP4文件部分数据丢失等。
[0024]在生成每个帧的ES头部时,先确定各ES头部中的PTS、DTS间隔值。PTS间隔值为90*1000/帧率;假设I帧的PTS时间为tl,则其后的第一个P帧的PTS值为tl+90*1000/帧率;第二个P帧的PTS值为tl+2*90*1000/帧率,以此类推。同样的,DTS间隔值也为90*1000/帧率;假设I帧的DTS时间为t2,则其后的第一个P帧的DTS值为t2+90*1000/帧率;第二个P帧的DTS值为t2+2*90*1000/帧率,依次类推。除了 PTS和DTS之外,ES头中还需要进一步填充帧内包序号、帧首包标识、帧结尾标识、帧类型、码流类型、ES净长度、帧率等。请参图2给出的一个例子。packCnt表示帧内包序号,start
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1