一种快速生成索引的方法

文档序号:6368483阅读:174来源:国知局
专利名称:一种快速生成索引的方法
技术领域
本发明涉及流媒体编辑领域,尤其涉及一种快速生成索引的方法。
背景技术
随着多媒体视频业务越来越快的发展,文件的存储介质已经不限于卡带或者光盘,适合于网络传输的流媒体得到了更多的关注。流媒体(Streaming Media)是指采用流式传输的方式在Internet播放的媒体格式,是数据在网络上按时间先后次序传输和播放的连续音/视频数据流,它作为一种新的媒体传送方式也越来越广泛的应用于视频与电视节目制作领域。流媒体的流式传输方式可将整个A/V及3D等多媒体文件经过特殊的分块方式分成一个个包含基本分块信息的数据包,由视频服务器向用户计算机连续、实时传输。因此用户不必像采用下载方式那样等到整个文件全部下载完毕再进行观看,而是只需经过 几秒或几十秒的启动延时即可在用户的计算机上利用解码设备(硬件或软件)对压缩的A/V、3D等多媒体文件解码后进行播放和观看,此时,多媒体文件的剩余部分同时通过后台的服务器继续下载。在非线性编辑视频播放或者帧采样的时候,通常不仅仅关注与实时播放的效率,还会更关注于关键帧的显示效果,所以对于整体的完整的文件在读取的时候需要搜索到每一帧的具体位置和数据包或者数据包组的大小。非线性编辑系统为了支持帧精确流媒体文件的编辑,在导入流媒体文件时要先产生索引Index文件,以便于在编辑、播放和SEEK时快速和帧精确定位。而上述索引Index文件是额外产生的伴侣文件,是读取完数据之后才生成的文件。在现有技术中,产生索引Index文件的过程一般是按照a、读取流媒体文件;b、分析流媒体文件生成Index信息;c、将生成的Index信息写入伴侣文件的过程进行,产生Index文件的总时长为步骤a、b、c时长的总,没有充分合理调度和利用计算机资源,使生成时间过长,进而影响对流媒体文件的编辑效率。

发明内容
为解决上述问题,本发明实施例提供一种快速分析流媒体文件产生索引的方法,充分调度了计算机的资源,使得导入文件时索引Index文件产生的时间减少,效率提高,进而提高了流媒体文件的编辑效率。为达到上述目的,本发明实施例一种快速分析流媒体文件产生索引的方法,包括以下步骤创建内存池BlockAllocator,所述内存池BlockAllocator中包括多个DataBlock ;读数据调度线程读取所述流媒体文件的数据到当前DataBlock中;数据分析调度线程通过流媒体数据分析函数对所述当前DataBlock中的流媒体文件数据进行分析,生成索引信息IndexInfoData ;
索引Index伴侣文件写数据线程将所述索引信息IndexInfoData写到Index伴侣文件中。与现有技术相比,发明的实施例具有以下优点通过创建内存池BlockAllocator,所述内存池BlockAllocator中包括多个DataBlock ;读数据调度线程读取所述流媒体文件的数据到当前DataBlock中;数据分析调度线程通过流媒体数据分析函数对所述当前DataBlock中的流媒体文件数据进行分析,生成索引信息IndexInfoData ;索引Index伴侣文件写数据线程将所述索引信息IndexInfoData写到Index伴侣文件中,充分发挥了计算机的各种硬件资源,并合理有效的调度,使产生流媒体索引Index伴侣文件的效率达到最优化,速度也达到最快,减少了用户导入文件的等待时间。



