用于数据流中确定位置的存储和重定位的方法及装置转让专利

申请号 : CN200410095098.X

文献号 : CN1622535B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 弗里德曼·许布勒

申请人 : 汤姆森许可贸易公司

摘要 :

在面向数据包的数据流(TS)中,所需要的结构信息,例如,用于搜索或用于转发或换向,只包含在专门的数据包(PP#11,PP#12)内。根据本发明,在存储数据流(MTS)的同时,产生信息文件(I),它包含参考所有那些含有这一信息的数据包的开头。信息文件包含数据块(IB),每一数据块识别结构信息、以及与下一个或前一个这种数据包的距离和关于各数据包的附加信息识别数据包的位置(OP,OB)。

权利要求 :

1.一种扫描第二类型数据流(EDS)的方法,其特征在于:第一类型的第一数据流(MTS)包括恒定长度的第一数据包(TDP),其中,包含在第一数据包(TDP)中的数据项可不改变顺序组合起来以形成第二或更多数据包(PP),这些数据包有可变的尺寸并形成至少一个第二类型的第二数据流(EDS),包括步骤:读取或接收第一数据流,用于读取或接收数字视频或音频数据;

读取或接收包含导航信息的信息文件,所述导航信息与读取的或接收的第一类型的数据流相关;

确定第一类型的第一数据流中的第二数据包的开始位置;

从信息文件中检索第二数据包的开始位置和与第二数据包有关的附加信息,其中,所述开始位置涉及第一类型的第一数据流,并指示第一数据包(TDP)包含位于第二类型的第二数据流(EDS)内的所有第二数据包的开始或报头(PPH1,PPH2),其中,检索的特定一个第二数据包的开始位置与所述第二数据流内的下一个或前一个第二数据包的开始位置相关,其中,检索的开始位置包括至少一个第一类型的第一数据流中的第一数据包数或字节数;

扫描第二数据流(EDS),其中,访问第一类型的第一数据流(MTS)中的第一数据包(TDP),其中,根据所述检索的第一数据包数或字节数跳过第一数据包或第一数据包的字节。

2.根据权利要求1所述的方法,其特征在于第一类型的数据流(MTS)包含传输数据流包(PP#11、PP#12),第二类型的数据流(EDS)包含基本数据流包(PP)。

3.根据权利要求2所述的方法,其特征在于所述开始位置被描述为第一数据包数(OP)和/或字节数(OB)。

4.根据权利要求2所述的方法,其特征在于从数据流中分开检索开始位置和附加信息,其中,分开检索的信息包含基本数据流包的报头的位置,以及各报头的时间戳。

5.一种在第二类型数据流(EDS)内转发或换向的方法,所述第二类型数据流(EDS)包括由第一数据包的内容组成的可变尺寸的第二数据包(PP),所述第一数据包具有恒定尺寸并形成第一类型的数据流(MTS),其中,用文件指针指示在第一类型数据流(MTS)中的当前第二数据包的开始或报头的当前位置,其特征在于包括步骤:从存储器或从文件中检索位置信息,所述位置信息指示在第一类型数据流(MTS)中的第一数据包(PP#11,PP#12)的位置,所述第一数据包(PP#11,PP#12)包含第二类型数据流(EDS)中的第二数据包的开始或报头,其中,存储器或文件包含第二类型数据流(EDS)中的所有第二数据包(PP)的位置信息,用于任一个特定第二数据包的所述位置信息与第二类型数据流的前一个或下一个第二数据包相关;

从文件指针的位置(PP#11)和检索的位置信息计算第一类型数据流(MTS)内的另一第一数据包(PP#12)的位置,另一第二数据包与第二类型数据流内的所述当前第二数据包相邻;

转发或换向第二类型数据流,其中,文件指针跳到第一类型数据流(MTS)内的所述另一第一数据包的计算的位置。

6.根据权利要求5所述的方法,其特征在于第一类型的数据流(MTS)包含传输数据流包,第二类型的数据流(EDS)包含基本数据流包(PP),其中,基本数据流包(PP)包含报头(PPH1,PPH2)中的时间戳,其中,时间戳也存储在所述存储器或文件中,其特征还在于包括,从存储器检索时间戳或文件中读取时间戳以及传输数据包(PP#11,PP#12)的位置,所述传输数据包(PP#11,PP#12)包括各自的报头;

根据时间戳确定第二类型数据流(EDS)中的指针和当前时间代码;

显示当前时间代码,或根据时间代码以固定时间间隔偏移指针。

7.一种用于在第二类型数据流(EDS)内转发或换向的设备,所述第二类型数据流(EDS)包括可变尺寸的第二数据包(PP),所述可变尺寸的第二数据包(PP)由具有恒定尺寸的第一数据包的内容组成,所述第一数据包具有恒定尺寸并形成第一类型数据流(MTS),其中,文件指针表示在第一类型数据流(MTS)中的当前第二数据包的开始或报头的当前位置,其特征在于设备包括下述部件:存储介质,从所述存储介质检索出指示第一类型数据流(MTS)中的第一数据包(PP#11,PP#12)的位置的位置信息,所述第一数据包(PP#11,PP#12)包含在第二类型数据流(EDS)中的第二数据包(PP)的开始或报头(PPH1,PPH2),其中,位置信息涉及第二类型数据流(EDS)中的所有第二数据包(PP),其中,用于任何特定一个第二数据包的位置信息与所述第二类型数据流内的下一个或前一个第二数据包相关;

计算装置,用于从文件指针的当前位置和从存储介质中调出的位置信息计算另一个第一数据包(PP#12)在第一类型数据流(MTS)内的位置,另一第二数据包与第二类型数据流内的所述当前第二数据包相邻;

设置装置,用于设置文件指针于第一类型数据流(MTS)内计算出的位置,其中,执行第二类型数据流(EDS)的转发或换向。

8.根据权利要求7所述的设备,其特征在于在第二类型数据流(EDS)中的第二数据包(PP)含有时间标记,该标记由附加信息(AI)确定,所述附加信息从存储介质中与含有第二数据包的各个数据包的报头的第一数据包的位置信息一起检出,另一个第一数据包(PP#12)这样选择,使其有关的时间标记和含在当前第二数据包中的时间标记具有预先确定的时间差。

9.一种扫描第二类型数据流(EDS)的设备,所述第二类型数据流(EDS)包括可变尺寸的第二数据包(PP),所述第二数据包(PP)由第一数据包的内容组成,所述第一数据包具有恒定尺寸并位于第一类型的数据流(MTS)中,其特征在于设备包括:第一读取或接收装置,用于读取或接收包括数字视频或音频数据的第一类型的数据流(MTS);

第二读取或接收装置,用于读取或接收包含导航信息的信息文件,所述导航信息与读取的或接收的第一类型的数据流相关;

处理装置,用于确定第一类型数据流内的第二数据包的开始位置;

检索装置,用于从信息文件中检索第二数据包的开始位置和与第二数据包有关的附加信息,其中,所述位置涉及第一类型的第一数据流,并指示第一数据包(TDP)包含位于第二类型的第二数据流(EDS)内的所有第二数据包的开始或报头(PPH1,PPH2),其中,检索的特定一个第二数 据包的开始位置与所述第二数据流内的下一个或前一个第二数据包的开始位置相关,其中,检索的开始位置包括至少一个第一类型的第一数据流中第一数据包数或字节数;

扫描装置,用于扫描第二类型的数据流,其中,访问第一类型的第一数据流(MTS)内的第一数据包(TDP),其中,根据检索的第一数据包数或字节数跳过第一数据包或第一数据包的字节。

说明书 :

用于数据流中确定位置的存储和重定位的方法及装置

技术领域

[0001] 本发明涉及用于数据流中确定位置的存储和重定位的方法及装置。

背景技术

[0002] 数字数据流,例如基于MPEG2标准ISO/IEC 13818-1的数字数据流,经常分解成多个数据包。在这种情况下,某些信息项,如时间细节,只包含在专门的数据包中。特别是,引用的标准定义了传递数据流(TS)的结构。MPEG-TS数据流是定向数据包的数据流,它包括顺序传输的数据包(“传输数据流的数据包”,TSP)。TSP包括报头和传输数据,它同时代表定向数据包基本数据流的(分包封装的基本数据流,PES)数据包的一部分。为了获得整个PES数据包,单独的部分必须从顺序相关的TSP中提取出来,且在处理过程中,不改变TSP的顺序。PES数据包包括报头信息和数据字段。例如,数据字段可以是视频数据流或音频数据流的一部分。为了通过(扫描)数据流搜索信息,必须研究每一数据包,这需要很长的时间。此外,广泛评估进程也是需要的,例如错误校验或错误纠正。

发明内容

[0003] 为了避免研究定向数据包数据流中的每一数据包,产生了信息文件(info file),它在数据流扫描期间是有用的。在这一文件中,不同信息项的各自偏移被存储起来,也就是说在数据包和字节中的偏移。数据流和信息文件并行扫描,亦即同时扫描。信息文件用于识别数据流中有多少个数据包或字节可以跳跃,以到达下一个所要信息的特定位置,或下一个有标记的入口点。此外,关于各数据包的进一步信息项可存储在信息文件中,这些信息项必须用比较广泛的方法从该数据流中进行评估。因此,这些过程只需执行一次。这可在工作室内或用户的记录器中,在记录过程或随后的后处理过程中进行。为此,原则上,这对于能记录信息文件并只回放所记数据流的设备就已足够了。根据本发明的信息文件允许数据流以实际无延时扫描,这样就获得巨大的时间于信息提取和跳到数据流中规定的位置。
[0004] 根据本发明用于扫描定向数据包数据流的信息文件包括信息块的顺序。每一信息块与数据流中指定的数据包有关,且包含两部分:第一为偏移,即数据包数或字节数,在它的后面是与下一个信息块有关的下一个数据包;第二是与当前数据包有关的附加信息,例如各时间戳。
[0005] 为了使信息文件也能更好地支持可变的数据率和不同的数据包大小,信息块还包含有下一个相关数据包在数据包中和字节中的偏移。在这种情况下,原则上有两个细节中的一个就足够了。
[0006] 此外,偏移是相对的,所以,本发明的信息文件可支持任何大小的数据流。与绝对偏移相比,后者与数据流的起点有关,这一由偏移大小引起的限制只与两个数据包之间的距离有关,而与文件的长度无关。
[0007] 特别是,信息文件可用于定向数据包数据流中的快速转发和换向,增加可塑性。信息文件的使用导致对定向数据包数据流的明显加快的扫描,因为可跳过数据流中不感兴趣和无关的数据包,特别是那些传输数据流中的数据包,它们是不同的基本数据流部分,或它们并不包含在PES数据包报头中。此外,经复杂计算的结果可作为附加信息存入信息文件中,使该计算只需执行一次,例如在创建信息文件时,信息文件的使用,在数据流中跳过的数据包数目越多越有效,但从数据流中提取所需信息项的方法变得比较困难。
[0008] 用于在包含不同尺寸数据包的基本数据流内,转发或换向在传输数据流(如TDP)中从其它的、不变尺寸的数据包中提取出来的这些数据包和指示当前位置的文件指针的装置至少包括一个存储介质,从中可检出那些在基本数据流中含有起点或报头的传输数据流的TDP位置;以及如处理器的装置,用于计算传输数据流内另一TSP离文件指针和离位置细节或偏移的位置,后两者已从存储介质中对其它TDP检出;最后,还包括用于对算得的传输数据流内的位置设置文件指针的装置。
[0009] 本发明先进的实施例描述在权利要求书,详细说明和附图中。

附图说明

[0010] 本发明的实例示于下图和详细说明中:
[0011] 图1表示MPEG-2TS数据流的格式;
[0012] 图2表示信息文件的一般布图;
[0013] 图3表示用于MPEG-2TS数据流的信息文件;
[0014] 图4表示信息包()功能的structogram。

具体实施方式

[0015] 本发明将用对MPEG-2存储和重放设备(数字存储设备,DSD)的语法分析程序例来进行说明,作为DSD-MPEG2语法分析程序参考下列文本。
[0016] DSD-MPEG2语法分析程序研究MPEG-2TS数据,包括TSP,并试图从含在这一数据流中的PES数据包部分汇编整个PES数据包。TSP可属于不同的PES数据包,形成不同的基本数据流。简化的MPEG-2传输数据流MTS和有关的基本数据流PES1,PES2示于图1。传输的数据流MTS包括MPEG-2传输的数据包TSP,每个含有报头和数据,或有效载荷。这一有效载荷代表PES数据包的部分,它依次包括报头和数据,或有效载荷。有关的PES数据包PP#1,PP#2形成基本数据流PES1,PES2,用它们中的一个来包含视频数据,和其它音频数据。
[0017] PES数据包报头中的“start_code_prefix”具有24比特的长度和固定值000001hex。后续的“stream_id”表示承载的数据流类型(“PES_packet_data_byte”)。这在视频数据流的E0hex至EFhex的范围内,在音频数据流的C0hex至DFhex的范围内。
[0018] 语法分析程序调查TSP报头值1的“payload_unit_start_indicator”标签,对00000001hex的TSP数据区域,相应于PES数据包的“start_code_prefix”,扩展为32比特。
如果这两字段具有期望的值,那么语法分析程序判断在当前的TSP中,新的PES数据包起动了。
[0019] PES数据包可携带“代表时间戳”(PTS)和“解码时间戳”(DTS)。DTS表示携带的数据出现的时间,DTS提供关于数据解码时间的信息。“PTS_DTS_flag”同样也包含在PES数据包的报头中,并表示PES数据包是否包含PTS或DTS中。ISO/IEC标准13818-1规定了相继的PTS之间最大0.7秒的间隔。为了确定当前的位置,亦即当前的时间码,可求PTS的值。
[0020] 在求PTS值期间发生的一个问题是,PTS在视频数据流中并不需要从零开始,但可假定任意(起始)值。在视频数据流中单独帧没有在显示它们的顺序中精确地编码。对于有限的范围,PTS也可变得较小,因为PTS的长度是有限,这也可能导致溢出。此外,PTS可以在已编成串的不同视频数据流之间的转移位置跳过很大的数量。但是,这一PTS跳跃并不意味着回放视频数据的时间码的跳跃。在MPEG-2TS数据流中第一个PTS可以不为零的问题可解决如下:其值为时间码的变量,亦即回放占用的时间,变量在Reset()调用中设置为零。这一变量具有相继加到两个连续的PTS之间的差值。为了保证这一值的单位为毫秒,这一差值要除以90。在两个连续的PTS之间的差大于FFFFhex的情况下(它相应于0.7秒),该差被忽略。当到达这两个汇编的数据流单元的过渡点时,这种情况就会发生。当语法分析程序偶然碰到“假的”PTS时,它与前面PTS之间的差以及它与下一个PTS之间的差可忽略,因为这两个差的大小都大于0.7秒。
[0021] 两个相邻PTS之间的差包括在时间码的计算中,只要它不大于FFFFhex,后者相应于0.7秒。这一计算只要求PTS最低有效位的16比特,而PTS的长度为33比特。但是,因为只需要16位用于计算,且用32位明显容易进行两个PTS的值FFFFhex的比较,因而PTS中的MSB(最高有效位)通常可忽略。
[0022] 在转发或换向期间,没有要显示的视频数据通过IEEE 1394总线发送,但只有位置指针在视频文件中移动。文件指针移动的速度就是转发或换向的速度。为此,当前的时间码要连续地确定,且可在显示模块上显示。
[0023] 为了允许不变的转发或换向速度(它们可以计算),文件指针以不变的时间间隔由规定的时间码间隔移动。为此,必须找到在相应于查找时间码的视频数据流中的数据包。转发或换向方法的基本步骤示于表1中。
[0024]
[0025] 表1转发或换向的基本步骤
[0026] 转发和换向的速度可借助于时间码的差(当前时间码+ΔT)和程序中后续等待时间来设置。循环中等待时间可没有任何限制地选择。时间码差ΔT被确定与这一等待时间匹配,以获得规定的转发或换向速度。
[0027] 转发或换向速度是规定时间内跳过的时间码间隔。这意味着,例如,10秒的胶片应在1秒内跳过。等待时间不应过长,因为时间码显示只在转发或换向期间长时间间隔后出现。但是,等待时间也不能太短,以使ΔT不会短于两个时间码之间的平均时间间隔。此外,等待时间影响时间显示的清晰度。因为转发和换向期间要知道视频数据流中当前位置的时间码,因而视频数据流必须连续作语法分析。在MPEG-2TS数据流中,这意味着必须全部调查TSP。必须确定PES数据包,并调查发生的PTS。然后PTS必须对错误作校核,如果必要,必须纠正。但是,这一过程需要很长时间,使转发和换向不能很快执行。但转发和换向可采用本发明的信息文件而被明显地简化,该信息文件使当前时间码和含有该时间码的TSP很容易确定。
[0028] 并不需要每个PES数据包含有PTS。但是,如果它确实含有PTS,这一PTS必须位于PES数据包的起始。一旦找到PTS,大量的TSP可被跳过。但在视频数据流语法分析期间,可跳过的TSP数量预先是不知道的。在这种情况下,可利用本发明的信息文件的先进效果。
[0029] 图2是本发明的信息文件的图示,原则上,它包含偏移值OP、OB的序列,它表示有多少基本数据包是不相关的,可在转发和换向时跳过。附加信息AI也相对于每一偏移被存储。这三个字段一起形成对每一PES数据包PP的信息块IB。“偏移数据包”OP的值和“偏移字节”OB的值表示基本传输数据包(TSP)TDP数和两个相关TSP之间的字节数,亦即传输数据流MTS中的两个数据包PP#11,PP#12之间的字节数,MTS包含相同的基本数据流EDS中直接互相紧跟的那些PES数据包PP的报头PPH1,PPH2。与各个这种PES数据包PP有关的那些TSP位于这些相关的TSP之间,但与不同的基本数据流的PES数据包有关的TSP也可在那里出现。信息块IB包括两个偏移值OP、OB和附加信息字段AI。附加信息字段AI与数据流中的各数据包PP#11,PP#12有关,且可包含这一数据包的时间戳(PTS)。每一信息文件只与一个数据流有关,优先为视频数据流,因为转发和换向过程是用来面向这种数据流的。
[0030] 在MPEG2-TS数据流的情况下,信息块中头两个字段OP、OB表示两个相继的PES数据包之间的间隔,每一个具有32比特的长度。在说明应用中的“附加信息”字段AI包含对每一视频格式完成计算和错误纠正的时间码,同样为32比特长度。因而在说明表中的信息块具有MPEG2-TS数据流中3×32=96比特或12字节的长度。但是,在附加信息字段AI存储更多的数据可能更有利,只要不会使信息文件过长,使转发和换向速度再度减低。信息文件中的信息允许立即跳过全部无关的TSP。信息文件I与基本数据流EDS,例如基于MPEG2的视频数据流,之间的导航和同步是从PES数据包到PES数据包执行的。在这种情况下,时间码可直接从信息文件中读出,因而并不需要在每次转发或换向时重新计算。
[0031] 记录的MPEG2-TS视频数据流不需要以TSP起头,它包含PES数据包的开始(“PES Start”)。如果DSD正在记录活动的数据流,那么,第一个TSP是连续传递的数据流中不确定的数据包。这一情况示于图3。传输数据流MTS以出现“PES Start”的第一个数据包PSP#1之前的两个其它数据包OTH开始。信息文件中第一个偏移值OP1、OB1表示含有“PESStart”的第一个MTS数据包PSP#1与同样含有“PES Start”的第二个MTS数据包PSP#2之间的距离。传输数据MTS中的第一个TSP,并不包含完全的PES数据包,且如果它们与同一个基本数据流有关,也可借助于信息文件而忽略。此外,信息文件中第一项也可能表示与第一PES数据包PSP#1的距离或要跳过的无关TSP OTH的数量。
[0032] 当视频数据流的记录结束时,最近接收到的TSP无需包含PES数据包的末端。因此,接着的信息块连到MPEG2规定的信息文件中最后的信息块,其“偏移数据包”(“offset packets”)的值为零,于是,继之以含有“PES开始”(“PES Start”)的最后TSP的位置。这种初始PES数据包并不需要完整,在重放时也不应发送。在示于图3所示的例子中,最后的正规信息块OP2、OB2、TC2描述了最后的完整PES数据包(它以PSP#2开头)与不完整的最后PES数据包(它以PSP#3开始)之间的距离。偏移OP2为3,因为第三个顺序TSP包含下一个与同一基本数据流有关的PES数据包报头PSP#3。偏移OB2是以PSP#2开头的PES数据包中字节的总和。时间码TC2相应于显示时间或这一PES数据包PTS。最近的信息块OP3、OB3、TC3包含对偏移值OP3的零值,继之以最后“PES Start”数据包PSP#3的位置。因此,这说明了记录的基本数据流的结束。
[0033] 首先,借助于信息文件的帮助扫描的视频数据流必须与信息文件同步。为此,需要寻找包含PES数据包起头的视频数据流,即“PES Start”。
[0034] 信息文件在规定格式的DSD数据流语法分析程序中产生和评估。因此,可能产生特定适应的信息文件,且带有对每一视频格式有独立的附加信息字段和独立的用于信息块的比特长度。
[0035] 信息文件还常在接收视频数据时创建,也就是说在记录过程中创建。如果对已经存在的记录道没有信息文件,那么像这样的信息文件可在DSD应用程序开始时产生。也可能回放记录时没有按本发明产生的信息文件的视频数据,例如当视频文件被人为复制时。信息文件也可与视频数据一起发送和接收。
[0036] 列于表2的功能定义在DSD数据流语法分析程序模块中,以提供界面,且允许文件打开、产生或关闭信息文件。
[0037] 表2DSD数据流语法分析程序功能
[0038]OpenInfoFile() 打开信息文件以便读出
CreateInfoFile() 产生信息文件,并打开以便写入
CloseInfoFile() 关闭信息文件
ParsePacket() 借助为读出已经打开的信息文件的帮
助扫描视频数据包
ParseStream() 扫描视频数据流。如果信息文件已被
OpenInfoFile()打开,它用于语法分析。
如果前面的调用用于CreateInfoFile(),
那么,依据当前的视频数据流产生信息
文件
GetCurrentEndofValidStream() 在被ParseStream()最后调用之后,返回与视频数据流最后有关部分的位置。这
很重要,例如在不以完整PES数据包结
束的MPEG2-TS数据流的末端
GetStartOfStreamOffset() 返回视频数据流第一有效部分的位置,
当记录从连续数据流的中间开始时,这
很重要。在MPEG2-TS数据流的情况
下,返回含有“PES Start”的第一个TSP。
ResetInfoFilePosition() 重置信息文件内的指针于文件开始
SeekTimeCode() 搜索信息文件中特定时间码,并返回在
视频数据中,为到达正寻道的时间码位
置,必须跳过的字节数
CheckSync() 调查视频数据流是否与信息文件同步
EndOfInfoFile() 核对是否已到达信息文件的末端
[0039] Parsepacket()的调用读出信息文件,Parsestream()的调用读出或产生信息文件,与前而OpeninfoFile()或CreateinfoFile()的功能调用有关。
[0040] 功能Checksync()核对视频数据流是否与信息文件同步。在MPEG2-TS数据流的情况下,核对是为确定视频数据流中显示位置的“Payload_unit_start_indicator”标记是否置于1和“start_code_prefix”是否含有值000001hex。如果是这样,那么在视频数据流的当前位置含有PES数据包的开头。因为信息文件指示两个TSP(每个包含相邻的“PES Start”)之间的间隔,这对以信息文件帮助扫描视频数据流是必要条件。在这种情况下,该功能返回“真”值。
[0041] ParsePscket()的调用扫描MPEG2-TS数据流中单个TSP。ParsePscket()的相继调用含有相继的TSP作为输入参数。用作当前进行语法分析的数据包的时间码从有关的信息文件中读出。因而OpeninfoFile()的上述调用是必须的。图4表示ParsePacket()程序中的步骤。
[0042] 要语法分析的视频数据首先要与ParsePacket()独立调用时的信息文件同步,后者是借助于在视频数据流(它含有“PES Start”)中搜索第一个TSP来实现的。为此,TSP报头的第一字节,sync-byte,对第一步D1中规定的值47hex作调整。模块变量bFirstPESReached表示这一TSP是否已找到。在第二步D2,ParsePacket()调查这一变量。如果TSP还没有找到,则调用Checksync()。bFirstPESReached的值,依据返回的值可置为“真”。在第三步D3中,这一变量用来再一次核对有PES数据包开头的第一个TSP是否已找到。如果视频数据流已在ParsePacket()调用时与信息文件同步,那么,有关下一个TSP(它含有相关的“PES Start)的偏移可从信息文件中读出。模块变量U32PacketsToNextPES被赋于已确定的偏移值。当调用新功能时,该变量就被确定。于是,信息文件不再读出,直到该变量达到零值。如果从信息文件里读出零偏移D4、D5,即该文件已到结束,那么含有“PES Start”的最后TSP的位置转换成模块变量u64ByteCounterAtPESStart。这一变量值由函数GetcurrentEndOfValidstream()返回。如果没有到达该文件结束,与当前TSP有关的时间码从信息文件中读出,并存入模块变量u32ElapsedTime中。
[0043] 功能Parsestream()扫描包括一个或更多个TSP的视频数据流的一部分。它不仅支持从信息文件确定时间码,而且也支持这种文件的产生。所用模式取决于前面调用的OpenInfoFile()或CreateInfofile()。在每种情况下,单个视频数据包从要作语法分析的视频数据流循环中提出。该循环是连续的,直到每个数据包通过语法分析。在处理过程中模块变量u32TSPCounter计算提取的数据包,提取的字节在u64Bytecounter中计算。在前面调用OpenInfofile()的事件中,各提取的数据包用作Parsepacket()功能调用的输入参数。一旦有“PES Start”的第一个TSP数据包到达,含在u64Bytecounter中的字节数就转换成模块变量u32CurrentstartOfstreamOffset。
[0044] 当想要产生信息文件时,当前TSP转换成专用功能Parsetransportpacket()。这一功能确定该TSP是否与基本数据流相关,从这一数据流中提取PRS数据包块,并存入缓存器。以每次功能调用,更多的PES数据包存入缓存器。如果TSP包含新的数据包的起头,那么变量u32TSPCounter的计数存入模块变量u32TSPCounterAtPESStart,且当前的u64ByteCounter值存入u64ByteCounterAtPESStart,所有前面存储的PES数据包块连接在一起,整个PES数据包用专门功能ParsePESPacket()作调查。这一功能确定有关的PTS(如果存在),并把它存入模块变量u32PTS。调查PES数据包也是可能的,例如,确定它们是否包含视频或音频数据流。然后,在ParseTransportPacket()中研究PTS,核对错误并纠正,并计算当前时间码,写入到打开的信息文件中。时间码用上面描述的方法计算。两个含有“PES Start”的相邻TSP之间的距离用模块变量u32TSPCounter,u32TSPCounterAtPESStart,u64ByteCounter和u64ByteCounterAtPESStart计算。
[0045] 功能GetcurrentEndOfValidStream()返回变量u64ByteCounterAtPESStart,如对ParsePacket()和ParseStream()所说明的那样。于是,它提供了最近作语法分析的含有“PES Start”的TSP的位置。
[0046] 功 能 GetStartOfStreamOffset() 返 回 填 入 ParseStream() 的 变 量u32CurrentStartOfStreamOffset值。如果要重放视频数据流,那么实际传输从返回值开始。这代表了来自在开始回放时转换的不完全PES数据包。因为视频数据流能在任何点开始记录,记录的文件无须以第一个TSP中的“PES Start”开始。变量u32CurrentStartOfStreamOffset最初置为初始值FFFFFFFFhex。如果这一值被该功能返回,这意味着在ParseStream()中未找到“PES Start”。
[0047] 在信息文件中搜索特定的时间码是用DSD-MPEG2语法分析程序中的SeekTimeCode()程序执行的。正向与反向搜索(搜索类型)的区别已画出。文件指针在视频数据流中为到达适合的TSP必须移动的字节数被返回。在程序的反向搜索路径中,时间码(它小于或等于作为参数转换的时间码)在信息文件中寻找。为此目的,执行表3中的算法。
[0048]
[0049] 表3用SeekTimeCode()反向搜索的结构语法。
[0050] 表3中的总跳计数器表示为到达所要的时间码,在视频数据流中位置指针必须移动的字节数。这是在信息文件中把从PES数据包到PES数据包的偏移值加起来得到的。
[0051] 在程序的正向途径,时间码在大于或等于作为参数转换的时间码的信息文件中寻找。表4表示正向搜索的结构语法。
[0052]
[0053]
[0054] 表4:用SeekTimeCode()正向搜索的结构语法
[0055] 在通过表4算法循环的每次运作之后,信息文件的文件指针指向下一个信息块的开始,为此,执行步骤5至8。到达文件结束时,脱离循环,文件指针置于“file start”(“文件开始”)。
[0056] 下面的文本描述正向和反向指令到转发和换向的转换。
[0057] 视频数据流中的转发和换向是用上面描述的信息文件来执行的。在程序的开始,假定视频数据流内的位置指针指在含有PES数据包起头(“PESStart”)的TSP,或位于这个数据包前的TSP。为与信息文件同步,正向扫描视频数据流,直到找到有“PES Start”的TSP。图3中对数据流TS中的数据包OTH扫描,直到找到第一个含有“PES Start”的PES数据包PSP#1。然后,借助于SeekTimeCode()的循环,搜索信息文件中离当前时间码为规定时间间隔的时间码,TSP数量或要跳过的字节数由它们的和确定,数据指针在视频数据流中由这一总量移动。
[0058] 当指令发生改变时,视频数据流与信息文件之间的同步也必须保证。为此,时间码同样要从信息文件中读出,而不是从重放过程中的视频数据流中读出。这有两条理由:首先,时间码无需从PTS重新计算,所以比较快速,且对性能有好处,第二,信息文件在转发或换向之后可能的指令改变事件中,信息文件与视频数据流因此同步。
[0059] 即使在发生指令改变时,为保持视频数据流与信息文件同步,DSD-MPEG2语法分析程序应遵守如下规则:
[0060] 1.在执行指令开始,位置指针必须指在视频数据流中包含与信息文件中当前指针位置有关的PES数据包开头的TSP,或位于它之前的TSP。如果位置指针都位于视频数据流和信息文件中的文件开头,那么这一条件因确定而满足。
[0061] 2.如果视频数据流中的位置指针在重放处理之后没有位于有“PESStart”的TSP,那么信息文件的文件指针指在与下一个有“PES Start”的TSP有关的信息块。如果视频数据流当前的TSP包含“PES Start”,那么,信息文件的文件指针指在与这一TSP有关的信息块。
[0062] 3.在执行正向或反向指令之后,视频数据流中的位置指针指向有“PES Start”的TSP。信息文件的文件指针指在与这一TSP有关的信息块,一种例外是在执行指令的到达文件结束的情况。在这种情况下,这两种指针都置于文件开头。
[0063] 在执行指令后,无论是视频文件和信息文件都被关闭。模块变量因此引入,它把当前位置永久存入视频数据流和信息文件中。为此目的,DSD工作模块建立变量u64Filepos,它以每一文件访问已后,视频文件的文件指针的当前位置来更新。DSD-MPEG2语法分析程序确定变量u321nfoFileposition。在DSD工作的StartFile()程序中,文件指针在打开视频文件后置于u64Filepos中的位置。在以相应的DSD-MPEG2语法分析程序模块变量打开信息文件时也这么做。如果不同于当前指令选择的记录道正在回放,这两模块变量必须指于零。
[0064] 在实际实现中,典型地可获得下列文件之间的量值比,以例说明:
[0065] 对于65兆字节的视频文件,其信息文件大约为81千字节,相当于0.12%。对于其它229兆字节的视频文件,其信息文件为约146千字节,相当于约0.06%。
[0066] 所用的传输数据流(TS)是面向数据包的数据流,它主要用于经受错误的通道,通常用于传输或存储。但是,本发明并不取决于传输数据流中所有或部分数据是否有任何相关性。
[0067] 所用的PES数据包具有高达64千字节的可变尺寸,且可在视频基本数据流中包括内部编码的帧(“I-帧”,约40千字节),或高至两个外部编码的帧(“B-帧”,“P-帧”)。这是因为编码帧的大小是可变的,与帧内容有关。根据本发明的方法允许独立的PES数据包,和独立的视频帧被简单、快速和规范地找到。
[0068] 本发明的一个重要特性是有关发现PES数据包的信息分别存储,例如在分别的文件或分别的存储区中。这一方法的其它优点是,无需在定位过程中为了在特定基本数据流内定位专门的点,首先从两个或更多个基本数据流中分类存储的传输数据流,而都能导致存储数据流如同其接收时一样无改变地传输。
[0069] 此外,本发明的方法,使跳到视频数据流中的任何进入点都是可能的,该数据流可从帧编码的观点看,例如,也就是说任何I-帧而不是必须预置可能进入点的固定框架。甚至外部编码的帧,B-帧或P-帧都可跳到它们位于PES数据包的开头。这些点在建立信息文件时自动定位。
[0070] 相对偏移的指示意味着本方法与整个文件的长度无关。只有最大跳跃宽度被限制了,尽管而它能可靠地预测。在这种情况下,相对于下一个相关TSP或前一个相关TSP的偏移可根据相关的定义来表示。
[0071] 本发明的方法优先用于必须在面向数据包的数据流中定位的设备中,例如对视频和/或音频数据的记录和回放设备,如个人视频记录器(PVRS)或同类设备,特别是实现转发、转向或回放功能。