建立索引表方法和编码方法
技术领域
本发明涉及信息处理技术领域,尤其涉及一种建立索引表方法和编码方法。
背景技术
音/视频编码器以帧为处理单元,对音频或视频信号进行压缩处理,以大幅度地降低音频或视频信号的数据量,并使得重放的音频或视频的感官质量没有明显的下降。音/视频编码器使用了许多技术,以确定音频或视频信号的哪一部分可以丢弃。编码器按照不同的比特率对原信号进行压缩,提供权衡数据大小和音质之间的依据。比特率对于音/视频文件来说是可变的,比特率越高,则原始信息越多,回放质量也越高。
根据编码过程中比特率的不同,可以分为固定码率(CBR,Constant bitrate)编码器和可变码率(VBR,Variable bitrate)编码器。固定码率指的是在编码的整个过程中,对每一帧使用固定的比特数进行编码;而可变码率则可以在编码过程中,对每一帧使用不同的比特数进行编码。可变码率编码技术的好处是在信号信息量较大时可以使用较大的比特率,而在信号信息量较小时使用较低的比特率,从而提高编码器的效率,在相同的平均比特率条件下,获得更好的重放信号质量。
音/视频文件在播放时,其播放总时间的确定和播放中的时刻检索(即将文件偏移到与音/视频剪辑的时刻对应的位置)都与音/视频文件的比特率有关。对于播放总时间而言,由于音/视频每一帧的时间长度是固定的,那么根据整个文件总的帧数和每帧的时间长度就可以得到音/视频的总播放时间,而时刻检索也可以根据帧序号的遍历获得,但是遍历文件的开销很大。
对于CBR编码的音/视频文件,由于整个文件所有帧的大小恒定,则剪辑的时刻与文件偏移呈线性关系,即播放时间的计算和时刻检索可以通过文件长度的计算来实现。因此知道文件大小,分析第一帧获得编码所使用的比特率,便可以算出整个文件的播放时间,并通过计算文件的偏移字节数以实现时刻检索。播放时间和偏移字节数具体计算公式如下:
然而,VBR编码的音/视频文件的每一帧的比特率是可变的,此时剪辑的时刻与文件偏移不呈线性关系。要得到音/视频文件的播放时间,必须遍历整个文件,获得文件所包含的帧数;要得到剪辑的时刻对应的文件偏移,必须记录下所有帧对应的帧长。因此,这样的计算开销非常大。
为有效地控制采用VBR编码的音/视频文件的播放,现有技术引入索引表(TOC,table of content)技术以进行VBR码流的检索定位。TOC技术可以在对音/视频文件进行随机时刻定位时,通过表中的信息方便快速地定位到近似的文件位置。这种技术被很多音/视频编解码器所接受,以韩国XING娱乐公司为MPEG1 layer3推出的Xing Tag码流格式为例,它的TOC表具有100个元素,第k个元素代表k%时刻所对应的相对文件偏移(即文件偏移数除以总文件长度)。这样就可以进行一定精度的时刻检索,比如需要检索到总时刻的37%处,那么相对文件偏移便是第37个元素所对应的数据。
但是,可变码率的索引表的建立,依然是一个繁琐的过程,并存在着两个制约:它需要在编码完成以后,获取文件的大小和持续时间才能进行索引表的建立;得到以上两个信息后,需要遍历整个文件的每一帧,获取并保存每一帧数据的大小,由此计算建立索引表(后面称为累加方法)。重新遍历文件,尤其是大文件,它的开销是很大的。此外,在某些情况下,编码结束以后可能没有机会进行文件的检索,从而也就不能为音/视频文件建立索引表。
为了减少计算开销,现有技术还提供了一种针对VBR编码的音/视频文件建立索引表的方法,包括:读取编码后的文件中部分数据的信息(如:读取VBR编码的音/视频文件前三分之一的数据),计算读取的信息中帧数据的平均数据长度,将该平均数据长度作为整个文件的帧数据的平均数据长度,从而采用对CBR编码的音/视频文件的检索和定位方法实现对该VBR编码的音/视频文件的检索和定位。
但是上述方法仍然是在编码结束之后进行,需要遍历部分文件;且由于其只考虑了部分数据的信息,将部分帧数据的平均数据长度作为整个文件中每帧数据的数据长度,从而大大降低了检索的精度。
因此,如何简单准确地为音/视频文件建立索引表就成本本领域技术人员亟待解决的问题。
发明内容
本发明解决的问题是提供一种建立索引表方法和编码方法,在提供精确的索引信息的基础上,可以避免编码结束后的文件重新遍历,最终可以降低计算开销。
为解决上述问题,本发明提供了一种建立索引表方法,包括:
建立包括K个元素的初始索引表,其中第k个元素对应时间区间为[(k-1)T1,kT1]的数据长度,所述K为大于或等于1的正整数,所述k为大于或等于1且小于或等于K的正整数,各元素的持续时间为T1;
根据所述初始索引表,构建密度曲线函数;
在对音/视频文件编码持续时间T2后,获取编码数据的数据长度,所述T2为所述音/视频文件中一帧数据对应时间的整数倍;
利用所述编码数据对应的时间T2对初始索引表中每个元素的时间区间进行更新,且利用所述密度曲线函数和编码数据的数据长度,对初始索引表中每个元素对应的数据长度进行更新,所述更新后的索引表中第k个元素对应时间区间为[(k-1)(T1+T2/K),k(T1+T2/K)]的数据长度;
不断重复上述根据索引表构建密度曲线函数、编码和更新索引表的过程,直至对所述音/视频文件编码结束;
对编码结束后更新的索引表进行结算处理,得到每个元素对应的相对文件偏移。
可选地,每个所述元素对应的数据长度不同。
可选地,所述时间T2小于或等于时间T1。
可选地,所述初始索引表在对所述音/视频文件编码前建立。
可选地,所述初始索引表中每个元素对应的数据长度均为0。
可选地,所述建立索引表方法还包括:在建立初始索引表之前,对音/视频文件编码KT1时间。
可选地,根据所述初始索引表,构建密度曲线函数的步骤包括:确定构建条件;确定密度曲线函数的曲线类型;根据所述曲线类型,建立密度曲线函数的原型函数;根据线性代数方程组,求解密度曲线函数,所述线性代数方程组至少包括构建条件和原型函数。
可选地,所述构建条件包括:其中:TOC[k]为初始索引表中第k个元素对应的数据长度,F(x)为密度曲线函数。
可选地,所述构建条件包括:F(k-c)=TOC[k],其中:TOC[k]为初始索引表中第k个元素对应的数据长度,F(x)为密度曲线函数,0≤c≤1。
可选地,所述构建条件包括:其中:TOC[k]为初始索引表中第k个元素对应的数据长度,F(x)为密度曲线函数,0≤c≤1,n为大于或等于1的整数。
可选地,所述曲线类型包括:连续非分段曲线、连续分段曲线或非连续分段曲线。
可选地,当所述曲线函数为连续非分段曲线时,所述密度曲线函数的原型函数为:其中:am为与xm对应的系数,F(x)为密度曲线函数,M为大于或等于1且小于或等于K的整数。
可选地,当所述密度曲线函数的曲线类型为连续分段曲线或非连续分段曲线时,所述密度曲线函数的原型函数为:
其中:ak,m为与k-1<x<k区间段中xm对应的系数,F(x)为密度曲线函数,M为大于或等于0且小于或等于K的整数,F(x++)表示密度曲线函数在小于但无限接近x处的取值,F(x--)表示密度曲线函数在大于但无限接近x处的取值。
可选地,当所述密度曲线函数的曲线类型为连续非分段曲线时,所述线性代数方程组还包括:边界条件,所述边界条件包括:F(n)(0)=b0,n和F(n)(K)=bK,n,其中,b0,n和bK,n为任意常数,n为大于或等于0的整数,F(n)(x)为密度曲线函数的n阶导数。
可选地,当所述密度曲线函数F(x)的曲线类型为连续分段曲线时,所述线性代数方程组还包括:连续条件和边界条件,所述连续条件包括:F(n)(k--)=F(n)(k++),其中,F(n)(k--)表示密度曲线函数在小于但无限接近k处的n阶导数,F(n)(k++)表示密度曲线函数在大于但无限接近k处的n阶导数;所述边界条件包括:F(n)(0)=b0,n和F(n)(K)=bK,n,其中,b0,n和bK,n为任意常数,n为大于或等于0的整数,F(n)(x)为密度曲线函数的n阶导数。
可选地,利用所述密度曲线函数和编码数据,对初始索引表中每个元素对应的数据长度进行更新包括:根据 和得到更新后的索引表中每个元素对应的数据长度,其中,F(x)为密度曲线函数,TOC[k]为初始索引表中第k个元素对应的数据长度,TOC′[k]为更新后的索引表中第k个元素对应的数据长度,S为所述编码数据的数据长度。
可选地,所述结算处理包括:计算更新后的索引表中K个元素对应的数据长度之和,且将前k个元素对应的数据长度之和与K个元素对应的数据对应长度之和的比值作为第k个元素对应的相对文件偏移。
可选地,根据所述初始索引表,构建密度曲线函数包括:将初始索引表中第k个元素对应的数据长度作为索引区间[k-1,k]内密度曲线函数的取值。
可选地,所述建立索引表方法还包括:存储所述初始索引表,以将所述初始索引表作为其他待编码的音/视频文件的初始索引表。
为解决上述问题,本发明还提供了一种包括上述建立索引表方法的对音/视频文件的编码方法。
与现有技术相比,本发明具有以下优点:本发明提供了一种在对音/视频文件进行编码的过程中建立索引表的方法,当建立初始索引表之后,在编码过程中不断提取编码数据,且将编码数据的持续时间和数据长度更新到初始索引表中,始终保持索引表中元素的个数不变,更新索引表中每个元素对应的时间区间和数据长度,最后在编码结束后对更新后的索引表进行结算,计算得出每个元素对应的相对文件偏移,从而在编码结束后就得到与该音/视频文件对应的索引表,通过该索引表就可以实现对该音/视频文件的检索和定位。该方法可以避免编码结束后的文件重新遍历,降低了计算开销,且索引表的精度很高。
附图说明
图1是本发明实施例一中建立索引表方法的流程示意图;
图2至图6是本发明实施例一中建立索引表方法一个具体例子的示意图;
图7是本发明实施例四中建立索引表方法的流程示意图;
图8是采用本发明建立索引表方法与现有技术累加方法得到的数据长度比较示意图;
图9是采用本发明建立索引表方法与现有技术累加方法得到的相对文件偏移比较示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,因此本发明不受下面公开的具体实施例的限制。
正如背景技术部分所述,现有技术在对VBR编码的音/视频文件建立索引表时,需要在编码完成以后,通过重新遍历整个文件每一帧的方式获取并保存每一帧数据的大小和持续时间,从而导致建立索引表的开销大、时间长、复杂,且需要较大的容量进行存储。
针对上述缺陷,发明人发现:在对VBR编码的音/视频文件进行编码的过程中,会获取整个文件每一帧数据的大小和整个文件的持续时间,因此可以在编码前或编码的过程中建立初始索引表,进而在编码的过程中不断提取编码数据,且将编码数据的持续时间和数据长度更新到初始索引表中,始终保持索引表中元素的个数不变,更新索引表中每个元素对应的时间区间和数据长度,最后在编码结束后对更新后的索引表进行结算,计算得出每个元素对应的相对文件偏移,从而在编码结束后就得到与该音/视频文件对应的索引表,通过该索引表就可以实现对该音/视频文件的检索和定位。
本发明提供了一种建立索引表方法,包括:
建立包括K个元素的初始索引表,其中第k个元素对应时间区间为[(k-1)T1,kT1]的数据长度,所述K为大于或等于1的正整数,所述k为大于或等于1且小于或等于K的正整数,各元素的持续时间为T1;
根据所述初始索引表,构建密度曲线函数;
在对音/视频文件编码持续时间T2后,获取编码数据的数据长度,所述T2为所述音/视频文件中一帧数据对应时间的整数倍;
利用所述编码数据对应的时间T2对初始索引表中每个元素的时间区间进行更新,且利用所述密度曲线函数和编码数据的数据长度,对初始索引表中每个元素对应的数据长度进行更新,所述更新后的索引表中第k个元素对应时间区间为[(k-1)(T1+T2/K),k(T1+T2/K)]的数据长度;
不断重复上述根据索引表构建密度曲线函数、编码和更新索引表的过程,直至对所述音/视频文件编码结束;
对编码结束后更新的索引表进行结算处理,得到每个元素对应的相对文件偏移。
本发明方法可以避免编码结束后的文件重新遍历,降低了计算开销,且索引表的精度很高。
下面结合附图进行详细说明。
实施例一
参考图1所示,本实施例提供了一种索引表建立方法,包括:
步骤S11,建立包括K个元素的初始索引表,其中第k个元素对应时间区间为[(k-1)T1,kT1]的数据长度,所述K为大于或等于1的正整数,所述k为大于或等于1且小于或等于K的正整数,各元素的持续时间为T1;
步骤S12,根据所述初始索引表,构建密度曲线函数;
步骤S13,提供待编码的音/视频文件;
步骤S14,在对音/视频文件编码持续时间T2后,获取编码数据的数据长度,所述T2为所述音/视频文件中一帧数据对应时间的整数倍;
步骤S15,利用所述编码数据对应的时间T2对初始索引表中每个元素的时间区间进行更新,且利用所述密度曲线函数和编码数据的数据长度,对初始索引表中每个元素对应的数据长度进行更新,所述更新后的索引表中第k个元素对应时间区间为[(k-1)(T1+T2/K),k(T1+T2/K)]的数据长度;
步骤S16,不断重复上述根据索引表构建密度曲线函数、编码和更新索引表的过程,直至对所述音/视频文件编码结束;
步骤S17,对编码结束后更新的索引表进行结算处理,得到每个元素对应的相对文件偏移。
首先执行步骤S11,建立包括K个元素的初始索引表。
本实施例中初始索引表可以在对音/视频文件进行编码前建立,即建立初始索引表的过程中无需读取音/视频文件的信息。优选地,本实施例可以建立并存储所述初始索引表,以将所述初始索引表作为其他待编码的音/视频文件的初始索引表。
所述初始索引表中每个元素的持续时间T1相同,且所述持续时间T1可以任意设定。如:0.5s、1s、3s或5s等。整个初始索引表对应的总持续时间为KT1。
其中,所述元素的个数K可以为任意大于1的正整数,如:10、50或100等。
所述初始索引表中每个元素对应的数据长度可以不同,也可以相同。由于该初始索引表是在编码前建立的,因此各元素对应的数据长度可以自由设定。优选地,所述初始索引表中每个元素对应的数据长度都可以为0。
以下以TOC[k]表示初始索引表中第k个元素对应的数据长度,以T1表示初始索引表中每个元素对应的持续时间,以[kT1-T1,kT1]表示第k个元素对应的时间区间段,其中,k为大于或等于1且小于或等于K的整数。
在一个具体例子中,所述初始索引表包括10个元素,每个元素的持续时间T1为1s。第1个元素对应的时间区间段为[0s,1s],对应的数据长度为1000比特,即TOC[1]=1000比特;第2个元素对应的时间区间段为[1s,2s],对应的数据长度为1200比特,即TOC[2]=1200比特;第3个元素对应的时间区间段为[2s,3s],对应的数据长度为1300比特,即TOC[3]=1300比特;第4个元素对应的时间区间段为[3s,4s],对应的数据长度为1000比特,即TOC[4]=1000比特;第5个元素对应的时间区间段为[4s,5s],对应的数据长度为1600比特,即TOC[5]=1600比特;第6个元素对应的时间区间段为[5s,6s],对应的数据长度为2000比特,即TOC[6]=2000比特;第7个元素对应的时间区间段为[6s,7s],对应的数据长度为2300比特,即TOC[7]=2300比特;第8个元素对应的时间区间段为[7s,8s],对应的数据长度为2200比特,即TOC[8]=2200比特;第9个元素对应的时间区间段为[8s,9s],对应的数据长度为2600比特,即TOC[9]=2600比特;第10个元素对应的时间区间段为[9s,10s],对应的数据长度为2400比特,即TOC[10]=2400比特。
接着执行步骤S12,根据所述初始索引表,构建密度曲线函数。
首先,确定构建条件。本实施例中所述密度曲线函数F(x)的构建条件可以严格定义,即构建条件为:密度曲线函数F(x)在索引区间[k-1,k]的定积分等于初始索引表中第k个元素对应的数据长度,用公式可以表示为:其中:TOC[k]为初始索引表中第k个元素对应的数据长度,F(x)为密度曲线函数,x表示索引位置,且x大于或等于0且小于或等于K。密度曲线函数包括K个索引区间,索引区间[k-1,k]对应的时间区间为[(k-1)T1,kT1]。
接着,确定密度曲线函数F(x)的类型。所述曲线类型根据是否连续可以分为连续曲线和非连续曲线;所述曲线类型根据是否分段可以分为分段曲线和非分段曲线。
本实施例中密度曲线函数的类型可以包括:连续分段曲线、非连续分段曲线和连续非分段曲线中的任一种。具体地,可以预先设定密度曲线函数F(x)为连续分段曲线、非连续分段曲线或连续非分段曲线,其都在本发明的保护范围内。
接着,根据所述曲线类型,建立密度曲线函数F(x)的原型函数。
当所述曲线函数为连续非分段曲线时,所述密度曲线函数F(x)的原型函数可以为:其中:am为与xm对应的系数,F(x)为密度曲线函数,M为大于或等于1且小于或等于K的整数。如:当初始索引表中包括3个元素时,则密度曲线函数可以为F(x)=a0+a1x+a2x2。
当所述曲线函数为分段曲线(包括:连续分段曲线或非连续分段曲线)时,所述密度曲线函数的原型函数为:其中:ak,m为与k-1<x<k区间段中xm对应的系数,F(x)为密度曲线函数,M为大于或等于0且小于或等于K的整数,F(x++)表示密度曲线函数在小于但无限接近x处的取值,F(x--)表示密度曲线函数在大于但无限接近x处的取值。如:当初始索引表中包括3个元素时,则密度曲线函数可以为: 或
当密度曲线函数F(x)为连续曲线(包括:连续分段曲线或连续非分段曲线)时,还需要添加边界条件。所述添加边界条件包括预先设定F(x)在x=0和x=K处n阶导数的边界条件,即F(n)(0)=b0,n和F(n)(K)=bK,n,其中:b0,n和bK,n为任意常数,n为大于或等于0的整数,F(n)(x)为密度曲线函数的n阶导数。作为一个简单例子,可以预先定义F(0)和F(K)的取值,即n为0。需要说明的是,本发明不限制F(0)和F(K)的具体取值,从而可以预先定义F(0)和F(K)为任意正数,且F(0)可以等于F(K),也可以不等于F(K)。具体地,所述F(0)可以为0、TOC[1]或其他任意正数;所述F(K)可以为0、TOC[K]或其他任意正数。
当密度曲线函数F(x)为连续分段曲线时,在添加边界条件的同时,还需要添加连续条件。所述连续条件包括:F(n)(k--)=F(n)(k++),其中,F(n)(k--)表示密度曲线函数在小于但无限接近k处的n阶导数,F(n)(k++)表示密度曲线函数在大于但无限接近k处的n阶导数。如:当初始索引表中包括3个元素,密度曲线函数为:
或 时,可以获得6个边界条件为:和6个连续条件为:
任意选择6个边界条件中的其中3个,配合6个连续条件,可以组成具有9个方程和9个未知数的线性代数方程组,采用线性代数方程求解方法求解上述线性代数方程组,最终得到系数确定的密度曲线函数。
具体地,对于非连续分段曲线,需要求解构建公式边界条件F(n)(0)=b0和F(n)(K)=bK、原型函数组成的方程组。对于连续分段曲线,需要求解构建公式边界条件F(n)(0)=b0,n和F(n)(K)=bK,n、原型函数和连续条件F(n)(k--)=F(n)(k++)组成的方程组。对于连续非分段曲线,需要求解构建公式原型函数边界条件F(n)(0)=b0,n和F(n)(K)=bK,n组成的方程组。
具体求解方程组的过程对于本领域的技术人员是熟知的,在此不再赘述。
最终就可以求解得到与所述初始索引表相对应的密度曲线函数F(x)。
针对步骤S11中的具体例子,构建的最简单的密度曲线函数可以如图2和图3所示,即采用直方图的方式将初始索引表中第k个元素对应的数据长度作为索引区间[k-1,k]内密度曲线函数的取值。具体地,时间区间[0s,1s](即索引区间[0,1])内的数据长度均为1000比特,时间区间[1s,2s](即索引区间[1,2])内的数据长度均为1200比特,时间区间[2s,3s](即索引区间[2,3])内的数据长度均为1300比特,时间区间[3s,4s](即索引区间[3,4])内的数据长度均为1000比特,时间区间[4s,5s](即索引区间[4,5])内的数据长度均为1600比特,时间区间[5s,6s](即索引区间[5,6])内的数据长度均为2000比特,时间区间[6s,7s](即索引区间[6,7])内的数据长度均为2300比特,时间区间[7s,8s](即索引区间[7,8])内的数据长度均为2200比特,时间区间[8s,9s](即索引区间[8,9])内的数据长度均为2600比特,时间区间[9s,10s](即索引区间[9,10])内的数据长度均为2400比特。
因此,与图2对应的密度曲线函数F(x)为:
或
接着执行步骤S13,提供待编码的音/视频文件。
本发明对音/视频文件编码前的格式和编码后的格式均不作限制。
接着执行步骤S14,在对所述音/视频文件编码持续时间T2后,获取编码数据的数据长度S。
本实施例中可以采用任意一种编码方式对所述音/视频文件进行编码。在编码的过程中,可以获取每帧数据的数据长度。
在对所述音/视频文件编码持续时间T2后,便可获取与时间T2对应的编码数据的数据长度。需要说明的是,所述时间T2为所述音/视频文件中一帧数据对应时间的整数倍。
所述时间T2在满足为待编码的音/视频文件中一帧数据对应时间的整数倍的前提下,可以任意设定,且可以在每次更新的过程中任意改变。
优选地,所述时间T2小于或者等于初始索引表中每个元素的持续时间T1,从而在对初始索引表进行更新的过程中,可以保证更新后索引表的准确性,最终可以提高检索的精确度。
作为一个具体例子,所述时间T2为1s,且时间T2对应的编码数据的数据长度为2000比特。此时,可以将图2更新为图4所示。
接着执行步骤S15,利用所述编码数据对应的时间T2对初始索引表中每个元素的时间区间进行更新,且利用所述密度曲线函数和编码数据的数据长度,对初始索引表中每个元素对应的数据长度进行更新,所述更新后的索引表中第k个元素对应时间区间为[(k-1)(T1+T2/K),k(T1+T2/K)]的数据长度。
与所述初始索引表相比,所述更新后的索引表包括的元素个数不变,仍为K个,且更新后的索引表中每个元素的持续时间仍然相同,因此更新后的索引表中每个元素对应的持续时间由T1变为(T1+T2/K)。此时,第k个元素对应的时间区间由[kT1-T1,kT1]变为[(k-1)(T1+T2/K),k(T1+T2/K)]。
所述利用所述密度曲线函数和编码数据,对初始索引表中每个元素对应的数据长度进行更新包括:根据 和得到更新后的索引表中每个元素对应的数据长度,其中,F(x)为密度曲线函数,TOC[k]为初始索引表中第k个元素对应的数据长度,TOC′[k]为更新后的索引表中第k个元素对应的数据长度,S为所述编码数据的数据长度。
在上述具体例子中,结合参考图5和图6所示,更新后的索引表包括10个元素,每个元素的持续时间为1.1s,总时间为11s。具体地,第1个元素对应的时间区间为[0s,1.1s],索引区间为[0,1],对应的数据长度为1120比特,即TOC′[1]=1120比特;第2个元素对应的时间区间为[1.1s,2.2s],索引区间为[1,2],对应的数据长度为1340比特,即TOC′[2]=1340比特;第3个元素对应的时间区间为[2.2s,3.3s],索引区间为[2,3],对应的数据长度为1340比特,即TOC′[3]=1340比特;第4个元素对应的时间区间为[3.3s,4.4s],索引区间为[3,4],对应的数据长度为1340比特,即TOC′[4]=1340比特;第5个元素对应的时间区间为[4.4s,5.5s],索引区间为[4,5],对应的数据长度为1960比特,即TOC′[5]=1960比特;第6个元素对应的时间区间为[5.5s,6.6s],索引区间为[5,6],对应的数据长度为2380比特,即TOC′[6]=2380比特;第7个元素对应的时间区间为[6.6s,7.7s],索引区间为[6,7],对应的数据长度为2460比特,即TOC′[7]=2460比特;第8个元素对应的时间区间为[7.7s,8.8s],索引区间为[7,8],对应的数据长度为2740比特,即TOC′[8]=2740比特;第9个元素对应的时间区间为[8.8s,9.9s],索引区间为[8,9],对应的数据长度为2680比特,即TOC′[9]=2680比特;第10个元素对应的时间区间为[9.9s,11s],索引区间为[9,10],对应的数据长度为2240比特,即TOC′[10]=2240比特。
至此,完成索引表的第一次更新。
接着执行步骤S16,不断重复上述构建密度曲线函数、编码和更新过程,直至对所述音/视频文件编码结束。
具体地,采用步骤S12的方法,构建与步骤S15得到的索引表对应的密度曲线函数。
继续对所述音/视频文件进行编码,且在编码一定时间T3之后,获取与时间T3对应的编码数据的数据长度S’。说明的是,所述时间T3可以等于时间T2,也可以大于时间T2,还可以小于时间T2。优选地,所述时间T3大于时间T2,如:时间T3等于T1+T2/K。此时可以进一步减小更新索引表的计算量,降低计算开销。
继续采用步骤S15的方法,将时间T3对应的编码数据更新到步骤S15得到的索引表中,得到更新后的索引表,所述更新后的索引表包括K个持续时间相同的元素,此时每个元素的持续时间为T1+T2/K+T3/K。即此时索引区间[k-1,k]对应的时间区间为[(k-1)(T1+T2/K+T3/K),k(T1+T2/K+T3/K)]。
从而不断采用上述方法,在编码的过程中,获取编码数据的数据长度,并将编码数据的持续时间和数据长度更新至索引表中,直至对所述音/视频文件编码结束。当对所述音/视频文件编码结束之后,得到包含所述音/视频文件信息的更新的索引表。
更新后的索引表中包括K个元素,每个元素的持续时间相同,且可以得到每个元素对应的数据长度。此时,每个元素对应的数据长度可以相同,也可以不同;且一个元素对应的数据长度可以是音/视频中一帧数据对应时间的整数倍,也可以不是音/视频中一帧数据对应时间的整数倍。具体由初始索引表和所述音/视频文件共同决定。
最后执行步骤S17,对更新后的索引表进行结算处理,得到每个元素对应的相对文件偏移。
所述结算处理包括:计算更新后的索引表中K个元素对应的数据长度之和,且将前k个元素对应的数据长度之和与K个元素对应的数据长度之和的比值作为第k个元素对应的相对文件偏移。
当对更新后的索引表进行结算处理后,当所述个数K为100时,即将音/视频文件按照时间均匀地分为100份,第k个元素代表k/100时刻所对应的相对文件偏移,k为大于或等于1且小于或等于100的正整数,如:第5个元素代表5%时刻所对应的相对文件偏移。当所述个数K为10时,即将音/视频文件按照时间均匀地分为10份,第k个元素代表k/10时刻所对应的相对文件偏移,k为大于或等于1且小于或等于10的正整数,如:第5个元素代表50%时刻所对应的相对文件偏移。
作为一个具体例子,编码后的音/视频文件对应的更新后的索引表包括100个元素,每个元素的持续时间为60s,整个文件的总时间为6000s(即100分钟),100个元素对应的数据长度之和为150000比特,第1个元素对应的相对文件偏移为0.5%,第2个元素对应的相对文件偏移为1.5%,第3个元素对应的相对文件偏移为2.2%,第4个元素对应的相对文件偏移为3%,第5个元素对应的相对文件偏移为5%,则当用户待定位到第5分钟时,则5分钟/100分钟=5%,即对应的相对文件偏移为5%,从而读取第5个元素对应的音/视频文件即可。
本实施例在对音/视频文件进行编码之前建立初始索引表,从而在编码的过程中,不断对初始索引表进行更新,得到与待编码的音/视频文件相对应的更新后的索引表,最后通过结算处理得到每个元素对应的相对文件偏移。即在对音/视频文件编码结束之后,就可以得到与该音/视频文件相对应的索引表。本实施例方法可以避免编码结束后的文件重新遍历,降低了计算开销,且索引表的精度很高。由于为音/视频文件建立了索引表,因此无需对音/视频文件中每帧数据的长度进行存储,节省了存储空间。
此外,还可以对所述初始索引表进行存储处理,以利用初始索引表处理后续待编码的音/视频文件,从而可以进一步简化建立索引表的流程。
实施例二
与实施例一相比,本实施例根据初始索引表构建密度曲线函数的过程中,所述密度曲线函数F(x)的构建条件为非严格定义,构建条件可以为:密度曲线函数F(x)在索引区间[k-1,k]内任意一点的数据长度等于初始索引表中第k个元素对应的数据长度,用公式可以表示为:F(k-c)=TOC[k],其中:TOC[k]为初始索引表中第k个元素对应的数据长度,F(x)为密度曲线函数,0≤c≤1。
其余步骤与实施例一相同,在此不再赘述。
本实施例同样可以避免编码结束后的文件重新遍历,降低了计算开销,且索引表的精度很高。
实施例三
与实施例一相比,本实施例根据初始索引表构建密度曲线函数的过程中,所述密度曲线函数F(x)的构建条件为非严格定义,构建条件可以为:密度曲线函数F(x)在索引区间[k-1,k]内的n阶拟合偏差之和最小,用公式可以表示为:其中:TOC[k]为初始索引表中第k个元素对应的数据长度,F(x)为密度曲线函数,0≤c≤1,n为大于或等于1的整数。
其余步骤与实施例一相同,在此不再赘述。
本实施例同样可以避免编码结束后的文件重新遍历,降低了计算开销,且索引表的精度很高。
实施例四
参考图7所示,本实施例建立索引表方法包括:
步骤S41,提供待编码的音/视频文件;
步骤S42,建立包括K个元素的初始索引表,其中第k个元素对应时间区间为[(k-1)T1,kT1]的数据长度,所述K为大于或等于1的正整数,所述k为大于或等于1且小于或等于K的正整数,各元素的持续时间为T1;
步骤S43,根据所述初始索引表,构建密度曲线函数;
步骤S44,在对音/视频文件编码持续时间T2后,获取编码数据的数据长度,所述T2为所述音/视频文件中一帧数据对应时间的整数倍;
步骤S45,利用所述编码数据对应的时间T2对初始索引表中每个元素的时间区间进行更新,且利用所述密度曲线函数和编码数据的数据长度,对初始索引表中每个元素对应的数据长度进行更新,所述更新后的索引表中第k个元素对应时间区间为[(k-1)(T1+T2/K),k(T1+T2/K)]的数据长度;
步骤S46,不断重复上述根据索引表构建密度曲线函数、编码和更新索引表的过程,直至对所述音/视频文件编码结束;
步骤S47,对编码结束后更新的索引表进行结算处理,得到每个元素对应的相对文件偏移。
与实施例一相比,本实施例中所述初始索引表是在对所述音/视频文件编码的过程中建立的。具体地,在对所述音/视频文件编码的过程中,可以获取每帧数据的数据长度,当编码时间达到KT1之后,就建立包括K个持续时间相同的元素的初始索引表,并获取每个元素的持续时间T1和对应的数据长度。
其中,初始索引表的元素个数K和每个元素的持续时间T1的设置方法与实施例一相同,在此不再赘述。
其余步骤与实施例一相同,在此不再赘述。
需要说明的是,本实施例中构建条件还可以采用实施例二或实施例三的方法确定。
本实施例同样可以避免编码结束后的文件重新遍历,降低了计算开销,且索引表的精度很高。此外,所述初始索引表是在对音/视频文件编码的过程中建立的,从而可以进一步提高检索的精确度。
为检验本发明的实际效果,这里用模拟一个具有10000元素的数组来模拟具有10000帧的VBR编码音乐,每帧的数据长度(即码长)可以从10比特变化到4000比特,而TOC表具有100个元素。
采用本发明方法,当密度曲线函数F(x)的建立选择严格定义,采用最简单的直方图函数时,同步更新得到的100个分段的分段数据长度如图8中实线所示,其中虚线是采用现有技术中累加方式得到的实际分段数据长度。通过比较可见:采用本发明方法更新索引表能够跟得上码率的变化。
图9则显示了采用本发明方法同步更新得到的各索引区间的相对文件偏移(参见实线)和采用现有技术中累加方式得到的实际的相对文件偏移(参见虚线)。通过比较可见:采用两种方法得到的相对文件偏移的偏差很小,因此本发明能够为VBR编码音乐足够提供足够精度的时刻检索。
本发明还提供了一种包括上述索引表的建立方法的编码方法,从而可以在对音/视频文件编码结束之后,相应地得到了与所述音/视频文件对应的索引表,最终可以简单快速地实现对编码后音/视频文件的检索和定位。
虽然本发明已以较佳实施例披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。