为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图I是本发明实施例,一种快速生成索引的方法的流程图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明的实施例提供一种快速分析流媒体文件快速生成索引的方法,如图I所示,具体包括以下步骤步骤slOl、创建内存池BlockAllocator,所述内存池BlockAllocator中包括多个DataBlock ;其中,本实施例优选的,内存池BlockAllocator :根据硬盘读取数据的性能,每次读取数据的大小DataBlock以磁盘的SectorSize (比如SectorSize = 512字节)对齐,比如每次读取大小DataBlockSize为IM (1024 X 1024字节)数据,一共申请30个DataBlock。步骤sl02、读数据调度线程读取所述流媒体文件的数据到当前DataBlock中;循环获取BlockAllocator中的DataBlock,其中,每次获取一个,每次获取到的DataBlock 为当前 DataBlock ;通过IO顺次读取所述流媒体文件中的数据到所述当前DataBlock中;保存所述当前DataBlock到数据列表DataBlockList中。其中,所述循环获取BlockAllocator中的DataBlock会持续到所述流媒体文件中的数据读完。其中,流媒体文件的读数据调度线程,即调用IO资源读取流媒体文件数据,该线程会不断的,循环的从BlockAllocator中获取一个DataBlock,如果BlockAllocator中有合适的DataBlock,则返回有效的DataBlock。线程I得到有效的DataBlock后,向IO发出读取数据的命令,读取完数据后,将该DataBlock放到一个数据列表DataBlockList中。如果BlockAllocator中没有有效的DataBlock, BlockAllocator将无限等待,不返回。直到外部使用者(线程2)处理了 DataBlockList中的DataBlock,并释放DataBlock的使用权,返回BlockAllocator,这样BlockAllocator中就有了合适的DataBlock。用这样的方法可以控制读取数据的速度,达到速度的平衡。线程I会一直按照上面的逻辑循环执行,直到源流媒体文件数据读完。步骤sl03、数据分析调度线程通过流媒体数据分析函数对所述当前DataBlock中的流媒体文件数据进行分析,生成索引信息IndexInfoData ;具体包括通过Event的方式监听所述DataBlockList ;实时获取所述DataBlockList中存储的所述当前DataBlock ; 调用所述流媒体数据分析函数对所述当前DataBlock中的流媒体文件数据进行分析,得到数据分析结果;根据所述数据分析结果生成索引信息IndexInfoData ;将所述索引信息IndexInfoData保存到索引信息列表IndexInfoDataList中;将所述DataBlock在所述DataBlockList中移除并释放,使其返回所述BlockAllocator 以备重新获取。其中,流媒体文件的数据分析调度线程,即调用CPU资源进行流媒体数据分析。该线程会通过Event的方式一直在监听DataBlockList, —旦DataBlockList列表中有读取的有效数据块DataBlock,将触发线程2的流媒体数据分析工作ProcessDataBlock ;如果没有,贝1J一直处于等待状态。ProcessReadData的工作流程如下从DataBlockList中得到一个有效的数据块DataBlock,调用流媒体数据分析函数,根据数据分析的结果,形成索引Index信息IndexInfoData,并把形成的索引Index信息(IndexInfoData)放到索引信息列表IndexInfoDataList中。分析完之后,把DataBlock数据块从DataBlockList移除,释放DataBlock,使其回到BlockAllocator中。这样,形成了高效的数据循环。步骤sl04、索引Index伴侣文件写数据线程将所述索引信息IndexInfoData写到Index伴侣文件中;具体包括通过Event的方式监听所述索引信息列表IndexInfoDataList ;实时获取所述索引信息列表IndexInfoDataList中存储的所述索引信息IndexInfoData ;将所述索引信息IndexInfoData写到所述Index伴侣文件中;将所述索引信息IndexInfoData在所述索引信息列表IndexInfoDataList中移除并释放内存。其中,流媒体文件索引Index伴侣文件的写数据线程,该线程会通过Event的方式一直在监听 IndexInfoDataList,—旦 IndexInfoDataList 线程中有 IndexInfoData,将触发线程 3 执行写索引 Index 文件的工作 ProcessIndexInfoData。ProcessIndexInfoData的工作流程如下从IndexInfoDataList中得到一个IndexInfoData,执行写数据操作WriteIndexInfoData,把索引信息IndexInfoData写到Index伴侣文件中。写完数据之后,把 IndexInfoData 从 IndexInfoDataList 中移除,释放内存。所述读数据调度线程、所述数据分析调度线程以及所述索引Index伴侣文件写数据线程可同时进行。因而,导入流媒体文件并产生索引Index伴侣文件的速度由线程I、线程2和线程3中执行最慢、花费时间最长的线程决定。其中,上述内存池是一种内存分配方式,内存池在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是尽量避免了内存碎片,使得内存分配效率得到提升。本发明实现了以下有益效果通过创建内存池BlockAllocator,所述内存池BlockAllocator中包括多个DataBlock ;读数据调度线程读取所述流媒体文件的数据到当 前DataBlock中;数据分析调度线程通过流媒体数据分析函数对所述当前DataBlock中的流媒体文件数据进行分析,生成索引信息IndexInfoData ;索引Index伴侣文件写数据线程将所述索引信息IndexInfoData写到Index伴侣文件中,充分发挥了计算机的各种硬件资源,并合理有效的调度,使产生流媒体索引Index伴侣文件的效率达到最优化,速度也达到最快,减少了用户导入文件的等待时间。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述的方法。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种快速生成索引的方法,包括导入流媒体文件,其特征在于,包括以下步骤 创建内存池BlockAllocator,所述内存池BlockAllocator中包括多个DataBlock ; 读数据调度线程读取所述流媒体文件的数据到当前DataBlock中; 数据分析调度线程通过流媒体数据分析函数对所述当前DataBlock中的流媒体文件数据进行分析,生成索引信息IndexInfoData ; 索引Index伴侣文件写数据线程将所述索引信息IndexInfoData写到Index伴侣文件中。
2.如权利要求I所述方法,其特征在于,所述读数据调度线程、所述数据分析调度线程以及所述索引Index伴侣文件写数据线程可同时进行。
3.如权利要求I所述方法,其特征在于,所述读数据调度线程读取所述流媒体文件的数据到当前DataBlock中,具体包括 循环获取BlockAllocator中的DataBlock,其中,每次获取一个,每次获取到的DataBlock 为当前 DataBlock ; 通过IO顺次读取所述流媒体文件中的数据到所述当前DataBlock中; 保存所述当前DataBlock到数据列表DataBlockList中。
4.如权利要求3所述方法,其特征在于,所述循环获取BlockAllocator中的DataBIock会持续到所述流媒体文件中的数据读完。
5.如权利要求3所述方法,其特征在于,所述数据分析调度线程通过流媒体数据分析函数对所述当前DataBlock中的流媒体文件数据进行分析,生成索引信息IndexInfoData具体包括 通过Event的方式监听所述DataBlockList ; 实时获取所述DataBlockList中存储的所述当前DataBlock ; 调用所述流媒体数据分析函数对所述当前DataBlock中的流媒体文件数据进行分析,得到数据分析结果; 根据所述数据分析结果生成索引信息IndexInfoData ; 将所述索引信息IndexInfoData保存到索引信息列表IndexInfoDataList中;将所述DataBlock在所述DataBlockList中移除并释放,使其返回所述BlockAllocator以备重新获取。
6.如权利要求5所述方法,其特征在于,所述索引Index伴侣文件写数据线程将所述索引信息IndexInfoData写到Index伴侣文件中具体包括 通过Event的方式监听所述索引信息列表IndexInfoDataList ; 实时获取所述索引信息列表IndexInfoDataList中存储的所述索引信息IndexInfoData ; 将所述索引信息IndexInfoData写到所述Index伴侣文件中; 将所述索引信息IndexInfoData在所述索引信息列表IndexInfoDataList中移除并释放内存。
全文摘要
本发明公开了一种快速生成索引的方法,通过创建内存池BlockAllocator,所述内存池BlockAllocator中包括多个DataBlock;读数据调度线程读取所述流媒体文件的数据到当前DataBlock中;数据分析调度线程通过流媒体数据分析函数对所述当前DataBlock中的流媒体文件数据进行分析,生成索引信息IndexInfoData;索引Index伴侣文件写数据线程将所述索引信息IndexInfoData写到Index伴侣文件中,充分发挥了计算机的各种硬件资源,并合理有效的调度,使产生流媒体索引Index伴侣文件的效率达到最优化,速度也达到最快,减少了用户导入文件的等待时间。
文档编号G06F17/30GK102779145SQ20121011927
公开日2012年11月14日 申请日期2012年4月20日 优先权日2012年4月20日
发明者夏永宏 申请人:新奥特(北京)视频技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1