从mpeg-4中间格式创建mpeg-4文本表示的方法

文档序号:6422548阅读:464来源:国知局

专利名称::从mpeg-4中间格式创建mpeg-4文本表示的方法
技术领域
:一般来说,本发明涉及多媒体信息的数据表示,具体来说,涉及将被称为"MPEG-4中间格式"的一种形式的多媒体信息转换为被称为"MPEG-4文本表示,,的另一种形式的多媒体信息表示。
背景技术
:计算机通常被用来呈现各种数字媒体,包括图像、音频采样(声音),视频媒体,以及文本和几何形状。这些媒体类型中的每一种类型都可以分别地呈现,或者许多这样的^某体元素可以以所谓的复合多媒体内容一起呈现。创建和分发复合多媒体内容的能力对于传播基于各种媒体类型的信息非常重要。此外,已经创建了表示复合多媒体内容的标准化手段,以使许多作者创建可以在各种计算机平台上(如个人计算机、机顶盒及其他设备)再现的内容。运动图像专家组(MPEG)开发的复合多媒体内容的两个著名的标准化格式是可扩展MPEG-4文本(XMT)格式和二进制编码MPEG-4(mp4)格式。XMT格式最适合用于创作复合多媒体内容,而mp4格式最适合用于复合多媒体内容的压缩存储和传输。如此,应该有效地将XMT格式的内容转换为mp4格式的内容。
发明内容如下面详细描述的,本发明是用于将二进制编码的MPEG-4(mp4)格式转换为可扩展MPEG-4文本(XMT)格式的方法、系统和设备。本发明利用包括相对少量的软件并只需要少量的资源实现从mp4格式到XMT格式的复合多媒体内容转换的有效方法。如此,本发明的一个方面涉及用于将MPEG-4(mp4)二进制文件转换为可扩展MPEG-4文本(XMT)文件的方法。该方法包括生成表示mp4二进制文件的数据结构集的生成操作。第一个转换操作将数据结构集转换为至少一个中间结构化文档,而第二个转换操作将中间结构化文档转换为XMT结构化文档。然后,创建操作基于XMT结构化文档创建XMT文件。本发明的另一个方面是用于将MPEG-4(mp4)二进制文件转换为可扩展MPEG-4文本(XMT)文件的系统。该系统包括二进制文件解码器,该解码器被配置为输入mp4二进制文件,并生成表示mp4二进制文件的数据结构集。第一个转换器被配置为输入数据结构集,并创建至少一个中间结构化文档。第二个转换器被配置为输入中间结构化文档,并生成XMT结构化文档。XMT串行器被配置为输入XMT结构化文档,并生成XMT文件。本发明的又一个方面是用于将MPEG-4(mp4)二进制文件转换为可扩展MPEG-4文本(XMT)文件的包含在有形介质中的计算机程序产品。计算机程序执行生成表示mp4二进制文件的数据结构集,将数据结构集转换为至少一个中间结构化文档,将中间结构化文档转换为XMT结构化文档,基于XMT结构化文档创建XMT文件的操作。从下面比较具体的参考附图对本发明的各种实施例的描述中,本发明的前述的及其他特点,实用程序和优点将变得显而易见。图1A显示了本发明的一个实施例利用的典型的XMT-A文档。图1B显示了典型的XMT-A初始对象描述符。图2A显示了典型的XMT-Apar元素。图2B显示了典型的XMT-Aodsm命令元素。图3A显示了典型的XMT-AInsert命令。图3B显示了典型的XMT-ADelete命令。图3C显示了典型的XMT-AReplace命令。图4显示了典型的XMT-ABIFSNode元素。图5A显示了典型的XMT-ABIFSNode。图5B显示了典型的重复使用的XMT-ABIFSNode。图6A显示了典型的XMT-AObjectDescriptor。图6B显示了典型的XMT-AES—Descriptor。图6C显示了典型的sdsm的DecoderSpecificInfo(BIFS)。图7A显示了本发明的一个实施例生成的典型的mp4二进制文件。图7B显示了典型的mdat原子。图7C显示了典型的块。图7D显示了典型的moov原子。图8A显示了典型的mp4文件iods原子。图8B显示了典型的Mp4flnitObjectDescr。图8C显示了典型的ES—ID—Inc。图9A显示了典型的trak原子。图9B显示了典型的采样表原子。图10A显示了典型的二进制ES描述符。图10B显示了典型的解码器配置描述符。图10C显示了典型的解码器特定信息描述符。图10D显示了典型的二进制SL配置描述符。图11A显示了典型的sdsm二进制块。图11B显示了典型的sdsm命令帧。图12A显示了典型的BIFS插入命令。图12B显示了典型的BIFS删除命令。图12C显示了典型的BIFS替换命令。图12D显示了典型的BIFSscene替换命令。图13A显示了典型的Node插入命令。图13B显示了典型的IndexedValue插入命令。3C显示了典型的Route插入命令。4A显示了典型的Node删除命令。4B显示了典型的IndexedValue删除命令。4C显示了典型的Route删除命令。5A显示了典型的Node替换命令。5B显示了典型的Field替换命令。5C显示了典型的IndexedValue替换命令。5D显示了典型的Route替换命令。6显示了典型的BIFSScene。图17A显示了典型的SFNode(重复使用的)。图17B显示了典型的SFNode(屏蔽节点)。图17C显示了典型的SFNode(列表节点)。图17D显示了典型的MFField(列表形式)。图17E显示了典型的MFField(矢量形式)。图18A显示了典型的Routes(列表形式)。图18B显示了典型的Routes(矢量形式)。图18C显示了典型的Route。图19A显示了典型的odsm二进制块。图19B显示了典型的odsm二进制示例。图20A显示了典型的ObjectDescriptorUpdate命令。图20B显示了典型的ObjectDescriptorRemove命令。图21A显示了典型的-二进制对象描述符。图21B显示了典型的-二进制EsIdRef描述符。图22显示了本发明设想的典型的MPEG-4中间到XMT-A文件转换器。图23A显示了典型的mp4file文档。图23B显示了典型的mp4fiods元素。图24A显示了典型的mdat元素。图24B显示了典型的sdsm元素。8图24C显示了典型的odsm元素。图24D显示了典型的mediaFile元素。图25A显示了典型的odsmChunk元素。图25B显示了典型的odsmSample元素。图25C显示了odsm画command元素。图26A显示了典型的trak元素。图26B显示了典型的stbl元素。图27显示了典型的ES—Descr。图28A显示了典型的mp4bifs文档。图28B显示了典型的mp4bifscommandFrame元素。图29A显示了典型的mp4bifsbifsCommand元素。图29B显示了典型的mp4bifsReplaceScene元素。图30A显示了典型的mp4bifsoriginalNode元素。图30B显示了典型的mp4bifsConditionalNode元素。图30C显示了典型的mp4bifsReusedNode元素。图31A显示了典型的Qtlnfo结构。图31B显示了典型的Mp4flnitObjectDescr元素。图31C显示了典型的mdat结构。图31D显示了典型的MoovHeader元素。图32A显示了典型的track结构。图32B显示了典型的TrackHeader结构。图32C显示了典型的TrackMedia结构。图32D显示了典型的TrackEdit结构。图32E显示了典型的EditList结构。图32F显示了典型的EditSegment结构。图32G显示了典型的TrackReference结构。图32H显示了典型的Mpod结构。图321显示了典型的UserData结构。图32J显示了典型的cprt结构。图31D显示了典型的MoovHeader元素。图33A显示了典型的MediaHeader结构。图33B显示了典型的Handler结构。图33C显示了典型的Medialnfo结构。图33D显示了典型的MediaDatalnfo结构。图33E显示了典型的DataRefTable结构。图33F显示了典型的dataRef结构。图34A显示了典型的SampleTables结构。图34B显示了典型的采样表结构。图34C显示了典型的SampleSizeTable结构。图34D显示了典型的SampleToChunk结构。图34E显示了典型的TimeToSample结构。图34F显示了典型的SampleDescription结构。图35显示了典型的mp4文件解释流程图。图36显示了典型的mdat原子处理流程图。图37显示了典型的moov原子处理流程图。图38显示了典型的trak原子处理流程图。图39显示了典型的trak媒体原子处理流程图。图40显示了典型的媒体信息原子处理流程图。图41显示了典型的采样表原子处理流程图。图42显示了构成以Qtlnfo数据结构表示的媒体数据原子的xml表示的典型流程图。图43显示了典型的媒体数据处理流程图。图44显示了典型的查找流式类型的流程图。图45显示了典型的查找解码器配置描述符的流程图。图46显示了典型的获取标记大小流程图。图47显示了从odsm数据流创建xml表示的典型流程图。图48显示了典型的解码odsm块流程图。图49显示了典型的解码OdUpdate流程图。图50显示了典型的decodeEsIdRef过程流程图。图51显示了创建媒体文件和表示mdat原子的典型流程图。图52显示了典型的SdsmDataToXml过程流程图。图53显示了典型的解码odsm块过程流程图。图54显示了典型的解码插入命令过程流程图。图55显示了典型的解码删除命令过程流程图。图56显示了典型的解码替换命令过程流程图。图57显示了典型的解码SFNode过程流程图。图58显示了创建moov原子的xml表示的典型流程图。图59显示了创建XMT-A文档的典型流程图。图60显示了创建XMT-A标头的典型流程图。图61显示了处理Esldlnc元素的典型流程图。图62A显示了典型的streamType转换表。图62B显示了典型的objectType到objectTypelndication表。图63显示了创建表示ObjectDescriptor命令的"par"元素的典型流程图。图64显示了创建表示commandFrame命令的"par,,元素的典型流程图。图65显示了创建节点编号值和nodeld名称的表的典型流程图。标题表MPEG-4文本表示1.0MPEG-4中间格式文件2.0场景描述流(sdsm)3.0对象描述符流(odsm)4.0mp4-file文档5.0mp4-bifs文档6.0iimp4到xmta转换器7.0具体实施例方式本发明是用于将可扩展MPEG-4文本(XMT)格式(这里也称为"XMT-A文档"和"MPEG-4文本表示")转换为二进制编码的MPEG-4(mp4)格式(也称为"MPEG-4中间二进制格式,,)的方法、系统和计算机程序。本发明利用了实现从XMT-A到mp4的转换的新颖的方法,该方法需要相对少量的软件并只需要少量的资源。这里将参考图1-65对本发明进行描述。1.0MPEG-4文本表示"MPEG-4文本表示"包括表示多媒体内容的结构的"文本文件"。多媒体内容包括声音、静止图像、视频剪辑及其他元素的同步组合或序列。文本文件是包含字母、数字、以及标点的二进制代码的序列的电子数据结构。文本文件通常可以使用通常被称为"文本编辑器"的软件来进行解释。有许多文本编辑器的例子,包括基于Windows操作系统的计算机的被称为"NotePad.exe,,软件,以及使用统称为UNIX的各种操作系统的计算机的"vi"。Windows是位于华盛顿州Redmond的微软公司的注册商标。包括"MPEG-4文本表示"的文本文件类型#^称为"XMT-A"文件。在文本文件范围内,XMT-A文件是可扩展标记语言(XML)文件的示例。XML文件是基于WorldWideWebConsortium指定的原理的结构化文档(请参见http:〃ww.w3.org/TR/2000/REC-XML-20001006)。如国际标准化组织和国际电工委员会所说明的,XMT-A文件代表了XML文件的特定实施例(请参见TSO/IfCdocument14496-1:2000Amd.2,October2000,网址是http:Vmpeg.telecomitalialab.com/working—documents.htmandInternationalOrganizationforStandardization(ISO),1,ruedeVarembe,Casepostal56,CH-12"Geneva20,Switzerland)。XMT-A的每一部分的完整的说明非常长。如此,下面对XMT-A文件的描述限于描述本发明所需要的那部分规范。有关XMT-A文件结构的完整的说明,读者应该查阅引用的XMT规范文档。类似于任何XML文件,XMT-A文件包括"元素,,的层次集合。每一个元素都可以包含被称为"子元素"的从属元素。此外,每一个元素还可以拥有被称为"属性"的数据值集。每一个属性都有名称和值。特定属性名称和任何特定元素所拥有的可能的子元素取决于元素的类型。对于每一个属性值的解释取决于相应的属性名称和拥有该属性的元素。如图1A所示,XMT-A文件100包括两个主要部分,Header元素110和Body元素120。Header元素110包含被定义为InitialObjectDescriptor元素130的单个子元素。Body元素120包含一个或多个"par,,元素140作为子元素。InitialObjectDescriptor130有一个属性,ObjectDescriptorID(ODID),其值是字符串。如图IB所示,此元素具有两个子元素,Profiles元素150和Descr元素160。Profiles元素150没有子元素。Profiles元素150拥有多个属性,包括"includelnclineProfileLevdFlag,,、"sceneProfileLevelindkation"、"ODProfileLevellndication"、"audioProfileLevelIndication,,、"visualProfileLevelIndication,,和"graphksProfHeLevelIndication"。Descr元素160可以具有多种类型的子元素。对本发明必不可少的唯一类型是单个"esDescr,,元素170。esDescr元素170可以拥有一个或多个"ES—Descriptor,,子元素180,190。ES_Descriptor元素指定了"基本流"的某些属性,这是MPEG-4文档中定义的概念。下面指出了ES—Descriptor元素的结构。从属于InitialObjectDescriptor元素130的esDescr元素110可以拥有一个或两个ES—Descriptor元素180,l卯。在每一种情况下,都应该有被定义为"sdsm"或"场景描述流"的基本流的ES—Descriptor180。此外,还可以有被定义为"odsm,,或"对象描述符流,,的基本流的第二个ES—Descriptor190。odsrn的ES—Descriptor元素190只对于依赖于音频数据、视频数据,或sdsm内未指定的其他类型的媒体数据的XMT-A文件才需要。如图2A所示,每一个par元素140,200都包含一个或多个"par-child,,元素210。"par-child,,元素可以是另一个par元素、odsm命令或bifs命令。每一个par元素还包含名称为"begin"的属性。begin属性的值指定将要执行par元素内的odsm或bifs命令的时间。par元素的begin属性确定的时间值是相对于由任何父元素暗示的时间值计算的,Body元素120暗示开始时间为0。par-child元素210可以包含两种类型的odsm命令元素的实例,如图2B所示。这些实例包括ObjectDescriptorUpdate元素220和ObjectDescriptorRemove元素250。ObjectDescriptorUpdate元素220包含单个OD子元素230,而OD元素230包含单个ObjectDescriptor子元素240。下面将比较详细地描述ObjectDescriptor元素240。ObjectDescriptorRemove元素250具有一个属性,没有子元素。ObjectDescriptorRemove元素250的属性叫做"ODID"。par-child元素210可以包含三种类型的bifs命令元素的实例,如图3所示。这些实例包括Insert元素300、Delete元素310和Replace元素320。如图3A所示,Insert元素300可以具有"xmtaBifsNode,,子元素330或"ROUTE,,子元素340。Ddete元素310没有子元素。Replace元素320可以具有"xmtaBifsNode"350子元素,"ROUTE,,子元素360或"Scene,,子元素370。Scene元素具有"xmtaTopNode,,子元素380。Scene元素还可以具有一个或多个ROUTE子元素390。ROUTE元素340,390没有子元素。ROUTE元素340,390的属性包括"fromNode"、"fromField"、"toNode"和"toField"。术语"xmtaBifsNode元素"330代表大致100个定义的BIFSNode元素中的任何一个。这些元素种的每一个元素都具有图4所示的一般结构400。每一个xmtaBifsNode元素400都代表BIFSNode,这是MPEG-4系统规范ISO-IfC文档ISO/IfC14496-1:2001,2001年8月第9章中定义的二进制数据结构。有关》匕文斥当的j言息、4立于http:〃mpeg.telecomitalialab.com/documents.htm和InternationalOrganizationforStandardization(ISO),1,ruedeVarembe,Casepostale56,CH-12"Geneva20,Switzerland.每一个xmtaBifsNode元素400的元素标记都基于MPEG-4系统规范中定义的对应的NodeName。某些类型的xmtaBifsNode元素可以具有基于对应的BIFSNode的某些属性的从属(子)元素。这些子元素被称作nodeField元素410。每一个nodeField元素都可以具有一个或多个从属元素,而这些从属元素又可以进一步地包括xmtaBifsNode元素420。此方案可以递归地重复,以描述BIFS节点的层次树。对此层次结构的深度没有限制。每一个BIFS节点每一个都具有许多叫做"字段"的属性。这些字段中的每一个字段都具有定义的字段名称(字符串)和字段数据类型(布尔、整数、浮点等等)。其中一个字段数据类型是"Node"。Node之外的所有字段数据类型都由xmtaBifsNode元素400的名称类似的属性代表。具有类型"节点"的每一个字段都由xmtaBifsNode元素400的名称类似的子元素410代表。xmtaBifsNode元素400的每一个子元素410都可以具有一个或多个xmtaBifsNode元素420作为子元素(xmtaBifsNode父元素400的孙子元素)。XMT-ABIFSNode的XML表示如图5所示。每一个XMT-ABIFSNode元素都由NodeName标记500,570来标识,这些标记唯一地标识100个以上的可能的XMT-ABIFS节点类型中的某一种类型。每一个节点元素都可以是原始节点元素500或重新4吏用的节点元素570。在原始节点元素500的情况下,可以使用可选属性"DEF"510来提供特定节点的唯一的字母数字描述。如果提供了此属性,则该节点被分为"可重复使用的"类。原始XMT-ABIFS节点元素还拥有一组字段属性520,为类型NodeName的节点定义的每一个属性字段都具有一个字段属性,并具15有"node"或"buffer"之外的节点数据类型。这些属性被标识为图5A中的"fieldO"、"field2,,、"field3"和"fieW5"。这些属性中的每一个属性的实际名称都由在MPEG-4系统规范为"NodeName"类型的节点定义的对应的属性字段名称确定。指定给这些属性中的每一个属性的值都必须代表具有在MPEG-4系统规范中定义的节点数据类型的数据值(布尔、整数、浮点等等)。此外,原始XMT-ABIFS节点元素500可以具有一个或多个字段值子元素530,540,并具有对应于属性字段(具有数据类型"node,,或"buffer")的字段名的元素标记。每一个这样的字段值元素都具有开始标记530和结束标记540。这样的字段值元素530,540的示例由图5A中的元素标记<fieldl>...</fieldl〉和<field4>...</field4>代表。在具有数据类型"node,,的属性字段的情况下,字段值元素可以包含对应于BIFS-Node元素550的一个或多个子元素。这样的BIFS-Node子元素的示例由元素标记<NodeNamel.../>、<NodeName2.../〉和<NodeName3.../〉代表。在具有数据类型"buffer"的属性字段的情况下,字段值元素可以包含对应于BIFS命令元素300、310、320的一个或多个子元素。如果XMT-ABIFSNode元素包括任何字段值子元素,根据标准XML原则,Node元素将由</NodeName〉结束标记560结束。XMT-ABIFS节点元素的上述定义递归地应用到每一个从属BIFS节点元素(<NodeNamel〉,等等),从而允许创建节点的层次树。对于此XMT-ABIFS节点元素的树的深度没有限制。在重复使用的节点570情况下,节点元素只具有一个属性,而没有子元素。唯一的属性是"USE"属性580,其值590是节点ID字符串。作为USE属性的值提供的节点ID字符串必须匹配作为具有相同NodeName的原始节点元素500的DEF属性510指定的节点ID字符串。术语"xmtaT叩Node"代表允许作为Scene元素的子元素的xmtaBifsNode元素的定义的子集中的一个元素。如图6A所示,ObjectDescriptor元素240,600(ObjectDescriptorUpdate元素220的孙子元素)类似于上文所描述的InitialObjectDescriptor元素130。与InitialObjectDescriptor元素130不同,ObjectDescriptor元素240、600没有Profiles子元素150。类似于InitialObjectDescriptor元素130,ObjectDescriptor元素240、600具有"ObjectDescriptorID,,(ODID)属性606。典型的ObjectDescriptor元素240,600具有单个Descr子元素610,Descr元素610具有单个esDescr子元素620,esDescr元素620具有单个ES一Descriptor子元素630。Descr元素610,esDescr元素620,以及ES—Descriptor元素630类似于InitialObjectDescriptor元素130的对应的子元素160、170、180、跳ES—Descriptor元素180、190、630可以包含在ObjectDescriptor元素600或InitialObjectDescriptor元素130内。不论是哪一种情况,ES_Descriptor元素180、l卯、630都具有如图6B所示的结构640。ES—Descriptor元素640的"ES—ID,,属性636的值是字母数字字符串,该字符串对于每一个流是唯一的。ES—Descriptor640元素始终具有decConfigDescr子元素646和slConfigDescr子元素660。如果ES_Descriptor元素630、640从属于ObjectDescriptor元素600,贝'jES—Descriptor元素630、640还具有StreamSource子元素670。如果ES—Descriptor元素180、190、640从属于InitialObjectDescriptor元素130,贝'JES—Descriptor元素180、190、640没有StreamSource子元素670。decConfigDescr元素646具有DecoderConfigDescriptor子元素650。DecoderConfigDescriptor元素650具有多个属性,包括"streamType,,和"objectTypeIndication",表示父ES—Descriptor元素640是否代表音频、视频、sdsm、odsm或其他类型的媒体。根据streamType和objectTypelndication的值,DecoderConfigDescription元素650还可以具有decSpecificInfo子元素656。在sdsm(场景描述流)的ES—Descriptor元素180的情况下,DecoderConfigDescriptor650元素具有decSpecificInfo子元素656。如图6C所示,decSpecificInfo680元素具有BIFSConfig子元素686。BIFSConfig元素686拥有多个指定如何对BIFSNodes进行编码的属性。BIFSConfig元素686还拥有commandStream元素6卯,而commandStream元素690拥有"size,,元素696。SIConfig元素660具有SLConfigDescriptor子元素666。SLConfigDescriptor元素666具有一个名为"predefined,,的属性,没有子元素。"预定义"属性的值始终为"2"。StreamSource元素670具有一个属性"url",没有子元素。url属性的值指定文件名或Internet地址(url,统一资源定位器),该地址指出包含音频数据、视频数据或定义特定流的实际声音、图像等等的其他数据的力某体数据文件的位置。StreamSource元素670对于sdsm(场景描述流)或odsm(对象描述符流),因为这些流都是由XMT-A文件确定的。2.0MPEG-4中间格式文件MPEG-4中间格式文件是具有MPEG-4SystemsspecificationsdocumentISO-IfCdocumentISO/IfC14496-1:2001,August2001的第13章中定义的结构和组成的电子数据的一种形式。这种形式的电子数据结构是通常被称为"二进制文件"的示例,因为它由二进制数据值的序列组成,这些二进制数据值不局限于字母、数字和标点的表示。这就允许比诸如XMT-A文件之类的典型的文本文件所提供的更加紧凑的数据结构。具有由MPEG-4中间格式定义的结构的电子数据的存储的形式被称作"mp4二进制文件"。与XMT-A文件不同,mp4二进制文件不能被大多数文本编辑软件解释。MPEG-4中间格式是从由AppleComputers,Inc.于1996年定义的QuickTime文件格式派生而,并可以从http:〃developer.appIe.com/techpubs/quicktime/qtdevdocs/REF/refFileFormat96.htm和http:〃developer.apple.com/techpubs/quicktime/qtdevdocs/PDF/QTFileFormat.pdf下载。QuickTime是AppleComputer,Inc.的注册商标。>由于其QuickTime继承性,MPEG-4中间格式保留了许多从QuickTime规范派生的特征。这些特征包括"原子"作为数据结构的单元的概念。每一个原子都具有两个部分,标头和主体。标头包含原子大小值,该值指定构成原子的字节的数量,包括标头。标头还包含指定原子的类型的atomld。原子的正文主体包含原子所携带的数据。此数据可以包括从属原子。在其基本形式中,原子具有由四个字节组成的原子大小值(无符号整数)和也包括四个字节的atomld(字符)。在MPEG-4规范中还定义了具有原子大小值和具有4个以上字节的atomld值的原子的扩展形式。如图7A所示,mp4二进制文件700由一个或多个"mdat,,原子706和一个"moov,,原子712组成。moov原子712可以在mdat原子706前面,也可以在其后面。如图7B所示,每一个mdat原子718都包括原子大小值724,后面有四字节atomld"mdat"730和叫做"块"736的数据块序列。如图7C所示,每一个块742都由媒体数据"样本"748的序列组成。每一个样本748都指定了与单个媒体流的特定时间点关联的数据块。单个块内的所有样本都代表相同的媒体数据流。从mdat原子700的检查不一定可能标识单个样本748或块736、742。每一个样本748和块736、742都可以使用存储在mp4二进制文件内某处的表来进行标识。如图7D所示,moov原子754包括原子大小值760,后面有四字节atomld"moov,,766,和包括"mvhd,,(moov标头)原子772、"iods,,(初始对象描述符)原子778,以及一个或多个"trak"原子790的多个从属原子。"moov"原子712、754包括每一个数据流的一个"trak"原子790,包括sdsm(场景描述流)和odsm(对象描述符流),如果存在的话。"moov"原子712、754还可以包括可选的"udta,,(用户数据)原子784。"udta"原子784可以用来在MP4二进制文件中嵌入诸如版权消息之类的可选信息。mvhd原子772包括原子大小值,后面有四字节atomld"mvhd"和许多数据值,包括时间和日期戳,时间标度值,以及文件持续时间值。mvhd原子的原子大小的值始终为108。时间和日期戳表示创建文件的时间。时间标度值指出用于表示文件的时间值的每秒钟的滴答声的数量。文件持续时间值指出呈现文件在中的材料所需要的总时间(采用时间标度值指定的时间单位)。如图8A所示,iods原子800包括原子大小值804,后面有四字节atomld"iods"808、8-位版本值812、24-位标志值816,以及Mp4flnitObjDescr数据结构820。如图8B所示,Mp4flnitObjDescr数据结构824包括一字节Mp4—IOD—TAG值828、序列数据块中的字节的数量832、10-位ObjectDescriptorlD836、两个标志位840、844,四个预留的位848和五个配置文件级别指示值852、856、860、864、868。配置文件级别指示值后面有一个或两个MPEG-4ES—ID—Inc数据结构872。一个ES—ID—Inc结构指出对应于sdsm(场景描述流)的trak原子790的ES—ID值。第二个ES—ID—Inc结构(如果存在的话)指出对应于odsm(对象描述符流)的trak原子790的ES—ID。第二个ES—ID—Inc结构只有在存在odsm的情况下才存在。如图8C所示,每一个ES_ID—Inc数据结构都包括一字节ES—ID—IncTag值880、序列数据中的字节的数量(始终为4)和32-位ES—ID值888。如图9A所示,每一个trak原子900包括原子大小值903,后面有四字节atomld"trak,,906、"tkhd,,(轨道标头)原子910,以及"mdia"(媒体)原子912。在表示odsm(对象描述符流)的trak原子的情况下,trak原子还包括"tref,(轨道引用)原子940。在具20有延迟启动的轨道的情况下,提供了"edts,,(编辑列表)原子945,以指出何时开始轨道。mdia原子912包括"mdhd"(媒体标头)原子915、"hdlr,,(处理程序)原子918、"minf"(媒体信息)原子920、"stbl,,(样本表)原子933,以及媒体信息标头原子936。标记"Amhd,,代表多个媒体信息标头原子类型中的任何一个,包括"nmhd"(对于sdsm和odsm轨道)、"smhd"(对于音频轨道)、"vmhd"(对于视频轨道)等等。tkhd原子910、mdhd原子915,以及hdlr原子918包含许多数据值,包括trackld编号、时间和日期戳、媒体时间标度和媒体持续时间值。每一个轨道都具有其自己的时间标度,该标度可以不同于在mvhd原子772中指定的全局时间标度。如图9B所示,样本表原子950包括原子大小值954,后面有四字节atomld"stb1,,957和一系列样本表原子960、963、966、970、974、978。各种样本表原子可以采取任何顺序。其中包括"stsc"(样本到块表)原子960、"stts,,(时间到样本表)原子963、"stco"(块偏移表)原子966、"stsz"(样本大小表)原子970、可能的"stss"(同步样本表)原子974,以及"stsd,,(样本描述表)原子978。这些样本表原子中的每一个都包含关联的mdat原子706、718中存储的二进制媒体数据736、748的数据描述属性。样本到块表原子(stsc原子)960包括原子大小值、四字节atomld("stsc,,)、32-位无符号整数(numStscEntries),以及样本到块数据记录的序列。numStscEntries的值指定了样本到块数据记录的序列中的条目的数量。每一个样本到块数据记录都包括三个32-位无符号整数,它们指定了开始块编号、每个块的样本数量,以及样本描述索引。样本描述索引是对样本描述表978中的条目的索引。每个块的样本的数量指定了由开始块编号指定的块736,以及下一个条目指定的开始块前面的所有随后的块中的样本748的数量。时间到样本表原子(stts原子)963包括原子大小值、四字节atomld("stts,,)、32-位无符号整数(numSttsEntries),以及时间到样本数据记录的序列。numSttsEntries的值指定了时间到样本数据记录的序列中的条目的数量。每一个时间到样本数据记录都包括两个32-位无符号整数,这些整数指定样本计数和以轨道时间刻度单位表示的样本持续时间。样本计数值指定了具有对应的样本持续时间的连续的样本748的数量。块偏移表原子(stco原子)966包括原子大小值、四字节atomld("stco,,)、32-位无符号整数(numStcoEntries),以及块偏移值的序列。numStcoEntries的值指定了块偏移值的序列中的条目的数量。此序列中的每一个条目都包括一个32位无符号整数,该整数指定了mp4文件的开始和mdat原子719内的对应的块736的开始之间的字节的数量。样本大小表原子(stsz原子)970包括原子大小值、四字节atomld("stsz,,)和32-位无符号整数(iSampleSize),该整数指定了与此trak原子900关联的所有媒体数据样本748的大小。如果与此trak原子关联的媒体数据样本的大小不全部相等,则iSampleSize的值被指定为零,后面有32位无符号整数(numStszEntries)和样本大小值的序列。numStszEntries的值指定了样本大小值的序列中的条目的数量。此序列中的每一个条目都包括一个32位无符号整数,该整数指定了与此trak原子900关联的媒体数据718内的对应的样本748中的字节的数量。块偏移表原子(stco原子)966包括原子大小值、四字节atomld("stco")、32-位无符号整数(mimStcoEntries),以及块偏移值的序列。numStssEntries的值指定了样本索引值的序列中的条目的数量。此序列中的每一个条目都包括一个32位无符号整数,该整数指定了"随机访问样本,,的样本索引。随机访问样本索引标识对应于与此trak原子900关联的媒体数据中的媒体播放器可以开始处理媒体数据而不考虑任何前面的样本的点的媒体数据样本748。此表中的样本索引值必须单调地增大。样本描述表原子(stsd原子)978包括原子大小值、四字节atomld("stsd,,)、32-位无符号整数(numStsdEntries),以及样本描述数据记录的序列。mimStsdEntries的值指定了样本描述数据记录的序列中的条目的数量。每一个样本描述数据记录都指定用于对由样本到块数据记录中的对应的索引标识的媒体数据样本进行编码的手段。样本描述数据记录的序列通常具有单个条目(numStsdEntries=1),该条目指定媒体的类型(音频、视频、sdsm、odsm),用于音频和视频样本的压缩算法等等。每一个样本描述表条目都包含在"mp4",原子982内,其中"mp4",是"mp4s,,(对于sdsm和odsm样本)、"mp4a"(对于音频样本)和"mp4v"(对于视频样本)的通用替代。每一个"mp4w,原子982都包含"esds"(基本流描述符)原子986,而每一个esds原子986都包含MPEG-4基本流描述符(Es_Descr)数据结构990。MPEG-4基本流描述符1000的结构如图10A所示。此数据结构包括一字节标记(ES—DescrTag)1004,后面有数据结构的其余部分的字节数量的指示1008、16位ES—ID值(通常为零)1012、三个1位标志(streamDependenceFlag、URL—Flag和OCRstreamFlag)1016,以及5-位流优先值1020。如果三个标志1016中的任何一个都为非零,那么其他数据值(没有显示)可以跟在流优先值1020之后。这些可选数据值不是本发明所需的。流优先值1020后面有解码器配置描述符数据结构1024和同步层配置描述符数据结构1028。解码器配置描述符1024、1032的结构如图10B所示。此数据结构包括一字节标记(DecoderConfigDescrTag)1036,后面有数据结构的其余部分的字节数量的指示1040,和一系列数据值objectType1044、streamType1048、upStream位1052、预留位1056、bufferSizeDB1060、maxBitrate1064和avgBitrate1068。这些值后面可以有依赖streamType和objectType的解码器特定的信息数据结构1072。解码器特定的信息数据结构1072是sdsm所必需的,但不是odsm所必需的。大多数音频和视频媒体数据流在解码器配置描述符1032内23还具有解码器特定的信息数据结构。解码器特定的信息数据1072、1076的结构如图10C所示。此数据结构包括一字节标记(DecoderSpecificInfoTag)1080,后面有数据结构的其余部分的字节数量的指示1084。其余字节取决于objectType和streamType。在sdsm(场景描述流或BIFS)的情况下,解码器特定的信息1072、1076包括用于对nodeID值进行编码的位数和用于对routeID值进行编码的位数的指示。这些值中的每一个值都由5-位无符号整数代表。同步层配置描述符1028、1088的结构如图10D所示。此数据结构包括一字节标记(SLConfigDescrTag)1090,后面有数据结构的其余部分的字节数量的指示1094(始终为1),单个数据字节(值2"预定义")1098,该字节指出预定义的配置将用于同步层。3.0场景描述流(sdsm)无论是XMT-A规范还是MPEG-4中间文件规范都没有确定用于对特定类型的音频和视频数据流进行编码或解码的手段,因此,这里将不涉及如何对这些流进行编码的细节。XMT-A文档包含有关流描述流(sdsm)和对象描述流(odsm)的内容的详细信息。因此,每一个XMT-A文档都与MPEG-4中间文件内包含的sdsm和odsm流密切相关。本节将描述sdsm数据的结构,下一节将描述odsm数#居的结构。类似于任何其他媒体数据流,sdsm数据由一个或多个块组成,而每一个块每一个都由一个或多个样本组成。如图ha所示,sdsm二进制块1100内的每一个样本都被定义为"命令帧,,1110。每一个命令帧1110都是字节对齐的。如图11B所示,每一个命令帧1110都包括一个或多个"BIFS命令,'1120。"BIFS,,代表"BInaryFormatforStreams"(流的二进制格式)。每一个BIFS命令1120后面都有继续位1130、1140。如果继续位的值是(1)1130,则另一个BIFS命令跟随其后。否则1140,继续位后面跟足够数量的空值填充位1150,以完成最后一个字节。命令帧中的第一个BIFS命令除外,单个BIFS命令1120通常不是字节对齐的。如图12所示,有四种类型的BIFS命令"insertion"、"deletion"、"replacement"以及"scenereplacement"。BIFS插入命令1200包括两位插入代码(值-"OO")1206,后面有两位参数类型代码1210和插入命令数据1216。BIFS删除命令1220包括两位删除代码(值="01")1226,后面有两位参数类型代码1230和删除命令数据1236。BIFS替换命令1240包括两位替换代码(值="10")1244,后面有两位参数类型代码1250和替换命令数据1260。BIFS场景替换命令1270包括两位场景替换代码(值="11")1280,后面有BIFS场景数据结构1290。如图13所示,有三种类型的BIFS插入命令,(a)NodeInsertion命令,(b)IndexedValueInsertion命令,以及(c.RouteInsertion命令。插入命令的类型是由参数类型值1210确定的。NodeInsertion命令1300包括两位插入代码(值="00")1304,后面有两位参数类型代码(值="01",类型=Node)1308、nodeID值1312、两位插入位置代码1316,以及SFNode数据结构1324。如果插入位置代码1316的值为零,则8位位置值1320跟随在插入位置代码1316之后。nodelD值1312指定BIFS命令中的某处定义的一组可更新的节点中的一个节点。用于对此nodeID及其他nodeID值进行编码的位数在sdsm流的解码器特定的信息1072中指定。下面将说明SFNode数据结构1324的结构。NodeInsertion命令1300包括两位插入代码(值-"OO,,)1304,后面有两位参数类型代码(值="01",类型-Node)1308、nodeID值1312、两位插入位置代码1316,以及字段值数据结构1356。如果插入位置代码1348的值为零,则8位位置值1352跟随在插入位置代码1348之后。nodeID值1340指定BIFS命令中的某处定义的一组可更新的节点中的一个节点。用于对nodeID值1340进行编码的位数在sdsm流的解码器特定的信息1072中指定。inFieldID值1344标识由nodeID1340的值指定的BIFS节点的其中一个数据字段。用于对inFieldID值1344进行编码的位数取决于MPEG-4系统规范中所包含的表。字段值数据结构的内容取决于指定的BIFS节点的指定的数据字段的字段数据类型(布尔、整数、浮点、字符串、节点等等)。在简单时可以是一位,复杂时可以是SFNode数据结构。每一个BIFS节点的每一个数据字段的字段数据类型在MPEG-4系统规范中包含的表中指定。RouteInsertion命令1360包括两位插入代码(值="00")1364,后面有两位参数类型代码(值="11,,,类型=Route)1368、"isUpdateable,,位1372、departureNodeID值1380、departureFieldID值1384、arrivalNodeID值1388,以及arrivalFieldID值1392。如果"isUpdateable"位的值为(1),则routeID值1376跟随在"isUpdateable,,位1372之后。用于对departureNodeID值1380和arrivalNodeID值1388进行编码的位数在sdsm流的解码器特定的信息1072中指定。用于对departureFieldID值1384进行编码的位数和用于对arrivalFieldID值1392进行编码的位数取决于MPEG-4系统规范中包含的表。如图14所示,有三种类型的BIFS删除命令(a)NodeDeletion命令,(b)IndexedValueDeletion命令,以及(c.RouteDeletion命令。删除命令的类型是由参数类型值1230确定的。NodeDeletion命令1400包括两位删除代码(值="00")1406,后面有两位参数类型代码(值="00",类型=Node)1412和nodeID值1418。nodeID值1418指定BIFS命令中的某处定义的一组可更新的节点中的一个节点。用于对nodeID值1418进行编码的位数在sdsm流的解码器特定的信息1072中指定。IndexedValueDeletion命令1424包括两位删除代码(值="01")1430,后面有两位参数类型代码(值="10",类型=IndexedValue)1436、nodeID值1442、inFieldID值1448,以及两位删除位置代码1454。nodelD值1418指定BIFS命令中的某处定义的一组可更新的节点中的一个节点。用于对nodeID值1418进行编码的位数在sdsm流的解码器特定的信息1072中指定。RouteDeletion命令1466包括两位删除代码(值="10,,)1472,后面有两位参数类型代码(值="11,,,类型=Route)1478和routeID值1484。routeID值1484指定BIFS命令中的某处定义的一组可更新的路由中的一个路由。用于对routeID值1484进行编码的位数在sdsm流的解码器特定的信息1072中指定。如图15所示,有四种类型的替换命令,(a)NodeReplacement命令,(b)FieldReplacement命令,(c.IndexedValueReplacement命令,以及(d)RouteReplacement命令。替换命令的类型是由参数类型值1250确定的。NodeR印lacement命令1500包括两位替换代码(值="10,,)1504,后面有两位参数类型代码(值="01",类型-Node)1508、nodeID值1510,以及SFNode数据结构1514。nodeID值1510指定BIFS命令中的某处定义的一组可更新的节点中的一个节点。用于对nodeID值1510进行编码的位数在sdsm流的解码器特定的信息1072中指定。下面将说明SFNode数据结构1514的结构。FieldReplacement命令1520包括两位替换代码(值="10")1524,后面有两位参数类型代码(值="01",类型=Field)1528、nodeID值1530、inFieldID值1534,以及字段值数据结构1538。nodeID值1530指定BIFS命令中的某处定义的一组可更新的节点中的一个节点。用于对nodeID值1530进^f亍编码的位数在sdsm流的解码器特定的信息1072中指定。inFieldID值1534标识由nodeID1530的值指定的BIFS节点的其中一个数据字段。用于对inFieldID值1534进行编码的位数取决于MPEG-4系统规范中所包含的表。IndexedValueReplacement命令l540包括两位替换代码(值="10")1544,后面有两位参数类型代码(值="10",类型=IndexedValue)1548、nodeID值1550、inFieldID值1554、两位替换位置代码1558,以及字段值数据结构1564。如果替换位置代码1558的值为零,则8位位置值1560跟随在替换位置代码1558之后。nodeID值1550指定BIFS命令中的某处定义的一组可更新的节点中的一个节点。用于对nodeID值1550进行编码的位数在sdsm流的解码器特定的信息1072中指定。inFieldID值1554标识由nodeID1550的值指定的BIFS节点的其中一个数据字段。用于对inFieldID值1554进行编码的位数取决于MPEG-4系统规范中所包含的表。RouteReplacement命令1570包括两位替换代码(值="10")1574,后面有两位参数类型代码(值-"ll",类型=Route)1578、routeID值1580、departureNodeID值1584、departureFieldID值1588、arrivalNodeID值15卯,以及arrivalFieldID值1594。routeID值1580指定BIFS命令中的某处定义的一组可更新的路由中的一个路由。用于对routeID值1580进行编码的位数在sdsm流的解码器特定的信息1072中指定。用于对departureNodeID值1584进行编码的位数和用于对arrivalNodeID值15卯进行编码的位数在sdsm流的解码器特定的信息1072中指定。用于对departureFieldID值1588进行编码的位数和用于对arrivalFieldID值1594进行编码的位数取决于MPEG-4系统规范中包含的表。如图12D所示,ReplaceSceneBIFS命令1270包括两位场景替换代码(值="11,,)1280,后面有BIFS场景数据结构1290。如图16所示,BIFS场景数据结构1600包括6位预留字段1610、两个一位标志(USENAMES1620和protoList1630)、SFTopNode数据结构1640,以及一位标志(hasRoutes)1650。如果protoList标志1630为真(1),那么,MPEG-4系统规范中定义的其他数据跟随protoList标志。SFTopNode数据结构1640是如图17所示的SFNode数据结构的特殊情况。如果hasRoutes标志1650为真(1),那么,Routes数据结构1660跟随hasRoutes标志。Routes数据结构的结构如图18所示。如图17A、17B和17C所示,SFNode数据结构可以具有三种形式之一(a)重复使用、(b)屏蔽节点,以及(c.列表节点。所有三种形式都以一位标志(isReused)开始。在重复使用的SFNode1700的情况下,isReused标志的值为"l"(真)1704,SFNode数据结构的其余部分包括nodeIDref值1708。nodeIDref1708的值必须匹配sdsm数据中某处定义的可更新的SFNode的nodeID值。如果isReusedFlag为假(0)1712、1732,贝'jSFNode类型可以具有图17B和17C所示的两种形式中的一种,具体取决于maskAccess标志位1722、1742的值。不论是哪一种情况,SFNode的数据都包括本地节点类型值(localNodeType)1714、1734,—位标志(isUpdateable)1716、1736,以及第二个一位标志(maskAccess)1722、1742。用于对本地节点类型1714、1734进行编码的位数取决于MPEG-4系统规范中所指定的表。如果isUpdateable标志1716、1736为真(1),则nodeID值1718、1738跟随在isUpdateaWe标志之后。如果isUpdateable标志1716、1736为真(1),并且关联的BIFSScene数据结构1600中的USENAMES标志1620也为真(1),那么以零结束的字符串("name")1720、1740跟随在nodeID值1718、1738之后。如果maskAccess位为真(1)1722,则SFNode具有"屏蔽节点,,结构1710。在此情况下,如图17B所示,maskAccess位1722后面有屏蔽位1726的有序序列,BIFS节点的MPEG-4规范中定义的每一个nFields属性字段一个,节点类型由localNodeType1714的值给出。在其中这些屏蔽位中的某一个屏蔽位为真(1)的每一种情况下,屏蔽位后面有根据由localNodeType1734确定的字段数据类型(整数、布尔、字符串、节点等等)编码的二进制字段值1728,字段编号(屏蔽位的序列内的位置),以及MPEG-4规范中定义的表。如果maskAccess位为假(0)1742,则SFNode具有"列表节点,,结构1730。在此情况下,如图17C所示,MaskAccess位1742后面有一个或多个字段引用记录。每一个字段引用记录都以一位结束标志1744、1750开始。如果结束标志为假(0)1744,则结束标志174429后面有为本地节点类型1734定义的属性字段的字段引用索引编号(fieldRef)1746,fieldRef值1746后面有根据由本地节点类型1734确定的字段数据类型(整数、布尔、字符串、节点等等)编码的二进制字段值1748和由fieldRef值1746指出的属性字段。用于对fieldRef值1746进行编码的位数由MPEG-4系统规范中定义的表确定。如果结束标志为真(1)1750,则字段值的列表结束。SFNode结构内包括的每一个属性字段值都可以包括单个数据值(SFField数据结构)或多个数据值(MFField数据结构)。每一个MFField数据结构都包含零个或多个SFField组件。如图17D和17E所示,基于isList位1766、1786的值,MFField结构有两种形式,列表形式1760和矢量形式1780。两种形式都以一位预留位1762、1782开始,后面有isList位1766、1786。如果isList位具有值(1)1766,则MFField数据结构具有列表形式1760。在此情况下,isList位1766后面有一位endFlag值1770、1772的序列。如果endFlag位的值是"0,,1770,则endFlag位后面有SFField数据结构1774。如果endFlag位的值为"1"1772,则MFField数据结构结束。如果isList位具有值(0)1786,贝'JMFField数据结构具有矢量形式1780。在此情况下,isList位1786后面有5位字段(nBits)1790,该字段指定下面的字段计数值(nFields)1792中的位数。后面有nFieldsSFField结构1796的序列。如MPEG-4系统规范中指定的表所示,每一个SFField值的结构都取决于与对应的属性字段关联的特定字段数据类型。例如,布尔字段包括单个位。MPEG-4系统规范中定义和描述了包括整数、浮点、字符串、SFNode的其他情况。BIFSScene数据结构1600的最后一个组件是可选的Routes数据结构1660。如图18A和18B所示,有两种形式的Routes数据结构,列表形式1900和矢量形式1830。两种形式的Routes数据结构都以一位列表标志1805、1835开始。如果列表标志的值为真(1)1805,则Routes数据结构具有列表形式1800。在此情况下,列表位1805后面有一个或多个Route数据结构1810,每一个Route数据结构1810后面有一位moreRoutes标志1810、1820。如果moreRoutes标志的值为真(1)1810,则另一个Route数据结构1810跟随其后。如果moreRoutes标志的值为假(0)1820,则Routes数据结构1800结束。如果Routes数据结构中的列表标志的值为假(0)1835,则Routes数据结构具有矢量形式1830。在此情况下,列表位1835后面有五位nBits字段1840。NBits字段中包含的无符号整数值指定了用于对下面的numRoutes值1845进行编码的位数。NumRoutes值1845中编码的无符号整数指定了跟随在numRoutes值1845之后的Route数据结构1850的数量。如图18C所示,Route数据结构1860包括一位标志(isUpdateable)1865、outNodeID值1880、outFieldRef值1885、inNodelD值1890和inFieldRef值1895。如果isUpdateable标志1865的值为真(1),那么isUpdateable标志1865后面有routeID值1870。如果isUpdateable标志1865的值为真(1),则对应的BIFSScene数据结构1600中的USENAMES标志1620的值也为真(1),routeID值1870后面有空值结束字符串(routeName)1875。用于对outNodeID值、inNodelD值和routeID值进行编码的位数在sdsm流的解码器特定的信息1072中指定。用于对outFieldRef和inFieldRef进行编码的位数由MPEG-4系统规范中定义的表确定。4.0对象描述符流fodsm)类似于任何其他MPEG-4基本流,odsm(对象描述符流)包含在一个或多个块736的序列中。如图19所示,每一个odsm块1900都由odsm样本1920的序列组成,而每一个odsm样本1940都由odsm命令1960的序列组成。每一个odsm块1900中的odsm样本1920的数量由对象描述符流的trak原子790、90031中的样本到块表原子(stsc.960的内容确定。每一个odsm块1940中的odsm命令1960的数量由对象描述符流的trak原子7卯、900中的样本大小表原子(stsz)970确定。有两种可能的odsm命令ObjectDescriptorUpdate命令和ObjectDescriptorRemove命令。如图20A所示,ObjectDescriptorUpdate命令2000包括一字节ObjectDescriptorUpdateTag2010,命令其余部分中的字节数量的指示(numBytes)2020,以及ObjectDescriptors2030的序列。图21中概述了ObjectDescriptor的结构。如图20B所示,ObjectDescriptorRemove命令2040包括一字节ObjectDescriptorRemoveTag2050,命令其余部分中的字节数量的指示(numBytes)2060,objectDescriptorld值2070的序列,以及2到6个填充位2080。每一个numBytes值2020、2060都指定了odsm命令的其余部分的字节数量。如果numBytes的值小于128,则此值以单字节进行编码。否则,numBytes的值以大小字节的序列进行编码。每一个大小字节中的高阶位指出是否有另一个大小字节跟随其后。如果此高阶位是"l",那么,会有另一个大小字节跟随其后。每一个大小字节中的其余七个位都指定了numBytes的产生的无符号整数值。每一个objectDescriptorld值2070都以10位进行编码,ObjectDescriptorRemove命令2040中的10位objectDesciptorld值的序列被包装到字节的序列中。如果objectDescriptorld值的数量不是4的倍数,则两个、四个或六个空值位2080跟随在最后一个objectDescriptorld值之后以填充此命令中的最后一个字节。如图21A所示,ObjectDescriptorUpdate命令2000内的ObjectDescriptor2100包括一字节MP4_OD—Tag2108,后面有numBytes值2116、十位ObjectDescriptorID值2124、一位URL—Flag值2132、五位预留字段(Oxlf)2140,以及ES—Descr数据结构或EsIdRef数据结构2148中的某一个。在此形式的ObjectDescriptor中,URL—Flag2132的值始终为假(0)。NumBytes值2116指定了包括对象描述符的其余部分的字节的数量,以为ObjectDescriptorUpdate命令2000或ObjectDescriptorRemove命令2040中的numBytes值2020、2060同样的方式进行编码。ES—Descr数据结构1000的结构如图10A所示。如图21B所示,EsIdRef数据结构2160包括一字节ES_ID_RefTag2170、numBytes值2180,以及16位基本流ID(ES—ID)值21卯。在此情况下,numBytes的值始终为"2",此值作为8位整数来指定。图22—般地显示了本发明的操作。过程2200基于MPEG-4中间文件2210的内容创建XMT-A文档2220和一组力某体数据文件2230。输入MPEG-4中间文件2210也可以-陂称为"mp4二进制文件,,或"mp4文件"。输出XMT-A可以包括基于XMT-A规范ISO/IfC14496-1:2000Amd.2的文本文件或一组代表这样的文件的数据结构。输出媒体数据文件2230代表mp4文件2210内包含的音频、视频和图像数据。每一个输出媒体数据文件都由输出XMT-A文档2220包含的StreamSource引用670标识。媒体数据文件2230的数量可以为零。由本发明2200执行的逻辑操作可以(1)作为在计算机系统上运行的计算机实现的步骤的序列和/或(2)作为计算系统内的互相连接的机器模块来实现。实现是依据应用本发明的系统的性能要求来进行选择的。相应地,构成了这里所描述的本发明的实施例的逻辑操作也被称为操作、步骤或模块。此外,本发明执行的操作也可以是作为计算机可读的介质来实现的计算机可读的程序。作为示例,而不作为限制,计算机可读的介质可以包括计算机存储介质和通信介质。计算机存储介质包括以存储诸如计算机可读的指令、数据结构、程序模块或其他数据之类的信息的任何方法或技术实现的易失性和非易失性、可移动和非可移动介质。计算机存储介质包括,但不仅限于,RAM、ROM、EEPROM、flash存储器或其他存储技术、CD-ROM、数字通用光盘(DVD)或其他光存储器、盒式磁带、磁带、磁盘存储器或其他磁存储设备,或可以被用来存储所希望的信息并可以被计算机访问的任何其他介质。通信介质通常包含计算机可读的指令、数据结构、程序模块或诸如载波或其他传输机制之类的经过调制的数据信号中的其他数据,并包括任何信息传送介质。术语"经过调制的数据信号"是指其一个或多个特征以这样的方式设置或更改以便对信号中的信息进行编码的信号。作为示例,而不作为限制,计算机可读的介质可以包括计算机存储介质和通信介质。上述任何组合也应该包括在计算机可读的介质范围内。如图22所示,创建输出XMT-A文档2220和媒体数据文件2230的过程分两个步骤完成。在第一个步骤中,mp4文件到中间文档转换器2240解释输入mp4文件2210,并创建一组中间文档2245和一组媒体数据文件2230。该组中间文档2245包括mp4-file文档2250和mp4-bifs文档2260。在第二个步骤中,中间文档到XMT-A转换器2270基于中间文档2245生成输出XMT-A2230。将此过程2200分为这两个步骤的一个理由在于,尽管输入mp4文件2210代表了由输出XMT-A文档2220和媒体数据文件2230代表的相同信息,但是,输入mp4文件的组织和结构大大不同于输出XMT-A文档的组织和结构。例如,mp4文件2210的结构与Quicktime媒体数据文件的结构密切相关,但是,XMT-A文档2220的结构却没有Quicktime媒体数据文件的特征。XMT-A文档2220包含场景描述流(sdsm)和对象描述符流(odsm)的描述,但是这些可以以任何顺序混合在一起。Mp4文件2210还包含sdsm和odsm的描述,但是这些描述中的每一个描述都可以作为单独的在时间上排序的样本流。由于mp4文件2210的结构和组织与XMT-A文档2220的结构和组织显著不同,因此,将基于mp4文件2210创建XMT-A文档2220的过程分为两个步骤是有利的(a)解码,和(b)重新组织。在第一个步骤中,mp4文件内编码的二进制信息被解释并被用于创建一组表示mp4文件的结构和组织的结构化文档sdsm和odsm。任何其他二进制数据只被复制到新媒体数据文件中。此步骤可以在不考虑XMT-A文档的定义的情况下执行。在第二个步骤中,使用在第一个步骤中创建的结构化文档来创建XMT-A文档。此步骤可以在不考虑此信息在mp4文件以二进制形式表示的方式的情况下执行。为了实现将基于mp4文件2210创建XMT-A文档2220的过程分为这两个步骤2240、2270的目标,必须定义新的结构化文档2245,这些文档表示(a)mp4文件的结构和组织,(b)如在mp4文件中表示的那样的流描述流的结构和组织(sdsm),以及(c.如在mp4文件中表示的那样的对象描述符流(odsm)的结构和组织。这可以通过定义三种新的结构化文档类型来完成,一个表示mp4文件,一个表示sdsm,再有一个表示odsm。其中,表示mp4文件和sdsm所要求的结构化文档相对比较复杂,而表示odsm所要求的结构化文档非常简单。因此,将odsm的描述包括到用于表示mp4文件的结构化文档中是方便的。因此,在本发明的此实施例中,引入了两个新的结构化文档,一个用于mp4文件和odsm,一个用于sdsm。这两个结构化文档净皮标识为mp4-file文档2250和mp4-bifs文档2260。这些文档统称为中间文档2245。应该注意,为方便起见,已经选择了利用两种类型的结构化文档。通过定义三种类型的结构化文档(仅mp4-文件、仅odsm,以及仅sdsm),可以实现相同的目标,或者,可以将所有三种类型的信息合并到单个复合结构化文档中。在本发明的一个实施例中,为表示重新组织的信息而创建的特定的结构化文档类型是基于"XML"(可扩展标记语言)技术进行的。这是有利的,因为(a)XMT-A文档的定义基于XML技术,(b)XML技术提供了表示结构化文档的标准化手段,以及(c)有标准化的软件工具用于基于XML技术处理结构化文档。如此,在本发明的一个实施例中,重新组织XMT-A文件中包含的信息的过程被简化为XML到XML的转换。此外,由于存在标准化的软件用于处理XML文件,因此,可以管理输入XMT-A文档以及中间文档,而不必开发新的专门软件来执行相同的功能。虽然此实施例是基于使用XML技术来表示中间文档,但是,可以创建本发明的使用其他类型的结构化文档的其他实施例。下列材料描述了(1)mp4-file文档2250的结构,(2)mp4-bifs文档2260的结构,XMT-A到中间文档转换器2240的操作,以及(4)中间文档到mp4文件转换器2270的操作。5.0mp4-file文档如图23A所示,mp4-file文档2300的结构非常类似于mp4二进制文件700的结构。mp4file文档2300包含一组一个或多个々某体数据(mdat)元素2310和单个moov元素2320。moov元素2320包括mp4fiods(mp4文件初始对象描述符)元素2330和一个或多个trak元素2350。moov元素2320还可以包括可选的用户数据(udta)元素2340。udta元素2340可以用来包括诸如版权声明之类的信息。mvhd原子772的属性由moov元素2320的属性来表示。如图23B所示,mp4fiods元素2360拥有objectDescriptorID属性2370。Mp4fiods元素2360还拥有多个其他图23B中没有显示的属性。这些其他属性包括布尔属性"includeinlineProfilesFlag,,,和整数属寸生"sceneProfileLevelIndication,,、"ODProfileLevelIndication"、"audioProfileLevelIndication,,、"visualProfileLevelIndication,,和"graphicsProfileLevelIndication,,。Mp4fiods元素2360还包括一个或多个Esldlnc元素2380。每一个Esldlnc元素2380都拥有匹配相关的trak元素2340的trackID属性的trackID属性2390。如图24A所示,每一个mdat元素240都可以包含一个或多个下列元素sdsm元素2410、odsm元素2420,以及mediaFile元素2430。这些元素中的每一个元素都拥有匹配相关的trak元素2340的trackID属性的唯一"trackID,,属性。每一个mediaFile元素2430都具有"name"属性,该属性指定包含关联的媒体数据(音频数据、视频数据等等)的外部二进制文件的文件名。每一个sdsm元素2410都具有"xmlFile,,属性,该属性指定表示关联的mp4-Wfs文档2260的XML文件的名称。在一个实施例中,创建表示mp4-file文档和/或mp4-bifs文档的XML文件对诊断是有用的,但是这样的文件不是本发明的操作所必需的。如图24B和24D所示,每一个sdsm元素2440和每一个mediaFile元素280都包含一个或多个块元素2450、24卯。每一个块元素2450、24卯都拥有"size"属性,该属性指出关联的二进制数据块中的字节数量(如果已知的话)。每一个块元素2450、24卯还拥有"offset"属性,该属性指出二进制sdsm数据或媒体数据文件的开始和二进制sdsm数据或媒体数据文件内的当前块的数据的开始之间的字节数量(如果已知的话)。描述场景描述流(sdsm)的其他信息包含在mp4-bifs文档内。如图24C所示,每一个odsm元素2460都包含一个或多个odsmChunk2470元素。每一个odsmChimk元素2470都拥有"size,,属性,该属性指出对象描述符流的关联部分的字节数量(如果已知的话)。每一个odsmOmnk元素2470还拥有"offset"属性,该属性指出关联的对象描述符流的二进制数据的开始和该流内的当前块的数据的开始之间的字节数量(如果已知的话)。如图25A所示,每一个odsmChunk元素2500都包含一个或多个odsmSample元素2510。如图25B所示,每一个odsmSample元素2520都包含一个或多个odsm画command元素2530。如图25C所示,每一个odsm-command元素都可以是ObjectDescrUpdate元素2540或ObjectDescrRemove元素2570。每一个ObjectDescrUpdate元素2540都包含ObjectDescriptor元素2550,ObjectDescrUpdate元素2540内包含的ObjectDescriptor元素2550包含EsIdRef元素2560。每一个odsmSample元素2510、2520都拥有"time,,属性,该属性指定当odsmSample元素2510、2520内包含的命令将执行时的时间(以秒为单位)。每一个ObjectDescriptor元素2550和每一个ObjectDescrRemove元素2570都拥有"ODID,,属性2555、2575,该属性指定数字对象描述符ID。每一个EsIdRef元素2560都拥有"EsId"属性2565,该属性指定数字基本流ID。Trak元素2350、2600的结构,如图26A所示,非常类似于mp4文件700内的trak原子7卯、卯0的结构。每一个trak元素2600都包含mdia元素2604。Trak元素2600还可以包含tref(轨道引用)元素2636和/或edts(编辑列表)元素2644。没有类似于mp4文件中的tkhd原子910的tkhd元素。相反,tkhd原子910内包含属性是作为trak元素2600的属性来表示的。mdia元素2604包含hdlr元素2608和minf元素2612。mdhd原子915的属性是作为mdia元素2604的属性来表示。Minf元素2612包含dinf元素2615、stbl元素2628,以及媒体标头元素2632。4某体标头元素("*mhd")2632可以具有多种形式中的某一种形式,具体取决于关联的数据流中的数据的类型。与sdsm或odsm关联的trak元素内的媒体标头元素2632通过"nmhd,,元素来表示。与音频流关联的trak元素内的媒体标头元素2632通过"smhd"元素来表示,而与视频流关联的trak元素内的媒体标头元素2632通过"vmhd"元素来表示。如图26B所示,stbl(样本表)元素2628、2652包含stsc(样本到块表)元素2656、stts(时间到样本表)元素2660、stco(块偏移表)元素2664、stsz(样本大小表)元素2668,以及stsd(样本描述表)元素2676。stbl元素2664还可以包括stss(同步样本表)元素2672,具体取决于流或媒体类型。stsd元素2676可以包含牙皮表示为图26B中的"mp^元素"2680的多种类型的从属元素中的某一个元素。在与sdsm或odsm流关联的trak元素2600内包38元素2680包含"mp4s,,元素。>在与音频流关联的trak元素2600内包含的stsd元素2676的情况下,stsd元素2680包含"mp4a"元素。.在与视频流关联的trak元素2600内包含的stsd元素2676的情况下,stsd元素2680包含"mp4v,,元素。在每一种情况下,"mp4",元素2680包含esds元素2684,esds元素2684包含ES—Descr元素2688。如图27所示,ES—Descr元素2700包含DecoderConfigDescriptor元素2710和SLConfigDescriptor元素2760。DecoderConfigDescriptor元素2710可以包含多种类型的解码器特定的信息元素中的某一种,包括BIFS—DecoderConfig元素2720、JPEG—DecoderConfig2730、VisualConfig2740或AudioConfig2750。各种类型的解码器特定信息元素中的每一种元素都代表二进制DecoderConfigDescriptor结构1032内包含的DecoderSpecificInfo数据结构1072的一种形式。二进制ES—Descr结构1000、DecoderConfigDescriptor结构1032、SLConfigDescriptor结构1088,以及DecoderSpecificInfo结构1076的属性通过mp4-file文档2300的对应元素2700、2710、2760、2720、2730、2740、2750的属性来表示。6.0mi)4-bifs文档如图28A所示,mp4-bifs文档2800包含单个bifsConfig元素2810,后面有一个或多个commandFrame元素2820的序列。如图28B所示,每一个commandFrame元素2830都包含多个mp4bifsbifsCommand元素2840中的某一个。每一个commandFrame元素2820、2830都拥有"time"属性,该属性指定当commandFrame元素内包含的命令将执行时的时间(以秒为单位)。每一个mp4bifsbifsCommand元素2840都代表十一个可能的MPEG-4BIFS命令中的某一个InsertNode、InsertlndexedValue、InsertRoute、DeleteNode、DeleteIndexedValue、DdeteRoute、ReplaceNode、ReplaceField、ReplacelndexedSValue、39ReplaceRoute和ReplaceScene。如图29A所示,mp4bifsbifsCommand元素2910可以包含一个或多个mp4bifsNode元素2920。在十一种类型的bifsCommand元素中,InsertNode、InsertlndexedValue、ReplaceNode、ReplaceField、ReplacelndexedValue,以及ReplaceScene可以包括从属mp4bifsNode元素2920。InsertlndexedValue、ReplacelndexedValue和ReplaceFieldbifsCommand元素可以具有从属bifsCommand元素2910。如图29B所示,ReplaceScenebifsCommand元素2930可以只包括单个从属mp4bifsNode元素,这必须是"TopNode,,元素2940。TopNode元素2940对应于MPEG-4BIFS节点的特定子集的成员。此子集在MPEG-4系统规范中进行了定义。此外,ReplaceScenebifsCommand元素2930还可以包括从属"Routes,,元素2950,而"Routes,,元素2950可以包含一个或多个从属"Route,,元素2960。mp4bifsRoute元素2960具有属性"routeld,,、"arrivalNodeld,,、"arrivalField"、"departureNodeID",以及"departureField"。除了可能的从属mp4bifsNode元素外,每一种类型的mp4bifsbifsCommand元素拥有下列属性值1.InsertNode:"parentld,,、"insertioiiPosition,,,以及"position"2.InsertlndexedValue:"nodeld,,、"inFieldName"、"insertionPosition,,、"position",以及"value"3.InsertRoute:"Routeld"、"departureNode,,、"departureField"、"arrivalNode",以及"arrivalFieId"4.DeleteNode:"nodeld',5.DeletelndexedValue:"nodeld,,、"inFieldName"、"deletionPosition",以及"position"6.DeleteRoute:"routeld,,7ReplaceNode:"parentlD,,8.ReplaceField:"nodeld"、"inFieldName",以及"value,,9.ReplacelndexedValue:"nodeld,,、"inFieldName"、"insertionPosition,,、"position",以及"value"10.ReplaceRoute:"routeld,,、"departureNode,,、"departureField"、"arrivalNode,,,以及"arrivalField,,11.ReplaceScene:"USENAMES"(布尔值)对于bifsCommand元素InsertlndexedVahie、ReplaceField和ReplacelndexedValue,如果"inFieldName"属性指定的属性字段具有"node"的节点数据类型(根据MPEG-4规范),那么,此元素将包含一个或多个从属mp4bifs节点元素2920,"value"属性将包含与每一个从属节点元素关联的节点名称列表。mp4bifsNode元素2920代表许多类型的MPEG-4BIFSNode数据结构中的某一个。在MPEG-4系统规范中定义了100以上的不同类型的BIFS节点。每一种类型的MPEG-4BIFS节点具有特定的NodeName和一组属性字段。mp4bifsNode元素有两种基本类型原始Node元素和重复4吏用Node元素。如图30A所示,mp4bifs原始Node元素3000通过对应于MPEG-4系统规范中定义的其中一个BIFS节点的NodeName属性的"NodeName"来标识。mp4bifs原始Node元素3000可以具有可选的Nodeld属性3010。如果为Nodeld属性3010指定了值,Node元素3000被分类为"可重复使用的节点"。Nodeld属性3010的值,如果指定的话,是1到当前场景中定义的可重复使用的节点的总数范围内的整数。如果为Nodeld属性3010指定了值,并且关联的ReplaceScene命令的"USENAMES,,属性的值为"真,,,那么Node元素还具有"name,,属性3016。除了Nodeld3010和name3016属性外,每一个原始Node元素都具有许多属性字段属性3020。每一个属性字段属性3020都对应于MPEG-4系统规范中为特定Node元素的NodeName标识的节点类型定义的其中一个属性字段。每一个属性字段都具有定义的字段数据类型,如布尔、整数、浮点等等。可能的字段数据类型集包括"SFNode"和"MFNode"。如果特定原始Node元素的NodeName对应于具有属性字段的MPEG-4BIFS节点或具有字段数据类型"SFNode,,和"MFNode,,的字段,那么Node元素可以拥有一个或多个从属Node元素3030。如果如此,则对应的属性字段属性的值包括与属性字段关联的每一个从属Node元素的NodeName字符串。例如,如果具有NodeName"Group,,的特定mp4bifsNode元素拥有从属mp4bifsNode元素,这些元素具有与"children"属性关联的NodeNames"Transform2D"、"Valuator",以及"TimeSensor",那么"children"属性的值将是"Transform2DValuatorTimeSensor"。在ConditionalBIFS节点的特殊情况下,其中一个属性字段具有属性字段名称"buffer","buffer"属性字段的字段数据类型是"commandbuffer","buffer,,属性字段的值包括一个或多个BIFS命令。在此情况下,对应的mp4bifsNode元素3040的NodeName为"Conditional"。ConditionalNode元素3040的Nodeld属性3050和name属性3056的值可以为任何其他mp4bifs原始Node元素3000指定。代替从属Node元素3030,ConditionalNode元素拥有一个或多个从属bifsCommand元素3070,"buffer"属性的值包括从属bifsCommand元素3070的命令名称的有序列表。例如,如果特定ConditionalNode元素拥有从属InsertRoutebifsCommand元素,后面有从属DeleteNodebifsCommand元素,那么,"buffer,,属性的值将是"InsertRouteDeleteNode"。原始Node元素拥有从属Node元素或bifsCommand元素的能力可以递归地重复到BIFS命令和Node元素的层次集合。如图30C所示,重复使用的Node元素3080具有NodeName"ReusedNode"。ReusedNode元素3080没有从属元素。ReusedNode元素3080具有名为"nodeReP30卯的单个属性。nodeRef属性30卯的值必须匹配其中一个可重复4吏用的原始Node元素3000、3040的Nodeld属性3010、3050的值。7.0mp4到xmta转换器如图22所示,过程2200基于MPEG-4中间二进制文件("mp4文件")2210创建XMT-A文档2220和一组零个或多个二进制媒体数据文件2230。此过程包括两个主要步骤a.基于mp4二进制文件2210创建2240—对中间xml文档2240、2250和一组纟某体数据文件2230。b.基于该对中间xml文档2250、2260创建2270xmtaxml文档2220。下面将描述这些步骤中的每一个步骤。基于mp4二进制文件创建一对中间xml文档和一组媒体数据文件基于mp4二进制文件2210创建一对中间xml文档2240、2250和一组媒体数据文件2230的过程2240包括两个部分(1)基于mp4二进制文件2210的内容创建Qtlnfo数据结构3100。(2)基于所产生的Qtlnfo数据结构3100创建一组媒体数据文件2230和一对中间xml文档2250、2260。媒体数据文件2230集可以是空的。在本发明的另一个实施例中,这两个部分可以合并到单一的过程,其中,直接从mp4二进制文件2210创建中间xml文档2250、2260和媒体数据文件2230,而不必创建Qtlnfo数据结构3100。如图7A所示,mp4二进制文件700由一个moov原子712和一个或多个mdat原子706组成。若没有moov原子712中指定的信息,则不能解释包含创建媒体数据文件2230所需要的mdat原子706。因此,在创建中间xml文件2250、2260和媒体数据文件2230之前,创建诸如Qtlnfo数据结构3100之类的临时数据结构是有利的。Otlnfo数据结构Qtlnfo数据结构代表mp4二进制文件700的内容。如图31A所示,Qtlnfo数据结构3100包括下列组件1.maxNumTracKs3103:指定mdat数组3113和trak数组3120中的条目的数量的整数。2.Mp4flnitObjectDescr3106:表示由此Qtlnfo数据结构3100表示的mp4二进制文件700内包含的moov原子712、754内包含的iods原子778的属性的Mp4flnitObjectDescr数据结构3130的地址,3.mediaDataSize3108:指定由此Qtlnfo数据结构3100表示的mp4二进制文件700中的mdAt原子706、718的全部的大小724的总和的整数,4.numMdatAtoms3"0:指定由此Qtlnfo数据结构3100表示的mp4二进制文件700中包含的mdat原子706的数量的整数,5.mdat数组3113:maxNumTracks3103mdat结构3160的序列的地址。作为备选方案,这可以指定mdat结构3160的maxNumTracks3103地址的序列的地址。此数组中的头几个numMdatAtomsmdat结构中的每一个都表示由此Qtlnfo数据结构3100表示的mp4二进制文件700中包含的mdat原子706中的某一个,6.MoovHeader3116:表示由此Qtlnfo数据结构3100表示的mp4二进制文件700内包含的moov原子712、754内包含的mvhd原子772的属性的MoovHeader数据结构3170的地址,7.immTracks3118:指定由此Qtlnfo数据结构3100表示的mp4二进制文件700中包含的trak原子790的数量的整数,8.trak数组3120:maxNumTracks3103trak结构3200的序列的地址。作为备选方案,这可以指定trak结构3200的maxNumTracks3103地址的序列的地址。此数组中的头几个numTrakAtomstrak结构中的每一个都表示由此Qtlnfo数据结构3100表示的mp4二进制文件700中包含的moov原子712、754内包含trak原子790中的某一个,9.(UserData):表示由此Qtlnfo数据结构3100表示的mp4二进制文件700中的moov原子712外部的可能的udta原子的可选数据结构的地址,Mp4flnitObjectDescr数据结构3130代表iods原子778、800的属性。如图31B所示,Mp4flnitObjectDescr数据结构3130包括下列组件1.size3133:指出iods原子778中的字节的数量的整数,2.version3136:指出iods原子800的版本812和标志816属性的值的整数,3.ObjectDescrID3138:指出iods原子800内包含的Mp4flnitObjectDescr对象824的ObjectDescriptorID属性836的值的整数,4.urlFlag3140:指出iods原子800内包含的Mp4flnitObjectDescr对象824的URL—Flag属性840的值的布尔值,5.urlString3143:如果数量"urlFlag"的值为"假",那么,数量"urlString"的值为零(空值)。否则,此数量的值指定表示字符串的空值结束的序列字节的地址。6.inLineProfiles3146:表示iods原子800内包含的Mp4flnitObjectDescr对象824的indudelnlineProfilesFlag属性844的值的布尔值,7.ProfileLevels3148:五个整数的集合ODProfileLevel、sceneProfileLevel、audioProfileLevel、visualProfileLevel,以及graphicsProfileLevel,它们指出iods原子800内包含的Mp4flnitObjectDescr对象824的ODProfileLevelIndication852、sceneProfileLevellndication856、audioProfileLevellndication860、visualProfileLevellndication864,以及graphicsProfileLevellndication868,8.maxNumEsIdlncs3153:指出Esldlnc数组3156中的条目的数量的整数(值为"2,,就足够了),9.mimEsIdlncs3153:指出iods原子800内包含的Mp4flnitObjectDescr对象824中的ES—ID—Inc对象872的数量的整数,10.Esldlnc数组3156:maxNumEsIdlncsEsldlnc结构的序列,或maxNumEsIdlncsEsldlnc结构的序列的地址。如果URL一Flag属性840的值为"0",那么,将给组件"urlFlag,,3140指定值"假",否则,将给数量"urlFlag"3140指定值"真"。URL—Flag属性840的值预计为"0"。如果includelnlineProfilesFlag属性844的值为"0",那么,将给组件"inLineProfiles"3146指定值"假,,,否则,将给数量"inLineProfiles"3146指定值"真"。Esldlnc结构包括两个整数,"size"和"trackID"。这些整数表示Mp4flnitObjeetDescr对象824内的对应的ES—ID—Inc对象872、876中的数量"numBytes"884和"ES—ID,,883的值。每一个mdat结构3160都表示mdat原子706、718的属性。如图31C所示,mdat结构3160包括下列组件1.size3163:包括mdat原子706的字节的数量。这与mdat原子718的"原子大小,,属性724相同。2.start3166:指定mp4二进制文件700的开始和mdat原子706的第一个字节之间的字节的数量。3.MediaData3168:这是(大小-8)字节的数组的地址,包含mdat原子706内包含的块736的集的副本。46MoovHeader结构3170表示mvhd原子772的属性。如图31D所示,MoovHeader结构3170包括下列值1.size3173:指出mvhd原子772中的字节的数量的整数,2.version&flags3176:—对指出mvhd原子772的"version"和"flags"属性的值的整数,3.creationTime3178:指出mvhd原子772的"creationTime,,属性的值的整数,4.modifiedTime3180:指出mvhd原子772的"modificationTime,,属性的值的整数,5.timeScale3183:指出mvhd原子772的"timeScale,,属性的值的整数,6.duration3186:指出mvhd原子772的"duration,,属性的值的整数,7.nextTrackID3188:指出mvhd原子772的"nextTrackID"属性的值的整数,每一个trak结构3200都表示trak原子790、900的属性。如图32A所示,每一个trak结构3200都可以包含下列组件1.size3202:指出trak原子卯0中的字节的数量的整数,2.TrackHeader3204:TrackHeader数据结构3212的地址,表示由此trak结构3200表示的trak原子900内包含的汰hd原子910的属性,3.TrackMedia3206:TrackMedia数据结构3226的地址,表示由此trak结构3200表示的trak原子900内包含的mdia原子912的属性,4.TrackEdit3208:可选TrackEdit数据结构3236的地址,表示由此trak结构3200表示的trak原子900内包含的可选edts原子945的属性,5.TrackReference3210:可选TrackReference数据结构3264的地址,表示由此trak结构3200表示的trak原子900内包含的可选tref原子940的属性,TrackHeader结构3212表示tkhd原子910的属性。如图32B所示,TrackHeader结构3212包括下列组件1.size3214:指出tkhd原子910中的字节的数量的整数,2.version&flags3216:—对指出tkhd原子910的"version"和"flags"属性的值的整数,3.creationTime3218:指出tkhd原子910的"creationTime"属性的值的整数,4.modifiedTime3220:指出tkhd原子910的"modificationTime"属性的值的整数,5.duration3222:指出tkhd原子910的"duration,,属性的值的整数,6.tracklD3224:指出tkhd原子910的"trackID,,属性的值的整数,TrackMedia结构3226表示mdia原子912的属性。如图32C所示,TrackMedia结构3226包括下列组件1.size3228:指出mdia原子912中的字节的数量的整数,2.MediaHeader3230:MediaHeader结构3300的地址,表示mdia原子912内包含的mdhd原子915的属性,3.Handler3232:Handler结构3320的地址,表示mdia原子912内包含的hdlr原子918的属性,4.Medialnfo3234:Medialnfo结构3333的地址,表示mdia原子912内包含的minf原子920。TrackEdit结构3236表示edts原子945的属性。如图32D所示,TrackEdit结构3236包含下列组件1.size3238:指出edts原子945中的字节的数量的整数,2.version&flags3240:—对指出edts原子945的"version"和"flags"属性的值的整数,3.EditList3242:表示edts原子945中包含的elst原子948的EditList结构3244的地址。EditList结构3244表示elst原子948的属性。如图32E所示,EditList结构3244包括下列组件1.size3246:指出elst原子948中的字节的数量的整数,2.version&flags3248:—对指出elst原子948的"version"和"flags"属性的值的整数,3.numSegments3250:指定EditSegment数组3252中的EditSegment结构3256的数量的整数,4.EditSegmentarray3252:这可以是numSegmentsEditSegment结构3256的序列或EditSegment结构3256的numSegments地址的序列。每一个EditSegment结构3256都表示由包含此EditSegment结构3256的EditList结构3244表示的elst原子948内包含的"editsegment,,的属性。如图32F所示,每一个EditSegment结构3256都包括三个整数startTime3258、duration3260,以及relativeRate3262。这些整数中的每一个整数都表示对应的editsegment的名称类似的属性。TrackReference结构3264表示tref原子940的属性。如图32G所示,TrackReference结构3264包括下列组件1.size3266:指出tref原子940中的字节的数量的整数,2.Mpod3268:表示tref原子940内包含的Mpod原子942的Mpod结构3270的地址。Mpod结构3270表示Mpod原子942的属性。如图32H所示,Mpod结构3270包括下列组件1.size3272:指出mpod原子942中的字节的数量的整数,2.numEntries3274:指定trackID数组3276中的条目的数量的整数,3.trackIDarray3276:numEntries整数的序歹寸的地址。这些整数中的每一个整数都表示mpod原子942内指定的其中一个trackID值。UserData结构3280表示udta原子784的属性。如图321所示,UserData结构3280包括下列组件1.size3282:指出udta原子784中的字节的数量的整数,2.mimCprt3284:指定cprt数组3286的成员的数量的整数,3.cprtarray3286:cprt结构3290的序列,或cprt结构3290的地址的序列。cprt结构3290表示cprt原子的属性。如图32J所示,cprt结构3290包括下列组件1.size3282:指出cprt原子中的字节的数量的整数,2.version&flags3294:—对指出cprt原子的"version"和"flags"属性的值的整数,3.language3296:指出cprt原子的"language,,属性的值的整数,以及4.notice3298:指出cprt原子中指定的消息的空值结束的字符串。MediaHeader结构3300表示mdhd原子915的属性。如图33A所示,MediaHeader结构3300包括下列值1.size3303:指出mdhd原子915中的字节的数量的整数,2.version&flag3306:—对指出mdhd原子915的"version"和"flags"属性的值的整数,3.creationTime3308:指出mdhd原子915的"creationTime"属性的值的整数,4.modifiedTime3310:指出mdhd原子915的"modificationTime"属性的值的整数,5.timeScale3313:指出mdhd原子915的"timeScale"属性的值的整数,5.duration3316:指出mdhd原子915的"duration"属性的50值的整数,7.language3318:指出mdhd原子915的"language,,属性的值的整数,Handler结构3320表示hdlr原子918的属性。如图33B所示,Handler结构3320包括下列值1.size3323:指出hdlr原子918中的字节的数量的整数,2.version&flags3326:—对指出hdlr原子918的"version"和"flags"属性的值的整数,3.handlerType3328:指定hdlr原子918的处理程序类型属性的4字符标记,以及4.name3330:为描述或诊断目的提供的空值结束的字符串的地址。Medialnfo结构3333表示minf原子920的属性。如图33C所示,Medialnfo结构3333包括MediaDatalnfo结构3338、3350的地址,SampleTables结构3340、3400的地址,以及MedialnfoHeader结构3343的地址。MedialnfoHeader结构3343表示下列媒体信息标头原子936之一1.nmhd原子(对于场景描述流,sdsm,或对象描述符流,odsm),2.vmhd原子(对于视频流),或3.smhd原子(对于音频流)。MedialnfoHeader结构3343包括下列值1.大小指出媒体信息标头原子936中的字节的数量的整数,2.version&flags:—对指出i某体信息标头原子936的"version"和"flags"属性的值的整数,MediaDatalnfo结构3350表示dinf原子924的属性。如图33D所示,MediaDatalnfo结构3350包括下列组件1.size3353:指出dinf原子924中的字节的数量的整数,2.version&flags3356:—对指出dinf原子924的"version"和"flags"属性的值的整数,3.DataRefTable3358:DataRefTable数据结构3360的地址。DataRefTable结构3360表示dref原子927的属性。如图33E所示,DataRefTable结构3360包括下列组件1.size3363:指出dref原子927中的字节的数量的整数,2.version&flags3366:—对指出dref原子927的"version"和"flags"属性的值的整数,3.numDataRefs3368:指出dataRef数组3370中的条目的数量的整数,以及4.dataRefarray3370:DataRef数据结构3380的序列的地址。DataRef结构3380表示数据引用表中的条目。如图33F所示,dataRef结构3380包括下列组件1.size3383:指出由此dataRef结构3380表示的数据引用结构中的字节的数量的整数,2.version&flags3386:—对指出数据引用结构的"version"和"flags"属性的值的整数,3.dataRefType3388:指出由此dataRef结构3380表示的数据引用结构的类型的四个字符的序列,以及4.dataRefData3390:表示数据引用结构的其余部分的大小-12字节的序列的地址。SampleTables结构3400表示stbl原子933、950的属性。如图34A所示,SampleTables结构3400包括下列组件1,size3403:指出stbl原子950中的字节954的数量的整数,2.SampleToChunkTable3406:表示stsc原子960的内容的数据结构的地址,3.ChunkOffsetTable3408:表示stco原子966的内容的数据结构的地址,4.TimeToSampleTable3410:表示stts原子963的内容的数据结构的地址,5.SampleSizeTable3413:表示stsz原子970的内容的数据结构的地址,6.SyncSampleTable3416:表示stss原子974的内容的可选数据结构的地址,7.SampleDescriptionTable3418:表示stsd原子978的内容的数据结构的地址,除SampleSizeTable3413夕卜,SampleTables结构3400中包含的每一个样本表都具有下列成员,如图34B3420所示1.size3"3:指出由此数据结构表示的样本表原子中的字节的数量的整数,2.version在flags3426:—对指出由此数据结构表示的样本表原子的"version"和"flags"属性的值的整数,3.numEntries3428:指出表数组3430中的条目的数量的整数,以及4.tablearray3430:整数或数据结构的数组的地址。如图34C所示,SampleSizeTable结构3440类似于其他样本表,只是它还包括另一个成员,"sampleSize"3450,这是一个指定所有样本的固定样本大小的整数。如果成员"sampleSize,,3450的值为非零,成员"tablearray"3456被省略。成员"tablearray"的结构取决于样本表的类型。在ChunkOffsetTable结构3408、SampleSizeTable结构3413以及SyncSampleTable结构3416的情况下,此成员表示32位整数的序列。在SampleToChunkTable结构3406的情况下,表数组表示SampleToChunk数据结构3460的数组。如图34D所示,每一个SampleToChunk数据结构3460都包括三个整数成员,"firstChimk,,3463、"numSamples,,3466,以及"description,,3468。在TimeToSampleTable结构3410的情况下,表数组表示TimeToSample数据结构3470的数组。如图34E所示,每一个TimeToSample数据结构3470包括两个整数成员,"coimt,,3473和"duration"3476。在SampleDescriptionTable结构3418的情况下,表数组表示SampleDescription数据结构的数组。如图34F所示,每一个SampleDescription数据结构3480都包括下列六个成员1.size3483:指出由此SampleDescription结构3480表示的样本描述表条目中的数量的整数,2.dataFormat3486:指定由此SampleDescription结构3480表示的mp4*原子982的四字符标识符("mp4s"、"mp4a,,或"mp4v,,),3.dataReference3488:表示由jt匕SampleDescription结构3480表示的mp4*原子982的dataReference属性的整数,4.esdversion3490:指出由jt匕SampleDescription结构3480表示的mp4*原子982中包含的"esds,,原子986的版本属性的整数,5-esdSize3493:指出由此SampleDescription结构3480表示的mp4*原子982中包含的"esds,,原子986中的字节的数量的整数,6.esdData3496:包含由此SampleDescription结构3480表示的mp4*原子982中包含的"esds"原子986内包含的ES—Descr对象结构990的副本的字节的数组的地址。基于mp4二进制文件创建Qtlnfo结构基于mp4二进制文件创建Qtlnfo结构的过程从基于数量"maxNumTracks"的特定值创建新的空的Qtlnfo数据结构。数量"maxNumTracks,,的值可以是诸如128之类的预先确定的常数,该常54数足够大,以超过特定mp4二进制文件中的轨道的实际数量,或者也可以通过打开mp4二进制文件并统计该文件内包含的trak原子的数量来确定。在已经创建新的空的Qtlnfo结构之后,按如图35所示的那样对mp4文件进行解释。此过程包括下列步骤1.操作3500,打开mp4二进制文件(读取)。2.操作3510,从mp4文件读取32位整数,并将此整数的值指定给数量"atomSize"。然后,从mp4文件读取第二个32位整数,并将此整数的值指定给数量"atomld"。3.操作3520,将数量"atomld,,的值与值"mdat"进行比较。4.操作3525,如果数量"atomld"的值对应于"mdat",则执行过程"处理mdat原子"。5.操作3530,将数量"atomld"的值与值"moov,,进行比较。6.操作3535,如果数量"atomld"的值对应于"moov",则执行过程"处理moov原子"。7.操作3540,将数量"atomld"的值与值"udta"进行比较。8.操作3545,如果数量"atomld,,的值对应于"udta",则执行过程"处理udta原子",后面跟下面的操作3570。9.否则,执行操作3560,跳过mp4文件中的atomSize-8字节。即,从mp4文件中读取此数量的字节,但是不对所产生的值执行任何操作。10.操作3570,测试mp4二进制文件700的当前文件位置。11.如果mp4二进制文件700的当前文件位置对应于文件条件的末尾,则操作3580完成该过程(读取的字节的数量等于完整的mp4文件中的字节的数量)。否则,重复操作3510到操作3570。如图36所示,过程"处理mdat原子"操作3530包括下列步骤1.操作3600,创建新的MediaData结构"newMediaData,,3160。2.操作3610,将此新的MediaData结构3160的地址指定到Qtlnfo结构3100中的mdat数组3113中的条目numMdatAtoms。3.操作3620,将numMdatAtoms3110的值增大1。4.<}。操作3630,将数量"atomSize"的值指定到新的MediaData结构3160中的成员"size"3163。5.操作3640,将当前文件指针的值(-8)指定到新的MediaData结构3160中的成员"start,,3166。6.操作3650,创建具有(atomSize-8)字节的新字节数组,并将此数组的地址指定到新的MediaData结构3160中的成员"MediaData,,3亂7.操作3660,从mp4二进制文件读取(atomSize-8)字节,并将结果复制到新的MediaData结构3160中的成员"MediaData"3168指定的新的字节数组。如图37所示,过程"处理moov原子,,操作3550包括下列步骤1.操作3700,将零值指定到Qtlnfo结构3100中的成员"numTracks,,3118。2.操作3710,从mp4文件读取32位整数,并将此整数的值指定给数量"atomSize"。然后,从mp4文件读取第二个32位整数,并将此整数的值指定给数量"atomld"。3.操作3720,将数量"atomld"的值与值"mvhd"进行比较。4.操作3725,如果数量"atomld"的值对应于"mvhd",则执行过程"处理mvhd原子"。然后继续执行下面的操作3770。5.操作3730,将数量"atomld"的值与值"iods"进行比较。6.操作3735,如果数量"atomld"的值对应于"iods",则执行过程"处理iods原子"。然后继续执行下面的操作3770。7.操作3740,将数量"atomld,,的值与值"trak,,进行比较。8.操作3745,如果数量"atomld"的值对应于"trak",则执行过程"处理trak原子"。然后继续执行下面的操作3770。9.否则,执行操作3760,跳过mp4文件中的atomSize-8字节。即,从mp4文件中读取此数量的字节,但是不对所产生的值执行任何操作。10.操作3770检查是否到达moov原子754的末端。当自moov原子754的开始从mp4文件读取的数据字节的数量等于在操作3710中确定的数量atomSize的值时,满足到达了moov原子754的末端的条件。12.如果已经到达了moov原子(754)的末端,则操作3780完成了此过程。否则,重复操作3710到操作3770。过程"处理用户数据原子"可以用来表示UserData结构3280中的可选udta原子784的内容。此信息不是最后的XMT-A文件所需的,因此,只需跳过任何udta原子784的其余部分(atomSize减去8字节)就足够了。或者,下列步骤可以用来解释udat原子784的内容1.创建新的UserData数据结构3280。2.将此新的UserData数据结构3280的地址指定到Qtlnfo结构3100中的成员UserData3123。3.将数量"atomSize,,的值指定到此新的UserData数据结构3280中的成员"size"3282。4.将值"0"指定到UserData结构3280的成员"numCprt"3284。5.重复过程"读取C叩yright原子,,,直到到达udta原子784的末端。当自udta原子784的开始从mp4文件读取的数据字节的数量等于成员"size,,3282的值时,满足到达了udta原子784的末端的条件。过程"读取C叩yright原子,,包括下列步骤1.从mp4文件读取32位整数,并将此整数的值指定给数量"atomSize"。然后,从mp4文件读取第二个32位整数,并将此整数的值指定给数量"atomld"。2.将数量"atomld,,的值与值"cprt,,进行比较。3.如果数量"atomld"的值不对应于"cprt",则跳过mp4文件中的数据的atomSize-8字节,并继续执行过程"处理用户数据原子,,的步骤5,否则执行下列步骤。4.创建新的cprt结构"newCprt,,3290。5.将此新的cprt结构的地址指定给UserData结构3280的cprt数组成员3286中的条目numCprt。6.将数量"atomSize"的值指定到新的cprt结构32卯中的成员"size,,(3292)。7.从mp4文件读取32位整数,并将此整数的值指定给新的cprt结构3290的成员"version&flags,,3294。8.从mp4文件读取16位整数,并将此整数的值指定给新的cprt结构3290的成员"language"3296。9.从mp4文件读取字节的空值结束的序列,并将这些字节复制到新的字符串量"newNotice"。10.将新的字符串量"newNotice,,的地址指定到新的cprt结构3290中的成员"notice"(3298)。11.将UserData结构3280的成员numCprt3284的值增大1。过程"处理mvhd原子"操作3725包括下列步骤1.创建新的MoovHeader数据结构3170。2.将此新的MoovHeader数据结构3170的地址指定到Qtlnfo结构3100中的成员MoovHeader3116。3.将数量"atomSize,,的值指定到此新的MoovHeader数据结构3170中的成员"size,,3173。4.从mp4文件读取32位整数,并将结果指定给MoovHeader结构3170中的成员"version&flags"3176。5.从mp4文件读取32位整数,并将结果指定给MoovHeader结构3170中的成员"creationTime,,3178。S.从mp4文件读取32位整数,并将结果指定给MoovHeader结构3170中的成员"modificationTime,,3180。7.从mp4文件读取32位整数,并将结果指定给MoovHeader结构3170中的成员"timeScale,,3183。8.从mp4文件读取32位整数,并将结果指定给MoovHeader结构3170中的成员"duration,,3186。9.读取mp4文件中的76字节,并忽略所产生的值。10.从mp4文件读取32位整数,并将结果指定给MoovHeader结构3170中的成员"nextTracklD"3188。过程"处理iods原子"包括下列步骤1.创建新的Mp4flnitObjectDescr数据结构3130。2.将此新的Mp4flnitObjectDescr数据结构3130的地址指定给Qtlnfo结构3100中的成员Mp4flnitObjectDescr3106。3.将"atomSize,,的值指定到Mp4flnitObjectDescr结构3130中的成员"size"3133。4.从mp4文件读取32位整数812,816,并将结果指定给Mp4flnitObjectDescr结构3130中的成员"version,,3136。5.从mp4文件读取8位整数828,并验证结果具有预期值"16,,(MP4—IOD—Tag)。6.从mp4文件读取8位整数832,并将结果指定到数量"objSize"。7.如果objSize的值大于127,则重复步骤6。8.从mp4文件读取16位整数,并将结果指定给数量"odidandflags,'。9.将值"odidandflags"836的高阶10位的值指定到Mp4flnitObjectDescr结构3130中的成员"ObjectDescriptorlD"3138。10.如果逻辑操作的结果("odidandflags,,的值)和32)为零,则将值"0"指定到Mp4flnitObjectDescr结构3130中的成员"urlFlag"3140。否则,将值"l"指定到Mp4flnitObjectDescr结构3130中的成员"urlFlag"3140。11.如果逻辑操作的结果("odidandflags"的值)和16)为零,则将值"0"指定到Mp4flnitObjectDescr结构3130中的成员"inlineProfiles,,3146。否则,将值'T,指定到Mp4flnitObjectDescr结构3130中的成员"inlineProfiles,,3146。12.将值"2"指定到Mp4flnitObjectDescr结构3130中的成员"maxNumEsIdlncs,,3150。13.将零值指定到Mp4flnitObjectDescr结构3130中的成员numEsIdlncs3153。14.创建maxNumEsIdlncs地址值的数组。15.将此数组的地址指定到Mp4flnitObjectDescr结构3130中的成员"EsIdlnc数组,'3156。16.如果成员urlFlag的值为"l,,,则执行过程"处理URL字符串"。否则(urlFlag的值为"O,,),则执行过程"处理配置文件级别的指示器"。过程"处理URL字符串"包括下列步骤l.从mp4文件读取字节的空值结束的序列,2.将这些字节保存到新的字节数组中,3.将此新的字节数组的地址指定到Mp4flnitObjectDescr结构3130中的成员urlString3143。过程"处理配置文件级别的指示器"包括下列步骤1.将零值指定到Mp4flnitObjectDescr结构3130中的数量urlString3143。2.从mp4文件中读取五个配置文件级别的指示值852到868,并将每一个值指定到Mp4flnitObjectDescr结构3130的对应的成员。这些配置文件级别的值中的每一个值都包括单一的字节,这5个值都由Mp4flnitObjectDescr结构3130的"ProfiieLevels,,3146部分表示。3.重复过程"处理Esldlnc对象",直到到达iods原子800的末端。当自iods原子800的开始从mp4文件读取的数据字节的数量等于iods原子800的大小804、3133时,满足到达了iods原子800的末端的条件。过程"处理Esldlnc对象,,包括下列步骤1.从mp4文件读取一字节对象标记880。2.验证对象标记的值是否具有预期值(14,"EsIdlncTag")。3.创建新的Esldlnc结构。此结构包含两个成员值,"size"和"trackID"。4.将此新的Esldlnc结构的地址指定到Mp4flnitObjectDescr结构3130中的Esldlnc数组3156中的条目numEsIdlncs。5.读取包括Esldlnc对象的其余部分的字节884的数量,并将结果指定到新的Esldlnc结构的成员"size"。6.从mp4文件888读取32位整数,并将结果指定给新的Esldlnc结构的成员"trackID"。7.将成员numEsIdlncs3153的值增大1。如图38所示,过程"处理trak原子"操作3745包括下列步骤1.操作3800,创建新的trak数据结构3200。将此新的trak结构的地址指定到当前Qtlnfo结构3100的trak数组成员3120中的条目numTracks。将数量"AtomSize"的值指定到新的trak结构3200中的成员"size,,3202。2.操作3810,从mp4文件读取32位整数,并将此整数的值指定给数量"atomSize,,。.然后,从mp4文件读取第二个32位整数,并将此整数的值指定给数量"atomW"。3.操作3820,将数量"atomld,,的值与值"tkhd,,进行比较。4.操作3825,如果数量"atomld"的值对应于"tkhd",则执行过程"处理trackheader(tkhd)原子"。然后继续执行操作613870。5.操作3830,将数量"atomld"的值与值"mdia,,进行比较。6.操作3835,如果数量"atomld"的值对应于"mdia",则执行过程"处理trackmedia(mdia)原子"。然后继续执行操作3870。7.操作3840,将数量"atomld,,的值与值"edts"进行比较。8.操作3845,如果数量"atomld,,的值对应于"edts",则执行过程"处理trackedit(edts)原子"。然后继续执行操作3870。9.操作3850,将数量"atomId"的值与值"treP进行比较。10.操作3855,如果数量"atomld,,的值对应于"treP,则执行过程"处理trackreference(tref)原子"。然后继续执行操作3870。11.否则,执行操作3860,跳过mp4文件中的atomSize-8字节。即,从mp4文件读取atomSize-8字节,并忽略所产生的值。12.操作3870,检查是否到达trak原子900的末端。当自trak原子900的开始从mp4文件读取的数据字节的数量等于当前trak结构3200的成员"size"3202的值时,满足到达了trak原子900的末端的条件。13.操作3880,如果已经到达了trak原子卯0的末端,则将numTracks的值增大1。否则,重复操作3810到操作3870。过程"处理trackheader原子,,包括下列步骤1.创建新的TrackHeader数据结构3212。2.将此新的TrackHeader数据结构3212的地址指定到当前trak结构3200中的成员TrackHeader3204。3.将数量"atomSize,,的值指定到TrackHeader结构3212中的成员"size,,3214。4.从mp4文件读取32位整数,并将结果指定给TrackHeader结构3212中的成员"version&flags,,3216。5.从mp4文件读取32位整数,并将结果指定给TrackHeader结构3212中的成员"creationTime,,3218。S.从mp4文件读取32位整数,并将结果指定给TrackHeader结构3212中的成员"modifiedTime,,3220。7.从mp4文件读取32位整数,并将此值指定给数量"trackID"。将数量"trackID,,的值指定到TrackHeader结构3212的成员"tracklD"3224。8.从mp4文件读取4个字节,并忽略所产生的值。9.从mp4文件读取32位整数,并将结果指定给TrackHeader结构3212的成员"duration,,3222。10.从mp4文件读取60个字节,并忽略所产生的值。如图39所示,过程"处理trackmedia原子"包括下列步骤1.操作3900,创建新的TraekMedia数据结构3226。将此新的TrackMedia结构3226的地址指定到当前trak结构3200中的成员TrackMedia3206。将"atomSize"的值指定到新的TrackMedia结构3226中的成员"size"3228。2.操作3910,从mp4文件读取32位整数,并将此整数的值指定给数量"atomSize"。然后,从mp4文件读取第二个32位整数,并将此整数的值指定给数量"atomld"。3.操作3920,将数量"atomld"的值与值"mdhd,,进行比较。4.操作3925,如果数量"atomld"的值对应于"mdhd",则执行过程"处理媒体标头(mdhd)原子"。然后继续执行下面的操作3970。5.操作3930,将数量"atomld"的值与值"hdlr"进行比较。6.操作3935,如果数量"atomld"的值对应于"hdlr",则执行过程"处理handler(hdlr)原子"。然后继续执行下面的操作3970。7.操作3940,将数量"atomld,,的值与值"minP进行比较。8.操作3945,如果数量"atomld"的值对应于"minP,则执行过程"处理mediainfo(mdhd)原子"。然后继续执行下面的操作3970。9.否则,执行操作3960,跳过mp4文件中的atomSize-8字节。即,从mp4文件中读取此数量的字节,但是不对所产生的值执行任何操作。10.操作3970,检查是否到达mdia原子912的末端。当自mdia原子912的开始从mp4文件读取的数据字节的数量等于当前TrackMedia结构3226的成员"size,,3228的值时,满足到达了mdia原子912的末端的条件。11.操作3980,如果已经到达了mdia原子912的末端,则此过程完成,并继续执行操作3870。否则,重复操作3910到操作3970。过程"处理trackedit原子"包括重复下列步骤,直到到达edts原子945的数据的末端。当自edts原子945的开始从mp4文件读取的数据字节的数量等于edts原子的大小时,满足到达了edts原子945的末端的条件。预计可以在edts原子945内找到单一的elst原子948。1.创建新的TrackEdit结构3236。2.将此新的TrackEdit结构3236的地址指定到当前trak结构3200的成员TrackEdit3208。3.将"atomSize"的值指定到新的TrackEdit结构3236中的成员"size"3238。4.从mp4文件读取32位整数,并将结果指定给TrackEdit结构3236的成员"version&flags,,3240。5.从mp4文件读取32位整数,并将此整数的值指定到数量"atomSize"。然后,从mp4文件读取第二个32位整数,并将此整数的值指定给数量"atomld"。6.将数量"atomld,,的值与值"elst"进行比较。7.如果数量"atomld"的值对应于"elst",则执行过程"处理editlist原子"。否则,跳过mp4文件中的atomSize-8字节。即,从mp4文件读取atomSize-8字节,并忽略所产生的值。8.检查是否到达了edts(trackedit)原子945的末端。当自edts原子945的开始从mp4文件读取的数据字节的数量等于TrackEdit结构3236的成员"size,,3238的值时,满足到达了edts原子945的末端的条件。9.如果已经到达了edts原子945的末端,则此过程完成。否则,重复步骤5到8。过程"处理editlist原子,,包括下列步骤1.创建新的EditList结构3244。2.将此新的EditList结构3244的地址指定到当前TrackEdit结构3236的成员"EditList,,3242。3.将"atomSize"的值指定到新的EditList结构3244中的成员"size,,3246。4.从mp4文件读取32位整数,并将结果指定到EditList结构3244中的成员"version&flags"。5.从mp4文件读取32位整数,并将此值指定到数量"numSegments',。6.将数量"numSegments"的值指定到EditList结构3244的成员"mimSegments,,3250。7.创建mimSegmentsEditSegment结构3256的数组,并将此数组的地址指定到EditList结构3244的成员"EditSegmentarray"。8.将零值指定到数量"segment"。9.重复下列步骤(10到13)numSegments次(直到数量"segment,,的值等于数量"numSegments,,的值)10.从mp4文件读取32位整数,并将结果指定给EditSegment结构3252的数组中的成员"startTime"3258。6511.从mp4文件读取32位整数,并将结果指定给EditSegment结构3252的数组中的条目"segment"的成员"duration"3260。12.从mp4文件读取32位整数,并将结果指定给EditSegment结构3252的数组中的条目"segment"的成员"relativeRate,,3262。13.将数量"segment"的值增大1。过程"处理trackreference原子,,包括下列步骤。预计可以在tref原子940内找到单一的mpod原子942。1.创建新的TrackReference结构3264。2.将此新的TrackReference结构3264的地址指定到当前trak结构3200的成员"TrackReference"。3.将atomSize的值指定到此新的TrackReference结构3264的成员"size,,3266。4.重复下列步骤,直到到达tref原子940的数据的末端。当自tref原子940的开始从mp4文件读取的数据字节的数量等于tref原子940的大小时,满足到达了tref原子940的末端的条件。5.从mp4文件读取32位整数,并将此整数的值指定给数量"atomSize"。然后,从mp4文件读取第二个32位整数,并将此整数的值指定给数量"atomld"。6.将数量"atomld"的值与值"mpod"进行比较。7.如果数量"atomld"的值对应于"mpod",则执行过程"处理mpod原子"。否则,跳过mp4文件中的atomSize-8字节。即,从mp4文件读取atomSize-8字节,并忽略所产生的值。8.检查是否到达了tref(trackreference)原子940的末端。当自tref原子940的开始从mp4文件读取的数据字节的数量等于TrackReference结构3264的成员"size,,3266的值时,满足到达了tref原子940的末端的条件。9.如杲已经到达了tref原子940的末端,则此过程完成。否则,重复步骤5到8。过程"处理mpod原子"包括下列步骤1.创建新的Mpod数据结构3270。2.将此新的Mpod结构3270的地址指定到当前TrackReference结构3264的成员"Mpod,,3268。3.将atomSize的值指定到此新的Mpod结构的成员"size,,3272。4.将Mpod成员"size"的值减去8,并将结果除以4,然后,将结果指定到数量"numEntries"。5.将"numEntries"的值指定到新的Mpod数据结构3270的成员"numEntries"3274。6.创建具有"numEntries,,条目的整数的数组,并将此数组的地址指定到新的Mpod数据结构3270的成员"tracklDarray"3276。6.将零值指定到数量"entry"。7.重复下列步骤(7到9)numEntries次(直到数量"entry,,的值等于数量"numEntries"的值)8.从mp4文件读取32位整数,并将结果指定给当前Mpod数据结构3270中的数组"tracklDarray,,3276中的条目"entry"。9.将数量"entry"的值增大1。过程"处理mediaheader原子,,包括下列步骤1.创建新的MediaHeader结构3300。2.将此新的MediaHeader结构3300的地址指定到当前TrackMedia结构3226中的成员"MediaHeader,,3230。3.将数量"atomSize,,的值指定到MediaHeader结构3300中的成员"size,,3303。4.从mp4文件读取32位整数,并将结果指定给MediaHeader结构3300的成员"version&flags,,3306。5.从mp4文件读取32位整数,并将结果指定给MediaHeader结构3300的成员"creationTime,,3308。6.从mp4文件读取32位整数,并将结果指定给MediaHeader结构3300的成员"modifiedTime,,3310。7.从mp4文件读取32位整数,并将结果指定给MediaHeader结构3300的成员"timeScale"3313。8.从mp4文件读取32位整数,并将结果指定给MediaHeader结构3300的成员"duration"3316。9.从mp4文件读取16位整数,并将结果指定给MediaHeader结构3300的成员"language,,3318。10.读取mp4文件中的2个字节并忽略所产生的值。过程"处理handler原子,,包括下列步骤1.创建新的Handler结构3320。2.将此新的Handler结构3320的地址指定到当前TrackMedia结构3226中的成员"Handler,,3232。3.将数量"atomSize,,的值指定到Handler结构3320中的成员"size,,3323。4.从mp4文件读取32位整数,并将结果指定给Handler结构3300的成员"version&flags,,3326。5.从mp4文件读取32位整数,并将结果指定给Handler结构3300的成员"handlerType,,3328。8.读取mp4文件中的12个字节并忽略所产生的值。9.从mp4文件读取空值结束的字符串,将所产生的字符的序列存储在字符的数组中,并将此字符的数组的地址指定到Handler结构3320中的成员"name,,3330。如图40所示,过程"处理mediainfo原子"包括下列步骤1.操作4000,创建新的Medialnfo数据结构3333。将此新的Medialnfo数据结构3333的地址指定到当前TrackMedia数据结构3226中的成员Medialnfo3234。将数量"atomSize,,的值指定到Medialnfo数据结构3333中的成员"size"3336。2.操作4010,从mp4文件读取32位整数,并将此整数的值指定到数量"atomSize"。然后,从mp4文件读取第二个32位整数,并将此整数的值指定给数量"atomld"。3.操作4020,将数量"atomld"的值与值"dinP进行比较。4.操作4025,如果数量"atomld"的值对应于"dinP,则执行过程"Processmediadatainfo(dinf)原子"。然后继续执行操作4080。5.操作4030,将数量"atomld"的值与值"stbl,,进行比较。6.操作4035,如果数量"atomld"的值对应于"stbl",则执行过程"处理样本表原子"。然后继续执行操作4080。7.操作4040,将数量"atomld,,的值与值"nmhd"进行比较。8.操作4035,如果数量"atomld"的值对应于"nmhd",则执行过程"处理mpeg4媒体标头原子"。然后继续执行操作4080。9.操作4050,将数量"atomld,,的值与值"smhd"进行比较。10.操作4055,如果数量"atomld"的值对应于"smhd,,,则执行过程"处理声音媒体标头原子"。然后继续执行操作4080。11.操作4060,将数量"atomld"的值与值"vmhd,,进行比较。12.操作4065,如果数量"atomld"的值对应于"vmhd",则执行过程"处理视频媒体标头原子"。然后继续执行操作4080。13.否则,执行操作4070,跳过mp4文件中的atomSize-8字节。即,从mp4文件读取atomSize-8字节,并忽略所产生的值。14.操作4080,检查是否到达了minf原子920的末端。当自minf原子920的开始从mp4文件读取的数据字节的数量等于Medialnfo数据结构3333中的成员"size"3336的值时,满足到达了minf原子920的末端的条件。15.操作4090,如果已经到达minf原子920的末端,则完成该过程。否则,重复操作4010到操作4080。过程"处理媒体数据信息(dinf)原子"包括下列步骤1.创建新的MediaDatalnfo结构3350。3350的地址指定到当前Medialnfo结构3333中的成员"MediaDatalnfo,,3338。3.将数量"atomSize"的值指定到MediaDatalnfo结构3350中的成员"size"3353。4.从mp4文件读取32位整数,并将结果指定给MediaDatalnfo结构3350的成员"version&flags,,3356。5.重复下列步骤,直到到达dinf原子924的数据的末端。当自dinf原子924的开始从mp4文件读取的数据字节的数量等于MediaDatalnfo结构3350的成员"size"的值时,满足到达了dinf原子924的末端的条件。6.从mp4文件读取32位整数,并将此整数的值指定给数量"atomSize"。7.从mp4文件读取32位整数,并将此整数的值指定给数量"atomld"。8.如果数量"atomld"的值对应于"dreP,则执行过程"处理数据引用表原子"。否则,跳过mp4文件中的atomSize-8字节。即,读取mp4文件中的atomSize-8字节,并忽略所产生的值。9.检查是否到达了dinf原子924的末端。如果已经到达dinf原子924的末端,则完成该过程。否则,重复步骤2到9。过程"处理数据引用表原子"包括下列步骤1.创建新的DataRefTable数据结构3360。2.将此新的DataRefTable数据结构3360的地址指定到当前MediaDatalnfo数据结构3350中的成员DataRefTable3358。3.将数量"atomSize"的值指定到DataRefTable数据结构3360中的成员"size,,3363。4.从mp4文件读取32位整数,并将结果指定给DataRefTable结构3360的成员"version&Flags"3366。6.从mp4文件读取32位整数,并将此值指定给数量"numDataRefs,,。707.将数量"numDataRefs"的值指定到DataRefTable结构3360中的成员"numDataRefs"3368。8.创建具有"numDataRefs,,条目的地址的数组,并将此数组的地址指定到新的DataRefTable数据结构3360中的成员"dataRefarray"3370。9.将零值指定到数量"entry"。10.重复下列步骤numDataRefs次(直到数量"entry"的值等于数量"numDataRefs,,的值)。11.创建新的dataRef数据结构3380。12.将此新的dataRef数据结构3380的地址指定到DataRefTable数据结构3360的dataRef数组成员3370中的条目"entry"。13.从mp4文件读取32位整数,并将值指定到数量"drefSize"。14.将数量"drefSize,,的值指定到此新的dataRef数据结构3380的成员"size,,3383。15.从mp4文件读取32位整数,并将结果指定给当前dataRef数据结构3380中的成员"version&Flags,,3386。16.从mp4文件读取32位整数,并将结果指定给此新的dataRef数据结构3380的成员"dataRefType"3388。数量"type"的值可以解释为四个文本字符的序列。17.创建(drefSize-12)字节的数组,并将此数组的地址指定到当前DataRef数据结构3380中的成员"dataRefData"3390。18.从mp4文件读取(drefSize-12)字节的序列,并这些复制到数组"dataRefData"3390中的连续的条目。19.将数量"entry"的值增大1。过程"处理mpeg4媒体标头原子"包括下列步骤1.创建新的Mpeg4MediaHeader数据结构。Mpeg4MediaHeader数据结构包含成员"size"和"version&flags"。2.将此新的Mpeg4MediaHeader数据结构的地址指定到当前Medialnfo数据结构3333的成员MedialnfoHeader3343。3.将数量"atomSize,,的值指定到此新的Mpeg4MediaHeader数据结构的成员"size"。4.从mp4文件读取32位整数,并将结果指定给此新的Mpeg4MediaHeader数据结构的成员"verFlags"。5.跳过mpeg4媒体标头(nmhd)原子936内包含的任何其余数据(如果atomSize大于12)。过程"处理声音媒体标头原子,,包括下列步骤1.创建新的SoundMediaHeader数据结构。SoundMediaHeader数据结构包含成员"size"、"version&flags,,和"balance"。2.将此新的SoundMediaHeader数据结构的地址指定到当前Medialnfo数据结构3333的成员MedialnfoHeader3343。3.将数量"atomSize"的值指定到此新的SoundMediaHeader数据结构的成员"size"。4.从mp4文件读取32位整数,并将结果指定给新的SoundMediaHeader结构中的成员"version&Flags"。5.从mp4文件读取32位整数,并将结果指定给当前SoundMediaHeader结构中的成员"balance"。6.跳过声音媒体标头(smhd)原子936内包含的任何其余数据(如果atomSize大于16)。过程"处理视频媒体标头原子"包括下列步骤1.创建新的VideoMediaHeader数据结构。VideoMediaHeader数据结构包含成员"size"、"version&flags"、"mode"、"opRed"、"opGreen",以及"opBlue"。2.将此新的VideoMediaHeader数据结构的地址指定到当前Medialnfo数据结构3333的成员MedialnfoHeader3343。3.将atomSize的值指定到此新的VideoMediaHeader结构的成员"size"。4.从mp4文件读取32位整数,并将结果指定给新的VideoMediaHeader结构中的成员"version&flags,'。6.从mp4文件读取16位整数,并将结果指定给新的VideoMediaHeader结构中的成员"mode"。7.从mp4文件读取16位整数,并将结果指定给当前VideoMediaHeader结构中的成员"opRed"。8.从mp4文件读取16位整数,并将结果指定给当前VideoMediaHeader结构中的成员"opGreen"。9.从mp4文件读取16位整数,并将结果指定给当前VideoMediaHeader结构中的成员"opBlue,,。10.跳过3见频4某体标头(vmhd)原子936内包含的任何其余数据(如果atomSize大于20)。如图41所示,过程"处理样本表原子,,包括下列步骤1.操作4100,创建新的SampleTables数据结构3400。将此新的SampleTables数据结构3400的地址指定到当前Medialnfo数据结构3333的成员SampleTables3340。将"atomSize"的值指定到新的SampleTables数据结构3400中的成员"size"3403。2.操作4110,从inp4文件读取32位整数,并将此整数的值指定给数量"atomSize"。然后,从mp4文件读取第二个32位整数,并将此整数的值指定给数量"atomld"。3.操作4120,将数量"atomld"的值与值"stsc"进行比较。4.操作4125,如果数量"atomld"的值对应于"stsc",则执行过程"处理样本到块表(stsc.原子"。然后继续执行操作4190。5.操作4130,将数量"atomld,,的值与值"stco"进行比较。6.操作4135,如果数量"atomld"的值对应于"stco",则执行过程"处理块偏移表(stco)原子"。然后继续执行操作4190。7.操作4140,将数量"atomld"的值与值"stts,,进行比较。8.操作4145,如果数量"atomld"的值对应于"stts",则执行过程"处理时间到样本表(stts)原子"。然后继续执行操作4190。9.操作4150,将数量"atomld"的值与值"stsz"进行比较。10.操作4155,如果数量"atomld"的值对应于"stsz",则执行过程"处理样本大小表(stsz)原子"。然后继续执行操作4190。11.操作4160,将数量"atomld,,的值与值"stss"进行比较。12.操作4165,如果数量"atomld"的值对应于"stss",则执行过程"处理同步样本表(stss)原子"。然后继续执行操作41卯。13.操作4170,将数量"atomld"的值与值"stsd"进行比较。14.操作4175,如果数量"atomld"的值对应于"stsd",贝'J执行过程"处理样本描述表(stsd)原子"。然后继续执行操作4190。15.否则,执行操作4180,跳过mp4文件中的atomSize-8字节。即,从mp4文件读取atomSize-8字节,并忽略所产生的值。16.操作4190,检查是否到达了stbl原子950的末端。当自stbl原子950的开始从mp4文件读取的数据字节的数量等于SampleTables数据结构3400中的成员"size"3403的值时,满足到达了stbl原子950的末端的条件。17.操作4195,如果已经到达stbl原子950的末端,则完成该过程。否则,重复操作4110到操作4190。过程"处理样本到块表(stsc.原子"包括下列步骤1.创建新的样本表数据结构3420。2.将此新的样本表数据结构3420的地址指定到当前SampleTables数据结构3400中的成员SampleToChunkTable3406。3.将数量"atomSize,,的值指定到新的样本表数据结构3420中的成员"size"3423。4.从mp4文件读取32位整数,并将结果指定给新的样本表数据结构3420中的成员"version&Flags"3426。5.从mp4文件读取32位整数,并将结果指定给新的样本表数据结构3420中的成员"numEntries"3428。6.创建具有numEntries条目的地址的数组,并将此数组的地址指定到新的样本表数据结构3420中的成员"tablearray"3430。7.将零值指定到数量"entry"。8.重复下列步骤numEntries次(直到数量"entry"的值等于成员"numEntries"3428的值)。9.创建新的SampleToChunk数据结构3460。10.将此新的SampleToChunk数据结构3460的地址指定到新的样本表数据结构3420的成员"tablearray"3430中的条目"entry"。13.从mp4文件读取32位整数,并将结果指定给新的SampleToChunk数据结构3460中的成员"firstChunk,,3463。14.从mp4文件读取32位整数,并将结果指定给SampleToChunk数据结构3460中的成员"numSamples"3466。15.从mp4文件读取32位整数,并将结果指定给SampleToChunk数据结构3460的成员"description"3468。16.将数量"entry"的值增大1。过程"处理块偏移表(stco)原子"包括下列步骤1.创建新的样本表数据结构3420。2.将此新的样本表数据结构3420的地址指定到当前SampleTables数据结构3400中的成员ChunkOffsetTable3408。3.将数量"atomSize,,的值指定到新的样本表数据结构3420中的成员"size"3423。4.从mp4文件读取32位整数,并将结果指定给新的样本表数据结构3420中的成员"version&Flags,,3426。5.从mp4文件读取32位整数,并将结果指定给新的样本表数据结构3420中的成员"numEntries"3428。6.创建具有numEntries条目的整数的数组,并将此数组的地址指定到新的样本表数据结构3420中的成员"tablearray,,3430。7.将零值指定到数量"entry"。8.重复下列步骤numEntries次(直到数量"entry"的值等于成员"mimEntries"3428的值)。9.从mp4文件读取32位整数,并将结果指定给新的样本表数据结构3420中的数组"tablearray"3430中的条目"entry"。10.将数量"entry"的值增大1。过程"处理时间到样本表(stts)原子"包括下列步骤1.创建新的样本表数据结构3420。2.将此新的样本表数据结构3420的地址指定到当前SampleTables数据结构3400中的成员TimeToSampleTable3410。3.将数量"atomSize"的值指定到新的样本表数据结构3420中的成员"size"3423。4.从mp4文件读取32位整数,并将结果指定给新的样本表数据结构3420中的成员"version&Flags,,3426。5.从mp4文件读取32位整数,并将结果指定给新的样本表数据结构3420中的成员"numEntries"3428。6.创建具有numEntries条目的地址的数组,并将此数组的地址指定到新的样本表数据结构3420中的成员"tablearray,,3430。7.将零值指定到数量"entry"。8.>重复下列步骤numEntries次(直到数量"entry,,的值等于成员"numEntries"3428的值)。9.创建新的TimeToSample数据结构3470。10.将此新的TimeToSample数据结构3470的地址指定到样本表数据结构3420的成员"tablearray"3430中的条目"entry"。11.创建新的TimeToSample数据结构3470。12.将此新的TimeToSample数据结构3470的地址指定到样本表数据结构3420中的数组"tablearray"3430中的条目"entry"。13.从mp4文件读取32位整数,并将结果指定给新的TimeToSample数据结构3470中的成员"count,,3473。14.从mp4文件读取32位整数,并将结果指定给新的TimeToSample数据结构3470中的成员"duration,,3476。15.将数量"entry"的值增大1。过程"处理样本大小表(stsz)原子"包括下列步骤1.创建新的SampleSizeTable数据结构3440。2.将此新的SampleSizeTable结构3440的地址指定到当前SampleTables数据结构3400中的成员SampleSizeTable3413。3.将数量"atomSize"的值指定到新的SampleSizeTable数据结构3440中的成员"size"3443。4.从mp4文件读取32位整数,并将结果指定给新的SampleSizeTable数据结构3440的成员"version&Flags,,3446。5.从mp4文件读取32位整数,并将结果指定给新的SampleSizeTable数据结构3440中的成员"sampleSize,,3450。如果新的SampleSizeTable数据结构3440中的成员sampleSize3450的值为零,则执行下列步骤,否则,将零值指定给新的SampleSizeTable数据结构3440中的成员"mmiEntries,,3453和"tablearray,,3456。6.从mp4文件读取32位整数,并将结果指定给新的SampleSizeTable数据结构3440中的成员"numEntries,,3453。7.创建具有numEntries条目的整数的数组,并将此数组的地址指定到新的SampleSizeTable数据结构3440中的成员"tableairay,,3456。8.将零值指定到数量"entry"。9.重复下列步骤numEntries次(直到数量"entry,,的值等于成员"numEntries,,3453的值)。10.从mp4文件读取32位整数,并将结果指定给SampleSizeTable数据结构3440中的成员"tablearray,,3456中的条目"entry,,。11.将数量"entry"的值增大1。过程"处理同步样本表(stss)原子"包括下列步骤1.创建新的样本表数据结构3420。2.将此新的样本表数据结构3420的地址指定到当前SampleTables数据结构3400中的成员SyncSampleTable3416。3.将数量"atomSize,,的值指定到新的样本表数据结构3420中的成员"size"3423。4.从mp4文件读取32位整数,并将结果指定给新的样本表数据结构3420中的成员"version&Flags,,3426。5.从mp4文件读取32位整数,并将结果指定给新的样本表数据结构3420中的成员"numEntries,,3428。6.创建具有numEntries条目的整数的数组,并将此数组的地址指定到新的样本表数据结构3420中的成员"tablearray,,3430。7.将零值指定到数量"entry"。8.重复下列步骤numEntries次(直到数量"entry,,的值等于成员"numEntries"3428的值)。9.从mp4文件读取32位整数,并将结果指定给新的样本表数据结构3420中的数组"tablearray,,3430中的条目"entry"。10.将数量"entry"的值增大1。过程"处理样本描述表(stsd)原子"包括下列步骤1.创建新的样本表数据结构3420。2.将此新的样本表数据结构3420的地址指定到当前SampleTables数据结构3400中的成员SampleDescriptionTable3418。3.将数量"atomSize"的值指定到新的样本表数据结构3420中的成员"size"3423。4.从mp4文件读取32位整数,并将结果指定给新的样本表78数据结构3420中的成员"version&Flags"3426。5.从mp4文件读取32位整数,并将结果指定给新的样本表数据结构3420中的成员"numEntries,,3428。6.创建具有numEntries条目的地址的数组,并将此数组的地址指定到新的样本表数据结构3420中的成员"tablearray,,3430。7.将零值指定到数量"entry"。8.重复下列步骤numEntries次(直到数量"entry"的值等于成员"numEntries"3428的值)。9.创建新的SampleDescription数据结构3480。10.将此新的SampleDescription数据结构3480的地址指定到新的样本表数据结构3420的成员"tablearray"3430中的条目"entry"。11.从mp4文件读取32位整数,并将结果指定给SampleDescription数据结构3480中的成员"size,,3483。12.从mp4文件读取32位整数,并将结果指定给SampleDescription数据结构3480中的成员"dataFormat"3486。成员"dataFormat,,的值可以表示下列4字符序列之一"mp4a,,、"mp4v"、"mp4s"。13.从mp4文件读取6个字节,并忽略它们的值。14.从mp4文件读取16位整数,并将结果指定给SampleDescription数据结构3480中的成员"dataReference,,3488。15.如果数量"dataFormat"的值对应于字符串"mp4a",则从mp4文件读取20个字节,并忽略它们的值。16.如果数量"dataFormat"的值对应于字符串"mp4v",则从mp4文件读取70个字节,并忽略它们的值。17.从mp4文件读取32位整数,并将结果指定给数量"atomSize"。18.从mp4文件读取32位整数,并将此值指定到数量"atomld"。19.如果数量"atomld"的值对应于"esds,,,则执行过程"处理esds原子"。否则,从mp4文件读取(atomSize-8)个字节,并忽略它们的值。过程"处理esds原子"包括下列步骤1.从mp4文件读取32位整数,并将结果指定给SampleDescription数据结构3480中的成员"esdVersion,,3490"。2.将数量"atomSize"的值减去12,并将结果指定到当前SampleDescription数据结构3480中的成员"esdSize',3493。4.创建具有esdSize3493条目的字节的数组,并将此数组的地址指定到新当前SampleDescription数据结构3480中的成员"esdData,,3496。5.从mp4文件读取esdSize3496字节的序列,并将这些值复制到数组"esdData,,3496中的连续的条目。基于Otlnfo数据结构创建中间xml文档和媒体数据文件。在基于mp4二进制文件700、2210创建Qtlnfo数据结构3100之后,使用Qtlnfo数据结构3100创建一组媒体数据文件2230和一对中间xml文档2250、2260。这些xml文档包括"mp4file,,文档2250、2300和"mp4bifs"文档2260、2800。mp4file文档2250、2300的结构在图23到27中表示。Mp4bifs文档2260、2800的结构在图28到30中表示。此过程被分成两个步骤1.构成以Qtlnfo数据结构3100表示3113、3160的媒体数据(mdat)原子706的xml表示2310,并将关联的媒体数据3168存储在xml文档或二进制媒体数据文件2230中。2.构成以Qtlnfo数据结构3100表示的moov原子712的xml表示2320。下面将描述这些步骤中的每一个步骤。歩骤1。构成以Otlnfo数据结构表示的媒体数据原子的xml表示,并将关联的媒体数据存储在xml文档或二进制媒体数据文件在此步骤中,以Qtlnfo数据结构3100表示的每一个mdat原子706都通过mp4file文档2300中的mdat元素2310来表示。将与音频或视频流(如果有的话)关联的媒体数据3168传输到新的二进制^某体数据文件2230。与场景描述流(sdsm或BIFS)关联的4某体数据3168以mp4bifs文档2260、2800的形式来表示。与对象描述符流(如果有的话)关联的媒体数据3168以mp4file文档2300内的xml形式来表示。如图42所示,此步骤用下列过程来完成1.在操作4200中,给数量"iMdat"、"numVisual",以及"numAudio"指定零值。2.操作4210,将数量"iMdat"的值与Qtlnfo结构3100的成员"numMdatAtoms,,3110的值进行比较。3.在操作4220中,如果数量"iMdat"的值等于成员"numMdatAtoms,,的值,则此步骤完成。否则,继续执行下列过程。4.操作4230,将Qtlnfo结构3100的成员"mdat数组,,3U3中的条目"iMdat,,的值指定到表示mdat数据结构3160的地址的数量"mdatAtom"。5.操作4240,将mdat数据结构"mdatAtom"3160的成员"start"3166的值指定到数量"mdatStart,,。6.操作4250,将mdatAtom成员"size,,3163和数量"mdatStart"的值的总和指定到数量"nextMdat"。7.操作4260,创建新的"mdat,,元素2310,并将它附加到mp4file文档2300的最高一级的元素。它将数量"iMdat,,的值指定到新的mdat元素的属性"mdatID",将数量"mdatSize"的值指定到新的mdat元素的属性"size",并将mdat数据结构"mdatAtom"的成员"MediaData"的值指定到数量"mediaData"。8.操作4270,执行过程"处理媒体数据"。9.操作4280,将数量"iMdat"的值增大1,然后重复操作81■。过程"处理媒体数据"如图43所示,过程"处理媒体数据"4270包括下列步骤1.操作4300,将零值指定到数量"iTrack"。2.操作4310,将数量"iTrack,,的值与Qtlnfo结构3100的成员"numTracks,,3118的值进行比较。3.操作4315,如果数量"iTrack"的值等于Qtlnfo结构3100的成员"numTracks"的值,则此过程完成。4.操作4320,将Qtlnfo结构3100的成员"trak数组,,3120中的条目"iTrack,,的值指定到trak数据结构3200"trakAtom"的地址。将数据结构"trakAtom,,3200中的成员TrackMedia3206中的成员Medialnfo3234中的成员SampleTables3340中的成员ChunkOffsetTable3408中的成员"tablearray"3430指定的整数的数组中的第一条目(条目0)的值指定到数量"chunkOffset"。5.操作4315,如果数量"chunkOffset,,的值大于零,大于或等于数量"mdatStart"的值,小于数量"nextMdat,,的值,则执行下列步骤。否则,将数量"iTrack,,的值增大1(操作4390)。6.操作4340,执行过程"查找流类型"。7.操作4350,将数量"streamType"的值与值"l,,进行比较。8.操作4355,如果数量"streamType"的值为"l",则执行过程"OdsmDataToXml"。9.操作4360,将数量"streamType,,的值与值"3"进行比较。10.操作4365,如果数量"streamType"的值为"3",则执行过程"SdsmDataToXml"。11.操作4370,将数量"streamType"的值与值"4,,进行比较。12.操作4360,如果数量"streamType"的值为"4",则执行过程"VisualDataToXml",然后将"mimVisual"的值增大1。13.操作4380,将数量"streamType,,的值与值"5"进行比较。14.操作4385,如果数量"streamType"的值为"5",则执行过程"AudioDataToXml",然后将"numAudio,,的值增大1。15.操作43卯,将数量"iTrack"的值增大1。过程"查找流类型"如图44所示,过程"查找流类型"包括下列步骤1.操作4400,将数据结构"trakAtom,,中的成员TrackMedia3206中的成员Medialnfo3234中的成员SampleTables3340中的成员SampleDescrTable3418的值指定到表示样本表结构3420的地址的数量"stsdAtom,,。2.操作4410,将由数量"stsdAtom,,的值指定的样本表数据结构3420的成员"tablearray"3430中的第一条目(条目0)指定的SampleDescription数据结构3480中的成员"esdData"3496的值指定到表示字节的数组的数量"esdData"。3.操作4420,将由数量"stsdAtom"的值指定的样本表数据结构3420的成员"tablearray"中的第一条目(条目0)指定的SampleDescription数据结构3480中的成员"esdSize"的值指定到数量"esdSize"。4.操作4430,将零值指定到数量"esdPos"。5.操作4440,执行过程"查找解码器配置描述符"。6.操作4450,执行过程"获取标记大小"。7.操作4460,将数组"esdData"中的条目"esdPos,,的值指定到数量"objectType"。9.操作4470,将数量"esdPos,,的值增大1。10.操作4480,获取数组"esdData"中的条目"esdPos"的值,将结果向右移动两个位(除以4),并将结果指定到数量"streamType"。如果数量"esdPos"的值在步骤5到10的过程中等于或超过数量"esdSize"的值,则将零值指定到数量"StreamType"和"objectType",并终止此过程。过程"查找解码器配置描述符"过程"查找解码器配置描述符",如图45所示,包括下列步骤1.操作4500,将数组"esdData"中的条目"esdPos,,的值指定到数量"esdTag"。2.操作4510,将数量"esdTag,,的值与值"3"进行比较。3.操作4520,如果数量"esdTag"的值不是"3",则将数量"esdSize,,的值指定到数量"esdPos",并结束此过程4525。否则,执行下列步骤。4.操作4530,将数量"esdPos,,的值增大1。5.操作4535,执4亍过程"获取标记大小"。6.操作4540,将数量"esdPos,,的值增大4。7.操作4550,将数组"esdData,,中的条目"esdPos"的值指定到数量"esdTag"。8.操作4560,将数量"esdTag"的值与值"4,,进行比较。9.操作4565,如果数量"esdTag"的值不是"4",则将数量"esdPos"的值增大1,执行过程"获取标记大小,,4570,将数量"tagSize,,的值与数量"esdPos,,4575的值相加,然后重复操作4550。10.否则,执行操作4580,将数量"esdPos,,的值增大1。11.操作4585,完成此过程,并继续执行过程"查找流类型"。过程"获取标记大小"过程"获取标记大小"包括下列步骤1.操作4600,将零值指定到数量"tagSize"。2.操作4610,将数组"esdData"中的条目"esdPos,,的值指定到数量"sizeByte"。3.操作4620,将数量"sizeByte"的值与值128进行比较。如果数量"sizeByte"的值大于或等于128,则执行下列操作5.操作4630,将数量"sizeByte"的值减去128(或将数量"sizeByte,,的值替换为此值的下7位),6.操作4640,将数量"tagSize,,的值乘以128(或将此值向左移7位),7.操作4650,将数量"sizeByte,,的值与数量"tagSize,,的值相加,8.操作4660,将数量"esdPos"的值增大值"l"。9.重复操作4610。如果数量"sizeByte,,的值小于128,贝'j执行下列操作10.操作4670,将数量"tagSize"的值乘以128(向左移7位)。11.操作4680,将数量"sizeByte,,的值与数量"tagSize"的值进行比较。12.操作4690,将数量"esdPos,,的值增大值"l"。13.操作4695,完成此过程,并延续执行调用此过程的过程。过程"OdsmDataToXml"过程"OdsmDataToXm1,,4355创建mdat结构"mdatAtom"4230内包含的odsm数据流(对象描述符流)的xml表示。如图47所示,使用下列操作来创建此odsm数据流的xml表示1.操作4700,将mdat结构"mdatAtom,,4230的成员"MediaData,,3168的值指定到表示字节的数组的地址的数量"OdsmData"。将mdat结构"mdatAtom,,4230的成员"size"3163的值指定到整型量"OdsmSize"。2.操作4705,创建新的"odsm,,元素2460,并附加到当前mdat元素2400、4260。将trak结构3200"trakAtom"4320内包含的TrackHeader结构3212、3204的成员trackID3224的值指定到新的"odsm"元素的属性"trackID"的值。3.操作4710,将样本表结构3420ChimkOffsetTable3408的成员numEntries3428的值指定到数量"immChimks"。将样本表结构3420SampleToChunkTable3406的成员numEntries3428的值指定到数量"numStscEntries"。样本表结构ChimkOffsetTable、SampleToChunkTable等等是trak结构3200trakAtom4320的成员"TrackMedia"3206表示的TrackMedia数据结构3226的成员"Medialnfo"3234表示的Medialnfo数据结构3333的成员"SampleTables,,3340表示的SampleTables结构3400的成员。4.操作4715,将零值指定到数量"sttslndex"。将样本表结构3420TimeToSampleTable3410内包含的表数组3430中的第一条目的值指定到表示TimeToSample结构3470的地址的数量sttsEntry。将TimeToSample结构sttsEntry的成员"count,,的值指定到数量"count"。将TimeToSample结构sttsEntry的成员"duration,,的值指定到数量"duration"。5.操作4720,将零值指定到数量"stsclndex"。将样本表结构3420SampleToChunkTable3406内包含的表数组3430中的第一条目的值指定到表示SampleToChunk结构3460的地址的数量stscEntry。将SampleToChunk结构stscEntry的成员"firstChunk"的值(-1),再指定到整型量"firstChunk"。6.操作4725,将零值指定到整型量"time"、"sample",以及"chunk,'。7.操作4730,将数量"chunk"的值与数量"numChimks"的值进行比较。8.在操作4735中,如果数量"chunk"的值等于数量"mimChunks"的值,则过程"OdsmDataToXml,,完成。9.在操作4740中,如果数量"chunk"的值不等于数量"mimChunks,,的值,则将值"8,,加到mdat结构3160mdatAtom4230的成员"start"的值,再将样本表结构3420ChunkOffsetTable3408中包含的表数组3430中的条目"chunk"的值减去该结果,然后,再将所得的结果指定到整型量"offset"。10.操作4745,将数量"dumk"的值与数量"firstCh賴k"的值进行比较。11.在操作4750中,如果数量"chunk"的值等于数量"firstChunk"的值,则将SampleToChunk结构3460stscEntry中的成员"numSamples"3466的值指定到数量"numSamples"。将数量"stsclndex"的值增大1。如果数量"stsclndex"的值小于数量"numStscEntries"的值,则将样本表结构3420SampleToChunkTable3406内包含的表数组3430中的条目"stsclndex"的值指定到SampleToChunk结构3460stscEntry,并将SampleToChunk结构stscEntry的成员"firstChunk,,的值(-1)指定到整型量"firstChunk"。否则,将数量"numChunks"的值指定到数量"firstChunk"。12.操作4755通过对SampleSizeTable结构3440SampleSizeTable3413中包含的整数的数组3456中的条目"sample,,到"sample+numSamples-l,,进行求和来确定数量"chunkSize,,的值。13.操作4760,创建新的"odsmChunk,,元素,并附加到在摔:作4705中创建的新"odsm"元素。将数量"offset,,的值指定到新的"odsmChunk,,元素的属性"offset"。将数量"chunkSize,,的值指定到新的"odsmChunk,,元素的属性"size,,。14.操作4770,执行过程"解码odsm块,,,如图48所示。15.操作4780,将数量"chunk"的值增大1,并重复操作4730。过程"解码odsm块"如图48所示,过程"解码odsm块"包括下列步骤1.操作4800,将数量"chunkSize,,的值与零进行比较。2.操作4805,如果数量"clumkSize"的值不大于零,则完成过程"解码odsm块",并在操作4780中恢复过程"OdsmDataToXml"。3.操作4810,如果数量"chunkSize,,的值大于零,则将SampleSizeTable结构3440SampleSizeTable3413中的成员表3456中的条目"sample"的值指定到整型量"sampleSize"。4.操作4820,创建新的odsmSampie元素,并附加到在上面的4760创建的odsmChunk元素。将数量"offset,,的值指定到新的odsmSample元素的属性"offset"。将数量"sampleSize"的值指定到新的odsmSample元素的属性"size"。将数量"time"的值指定到新的odsmSample元素的属性"time"。5.操作4825,将数量"time"的值增大数量"duration"的值。将数量"count"的值減去值"l"。6.操作4830,将数量"count"的值与零进行比较。7.操作4835,如果数量"count"的值不大于零,则将数量"sttslndex,,的值增大值"1"。将样本表结构3420TimeToSampleTable3410内包含的表数组3430中的条目"sttslndex"的值指定到TimeToSample结构3470sttsEntry。将TimeToSample结构sttsEntry的成员"count"的值指定到数量"count"。将TimeToSample结构sttsEntry的成员"duration"的值指定到数量"duration"。8.操作4840,将数量"chunkSize"的值减少数量"sampleSize"的值。9.操作4845,将数量"sampleSize,,的值与零进行比较。10.操作4850,如果数量"sampleSize,,的值不大于零,则将数量"sample"的值增大值"l",并继续执行操作4800。11.操作4860,如果数量"sampleSize,,的值大于零,则将字节的数组"OdsmData"中的条目"offset"的值指定到数量"tag"。将数量"offset"的值增大值"l",将数量"sampleSize"的值减少值"l"。12.操作4865,执行过程"获取标记大小"。这相当于上文所描述的过程"获取标记大小",只是(a)使用字节的数组代替数组"esdData",(b)使用数量"offset"代替数量"esdPos"(c)每次数量"offset,,的值(esdPos)增大1时,数量"sampleSize,,的值都减少值'T,(操作4660,4690)。13.操作4870,将数量"tag"的值与MPEG-4系统规范中定义的数量"ObjectDescrUpdateTag"的值进行比较。14.操作4875,如果数量"tag"的值等于数量"ObjectDescrUpdateTag,,的值,则执行过程"解码OdUpdate"。15.否则,执行操作4880,将数量"tag"的值与MPEG-4系统规范中定义的数量"ObjectDescrRemoveTag"的值进行比较。16.操作4885,如果数量"tag"的值等于数量"ObjectDescrRemoveTag,,的值,则执行过程"解码OdRemove"。17.否则,执行操作48卯,将数量"offset"的值增大数量"tagSize,,的值18.操作4895,将数量"sampleSize"的值减少数量"tagSize"的值(如在操作4865中确定的)。18.继续执行操作4845。过程"解码OdUDdate"如果在操作4860中odsm命令的命令标记的值等于值"ObjectDescrUpdateTag"(操作4870、2000),则执行下列步骤4875,如图49所示1.操作4卯0,创建新的ObjectDescrUpdate元素2540,并将它附加到当前odsmSample元素2520。2.操作4910,使用过程"获取标记大小",以获得数量"tagSize,,的值(immBytes2020)。这相当于上文所描述的过程"获取标记大小",只是(a)使用字节的数组代替数组"esdData",以及(b)使用数量"offset"代替数量"esdPos"。将数量"tagSize"的值指定到数量"residualSize"。3.操作4920,将数量"residualSize,,的值与值'T,进4.在操作4925中,如果数量"ResidualSize"的值小于1,则此过程完成。5.在操作4930中,如果"residmdSize,,的值不小于1,则字节的数组"OdsmData,,中的条目"offset"的值指定到数量"odTag"。将数行比较。量"offset"的值增大"l",并将数量"residualSize"的值减少"l,'。6.操作4940,使用过程"获取标记大小",以获得数量"tagSize"的值(numBytes2116)。这相当于上文所描述的过程"获取标记大小",只是(a)使用字节的数组代替数组"esdData",以及(b)使用数量"offset"代替数量"esdPos"。将数量"tagSize"的值指定到数量"odSize"。7.操作4745,将数量"residualSize"的值减少数量"odSize,,的值。8.操作4960,将数量"odTag"的值与MPEG-4系统规范中定义的值"MP4—OD—Tag,,进行比较。9.在操作4965中,如果数量"odTag"的值不等于"MP4—OD—Tag",则将数量"offset"的值增大数量"tagSize"的值,然后重复操作4920。10.在操作4970中,如果数量"odTag"的值等于值"MP4—0D_Tag,,2108,则创建新的"ObjectDescriptor,,元素2550,并将它附加到当前ObjectDescriptorUpdate元素2540。11.操作4980,确定数量"ObjectDescriptorID"2124的值,并将结果指定到新的ObjectDescriptor元素2550的属性"ODID"。数量"ObjectDescriptorID,,的值可以通过下列操作来确定(a)将字节的数组"OdsmData"中的entryoffset的值指定到整型量"templ"(b)将数量"offset"的值增大1,并将数量"odSize"的值减少1,(c)将字节的数组"OdsmData"中的entryoffset的值指定到整型量"temp2,,(d)将数量"offset,,的值增大1,并将数量"odSize"的值减少1,(e)将数量"templ,,的值乘以4(向左移2位),(f)将数量"temp2,,的值除以64(向右移6位),(g)将值"tempr,和"temp2"的总和指定到整型量"ObjectDescriptorlD",12.操作4990,执行如下所述的"decodeEsIdRef"。过程"decodeEsIdRef,如图50所示,过程"decodeEsIdReP4990包括下列步骤1.操作5000,将数量"odSize,,的值与值"l,,进行比较。2.在操作5010中,如果数量"odSize,,的值小于1,则此过90程完成。3.操作5020,将字节的数组"OdsmData,,的条目"offset,,的值指定到数量"esdTag",将数量"offset"的值增大"l,,并将数量"odSize,,的值减少"1"。4.操作5030,使用过程"获取标记大小",以获得数量"tagSize"的值(numBytes2180)。这相当于上文所描述的过程"获取标记大小",只是(a)使用字节的数组代替数组"esdData",以及(b)使用数量"offset"代替数量"esdPos"。将数量"tagSize"的值指定到数量"esdSize"。5.操作5040,将数量"odSize"的值减少数量"esdSize"的值。6.操作5050,将数量"esdTag,,的值与MPEG-4系统规范中定义的值"ES—ID—RefTag,,进行比较。7.在操作5060中,如果数量"esdTag"的值不等于值"ES—ID_RefTag,,,则将数量"offset,,的值增大数量"esdSize"的值,然后重复操作5000。8.在操作5070中,如果数量"esdTag"的值等于值"ES—ID—RefTag,,2170,则创建新的"EsIdRef,元素2560,并将它附加到当前ObjectDescriptor元素2550。9.操作5080,确定数量"ES—ID"2190的值,并将结果指定到新的EsIdRef元素2560的属性"EsId"。数量"ES一ID,,的值可以通过下列操作来确定(a)将字节的数组"OdsmData"中的entryoffset的值指定到整型量"tempi"(b)将数量"offset,,的值增大1,(c)将字节的数组"OdsmData"中的entryoffset的值指定到整型量"temp2,,(d)将数量"offset,,的值增大1,(e)将数量"templ,,的值乘以256(向左移8位),(f)将值"templ"和"temp2"的总和指定到整型量"ESjD"。过程"解码OdRemove"如果odsm命令1960的命令标记4860的值等于值"ObjectDescrRemoveTag,,4880、2050,则执行4885下列步骤1.创建新的ObjectDescrRemove元素2570,并将它附加到当前odsmSample元素2520。2.使用过程"获取标记大小",以获得数量"tagSize,,的值(numBytes2060)。这相当于上文所描述的过程"获取标记大小",只是(a)使用字节的数组代替数组"esdData,,,以及(b)使用数量"offset,,代替数量"esdPos"。3.将数量"tagSize"的值乘以8,并将结果除以10,然后,将结果指定到数量"numOdlds"。4.创建新的空字符串数量"OdldList"。5.将字节的数组"OdsmData"当作以条目"offset,,开始的位的序列。从此位的序列中提取mmiOdld连续的10位整数值(objectDescriptorld2070)。6.创建这些objectDescriptorld值2070中的每一个值的字符串表示。将这些字符串值中的每一个字符串值连接到字符串量"OdldList",将连续值用单个空格字符分隔。7将字符串量"OdldList"的所产生的值指定到新的ObjectDescrRemove元素2570的属性"ODID"。过程"VisualDataToXml"过程"VisualDataToXm1,,4375创建块的xml表示,包括mdat结构"mdatAtom"4230内包含的视频媒体数据流。这些块内包含的媒体数据也被复制到外部媒体数据文件。如图51所示,此过程包括下列操作1.在操作5100中,将mdat结构"mdatAtom"4230的成员"MediaData"3168的值指定到表示字节的数组的地址的数量"MediaData"。将mdat结构"mdatAtom,,4230的成员"size,,3163的值指定到整型量"MediaSize"。2.在操作5105中,创建新的"mediaFile,,元素2480,并附加到当前mdat元素2400、4260。每一个这样的"mediaFile,,元素2480都具有两个属性,"trackID"和"imme"。属性"name"的值指定将包含媒体数据块(包括此流)的媒体数据文件2230的名称。将trak结构3200"trakAtom"4320内包含的TrackHeader结构3212、3204的成员trackID3224的值指定到新的"mediaFile"元素2480的属性"trackID"的值。"name,,属性的值通过连接三个字符串(文件名存根、序列号和文件类型下标)来确定。文件名存根可以通过输入mp4文件的名称的副本来确定,排除".,,(点或句号)字符和所有后续字符的最后一次出现。序列号可以由视频对象序列号的值的字符串表示"mimVisual"构成。文件类型下标可以取决于数量objectType的值和/或媒体数据流内包含的文件格式指示。例如,如果数量objectType的值为"32",则文件类型下标可以被指定为".m4v"(MPEG-4video)。3.在操作5110中,则打开新媒体数据文件进行写入操作。此新々某体数据文件的名称通过在操作5105中建立的mediaFile元素2480的"name,,属性的值来确定。在"MPEG-4video"(objectType1044为"32")的情况下,数据的初始块必须放在新媒体数据文件的开始。此数据块包含在trak结构3200(具有trackID值3224,该值具有数量"iTrack"指定的值)SampleDescripticm数据结构3480中的成员"esdData,,3496指定的字节的数组内包含的"解码器特定信息,,块1072、1076中。SampleDescription数据结构3480通过此trak结构的SampleDescriptions数据结构3400中的SampleDescriptionTable数据结构3418的成员表3430中的第一条目(条目0)。"解码器特定信息"块1072、1076包含在此esdData数据块3496内包含的"解码器配置描述符"数据块1024、1032内。解码器配置描述符数据1032可以使用上文所描述的过程"发现解码器配置描述符"来进行定位。解码器特定信息数据块1072、1076位于在解码器配置描述符1032内,跟在decoderConfigDescriptorTag1036、解码器配置描述符大小值1040,以及14个字节的解码器配置描述符数据1044到1068。解码器特定信息数据块1076包括一字节decoderSpecificInfoTag1080(值"5")、解码器特定信息数据块大小值(numBytes1084),以及numBytes字节的解码器特定信息数据。此numBytes1084字节的序列被复制到输出MPEG-4视频文件2230。4.在操作5115中,将样本表结构3420ChunkOffsetTable3408的成员numEntries3428的值指定到数量"numChunks"。将样本表结构3420SampleToChunkTable3406的成员n腿Entries3428的值指定到数量"numStscEntries,,。样本表结构ChunkOffsetTable、SampleToChunkTable等等是trak结构3200trakAtom4230的成员"TrackMedia"3206表示的TrackMedia数据结构3226的成员"Medialnfo"3234表示的Medialnfo数据结构3333的成员"SampleTables,,3340表示的SampleTables结构3400的成员。5.在操作5120中,将TimeToSample结构sttsEntry的成员"count"的值指定到数量"count"。6.在操作5125中,将零值指定到数量"stsclndex"。将样本表结构3420SampleToChunkTable3406内包含的表数组3430中的第一条目的值指定到表示SampleToChunk结构3460的地址的数量stscEntry。将SampleToChunk结构stscEntry的成员"firstChimk,,的值(-1),再指定到整型量"firstChunk"。7.在操作5130中,将零值指定到整型量"chunk"。8.在操作5140中,将数量"chunk"的值与数量"n画Chunks,,的值进行比较。9.在操作5145中,如果数量"chunk,,的值等于数量"n画Chunks"的值,则过程"VisualDataToXml"完成。10.在操作5150中,如果数量"chunk"的值不等于数量94"numChimks"的值,则将值"8,,加到mdat结构3160mdatAtom4230的成员"start,,的值,再将样本表结构3420ChunkOffsetTable3408中包含的表数组3430中的条目"chunk"的值减去该结果,然后,再将所得的结果指定到整型量"offset"。11.在操作5160中,将数量"chunk"的值与数量"firstChunk"的值进行比较。12.在操作5165中,如果数量"chunk,,的值等于数量"firstChunk,,的值,则将SampleToChunk结构3460stscEntry中的成员"numSamples"3466的值指定到数量"numSamples"。将数量"stsclndex"的值增大1。如果数量"stsclndex"的值小于数量"mimStscEntries"的值,则将样本表结构3420SampleToChunkTable3406内包含的表数组3430中的条目"stsclndex,,的值指定到SampleToChunk结构3460stscEntry,并将SampleToChunk结构stscEntry的成员"firstChunk,,的值(-1)指定到整型量"flrstChunk"。否则,将数量"numChunks,,的值指定到数量"firstChunk"。13.在操作5170中,通过对SampleSizeTable结构3440SampleSizeTable3413中包含的整数的数组3456中的条目"sample"到"sample+numSamples-1"进行求和来确定数量"chimkSize,,的值。14.在操作5180中,创建新的"chunk,,元素,并将其附加到在操作5105中创建的新的"mediaFile,,元素。将数量"offset"的值指定到新的"chunk,,元素的属性"offset"。将数量"chunkSize"的值指定到新的"chunk"元素的属性"size"。15.在操作5185中,从字节数组MediaData的开始在偏移字节的开始的媒体数据的chunkSize字节复制到在操作5110中打开的输出媒体数据文件。16.在操作5190中,将数量"chimk,,的值增大1,并重复操作5140。过程"AudioDataToXml"过程"AudioDataToXm1,,4385创建块的xml表示,包括mdat结构"mdatAtom,,4230内包含的音频々某体数据流。这些块内包含的々某体数据也被复制到外部媒体数据文件。如图51所示,此过程相当于上文所描述的过程"VisualDataToXml",下列差异除外用于构成"name"属性的值的序列号可以由音频对象序列号的字符串表示"numAudio,,构成。文件类型下标可以取决于数量objectType的值和/或々某体数据流内包含的文件格式指示。例如,如果数量objectType的值为"107",则文件类型下标可以被指定为".mp3"(MPEG-l层3音频)。在操作5145中,如果数量"chunk"的值等于数量"mimChunks"的值,则过程"AudioDataToXml"完成。某些类型的音频数据,如MPEG-2AAC(高级音频编码)可能要求这里所描述的内容以外的其他处理。执行这样的处理的装置可以由精通本技术的人基于对应的媒体特定的文件结构规范来进行设计。这里没有介绍用于处理每一种类型的音频数据的特定装置。过程"SdsmDataToXml"过程"SdsmDataToXm1,,4365创建当前mdat结构"mdatAtom"4230内包含的sdsm(BIFS)数据流(场景描述流)的xml表示。此过程创建的sdsm的xml表示包括两个部分(a)包含媒体数据块2450(包括sdsm)的摘要的sdsm元素2440。此sdsm元素2440包含在当前mdat元素4260(构成了mp4file文档2300的一部分)内。(b)在mp4bifs文档2260、2800中创建sdsm媒体数据样本1100、1110的xml表示。如图52所示,此过程包括下列操作1.在操作5200中,将mdat结构"mdatAtom,,4230的成员"MediaData,,3168的值指定到表示字节的数组的地址的数量"SdsmData,,。将mdat结构"mdatAtom"4230的成员"size"3163的值指定到整型量"SdsmSize"。2.在操作5205中,创建新的"sdsm,,元素2410、2440并附加到当前mdat元素2400、4260。每一个这样的"sdsm"元素2440都具有两个属性,"trackID,,和"xmlFile"。属性"XmlFile"指定可以用来表示所产生的mp4bifs文档2260、2800的可选xml输出文件的名称。此可选的xml输出文件对诊断是有用的,但是这样的文件不是本发明的操作所必需的(即对于mp4二进制文件创建XMT-A文件)。将trak结构3200"trakAtom,,4320内包含的TrackHeader结构3212、3204的成员trackID3224的值指定到新的"sdsm,,元素2440的属性"trackID,,的值。属性"xmlFile"的值通过连接两个字符串(文件名存根和文件类型下标)来确定。文件名存根可以通过输入mp4文件的名称的副本来确定,排除"."(点或句号)字符和所有后续字符的最后一次出现。文件类型下标是"Bifs.xml"。3.在操作5210中,创建新的"bifsConfig,,元素2810,并附加到mp4bifs文档2260、2800中的最顶端的元素。然后使用如下所述的过程"设置bifsConfig属性,,来设置"bifsConfig,,元素2810的属性。4.在操作5215中,将样本表结构3420ChunkOffsetTable3408的成员mmiEntries3428的值指定到数量"numChunks"。将样本表结构3420SampleToChunkTable3406的成员mimEntries3428的值指定到数量"numStscEntries"。样本表结构ChunkOffsetTable、SampleToChunkTable等等是trak结构3200trakAtom4320的成员"TrackMedia,,3206表示的TrackMedia数据结构3226的成员"Medialnfo"3234表示的Medialnfo数据结构3333的成员"SampleTables,,3340表示的SampleTables结构3400的成员。5.在操作5220中,将零值指定到数量"sttslndex"。将样本表结构3420TimeToSampleTable3410内包含的表数组3430中的第一条目的值指定到表示TimeToSample结构3470的地址的数量sttsEntry。将TimeToSample结构s誠ntry的成员"count"的值指定到数量"count"。将TimeToSample结构sttsEntry的成员"duration"的值指定到数量"duration"。6.在操作5225中,将零值指定到数量"stsclndex"。将样本表结构3420SampleToChunkTable3406内包含的表数組3430中的第一条目的值指定到表示SampleToChunk结构3460的地址的数量stscEntry。将SampleToChunk结构stscEntry的成员"firstChimk"的值(-1),再指定到整型量"firstChunk"。7.在操作5230中,将零值指定到整型量"chunk"。8.在操作5240中,将数量"chunk"的值与数量"immChunks,,的值进行比较。9.在操作5245中,如果数量"chunk"的值等于数量"numChunks"的值,则过程"SdsmDataToXml"完成。10.在操作5250中,如果数量"chunk,,的值不等于数量"numChiinks,,的值,则将值"8,,加到mdat结构3160mdatAtom4230的成员"start"的值,再将样本表结构3420ChunkOffsetTable3408中包含的表数组3430中的条目"chunk"的值减去该结果,然后,再将所得的结果指定到整型量"offset"。11.在操作5260中,将数量"chunk"的值与数量"firstChunk,,的值进行比较。12.在操作5265中,如果数量"chunk"的值等于数量"firstChunk,,的值,则将SampleToChunk结构3460stscEntry中的成员"numSamples"3466的值指定到数量"numSamples"。将数量"stsclndex"的值增大1。如果数量"stsclndex"的值小于数量"numStscEntries,,的值,则将样本表结构3420SampleToChunkTable3406内包含的表数组3430中的条目"stsclndex"的值指定到SampleToChunk结构3460stscEntry,并将SampleToChunk结构stscEntry的成员"firstChunk"的值(-1)指定到整型量"firstChunk"。否则,将数量"numChunks"的值指定到数量"firstChunk"。13.在操作5270中,通过对SampleSizeTable结构3440SampleSizeTable3413中包含的整数的数组3456中的条目"sample"到"sample+numSamples-1"进行求和来确定数量"chunkSize,,的值。14.在操作5275中,基于关联的trak结构3200中包含的TimeToSampleTable数据结构3410、TrackEdit数据结构3208、3236,以及MediaHeader数据结构3230中的表数组成员3430中的条目的内容,创建具有numSamples条目的时间戳的表。此表包含当前块中的每一个样本的一个条目,此表中的每一个条目都表示此流中的所有前面的样本的持续时间值3476,加在可选的TrackEdit数据结构3208、3236中指定的任何起始延迟(如果有的话)的总和。任何精通本技术的人员都可以创建用于从可用的信息生成这样的表的装置。15.在操作5280中,创建新的"chunk"元素,并将其附加到在步骤2中创建的新的"sdsm,,元素。将数量"offset,,的值指定到新的"chunk"元素的属性"offset"。将数量"chunkSize"的值指定到新的"chunk,,元素的属性"size"。16.在操作5285中,如图53所示,执行过程"解码sdsm块"。17.在操作5290中,将数量"chunk,,的值增大1,并重复操作5240。过程"设置bifsConfig属性"mp4bifsbifsConfig元素2810具有七个属性"nodeldBits"、"routeldBits,,、"commandFrame,,、"useBIFSv2Config,,、"protoldbits"、"use3DMeshCoding,,,以及"usePredictiveMFField"。这些属性的值通过当前trak数据结构"trakAtom"4320的解码器特定信息数据1072的内容来确定。此数据块包含在当前trackAtom数据结构3400、4320内包含的SampleTables数据结构3400的成员SampleDescriptionTable3418的成员"tablearray,,3430中的条目0指定的SampleDescription数据结构3480的esdData成员1000、3496内的解码器配置描述符1024、1032内。如杲数量"objectType"4460的值为"2",那么,解码器特定信息数据表示"版本2"BIFS配置。在此情况下,解码器特定信息块的开头三个字节具有下列内容uraaaaabbbbbpppppcxxxxxx其中,u="use3DMeshCoding"的1位值,r-"usePredictiveMFField,,的1位值,aaaaa-"nodeIdBits,,的5位无符号整数bbbbb-"routeIdBits,,的5位无符号整数PPPPP-"protoldbits,,的5位无符号整数c-"commandFrame,,的1位值。由aaaaa、bbbbb,以及ppppp指定的值被分配到指定的属性。由"aaaaa,,指定的无符号整数值被分配给mp4bifsbifsConfig元素2810的"nodeldBits"。由"bbbbb"指定的无符号整数值被分配给mp4bifsbifsConfig元素2810的"routeldBits"。由"PPPPP,,指定的无符号整数值被分配给mp4bifsbifsConfig元素2810的"protoldbits"。如果"u"、"r"或"c"的值为"0",那么,将值"假,,分配给mp4bifsbifsConfig元素2810的对应的属性。如果"u"、"r,,或"c"的值为"l",那么,将值"真,,分配给mp4bifsbifsConfig元素2810的对应的属性。如果数量"objectType,,4460的值不是"2",那么,解码器特定信息数据表示"版本l,,BIFS配置。在此情况下,解码器特定信息块的开头两个字节具有下列内容其中,aaaaa-"nodeIdBits,,的5位无符号整数bbbbb-"routeMBits,,的5位无符号整数c-"commandFrame,,的1位值。100在此情况下,不需要"protoldbits"、"use3DMeshCoding",以及"usePredictiveMFField,,的值。由"aaaaa"指定的无符号整数值被分配给mp4bifsbifsConfig元素2810的"nodeldBits"。由"bbbbb,,指定的无符号整数值被分配给mp4bifsbifsConfig元素2810的"routeldBits"。如果"c,,的值为"0",那么,将值"假,,分配给mp4bifsbifsConfig元素2810的"commandFrame"属性。否则,(如果"c"的值为"l"),则将值"真"分配给mp4bifsbifsConfig元素2810的"commandFrame,,属性。过程"解码sdsm块"如图53所示,过程"解码sdsm块"包括下列步骤1.在操作5300中,将数量"offset"5250的值指定到整型量"sdsmPos"。将数量"chunkSize,,5270的值加到数量"offset,,的值,并将结果指定到整型量"sdsmEnd"。数量"sdsmPos"的值指定字节在字节的数组"SdsmData"5200内的位置。关联的整型量"sdsmBit"指定位在由数量sdsmPos的值指定的字节内的位置。最初,将零值指定到关联的数量"sdsmBit"。对于从sdsm4立流提取的每一个位,EdsmBit的值都增大1。每当sdsmBit的值超过7,"sdsmBit"的值都减少8,"sdsmPos"的值都增大1。2.在操作5305中,将零值指定到整型量"sampie",并将值"假"指定到布尔量"FrameOpen"。3.在操作5310中,将数量"sdsmPos"的值与数量"sdsmEnd"的值进行比较。4在操作5315中,如果数量"sdsmPos"的值不小于数量"sdsmEnd"的值,则此过程完成。5.在操作5320中,如果数量"sdsmPos,,的值小于数量"sdsmEnd,,的值,则将数量"frameOpen"的值与值"假,,进行比较。6.在操作5325中,如果数量"frameOpen,,的值等于值"假",则创建新的"commandFrame,,元素2820,并附加到mp4bifs文档2800。将时间戳的表5275中的条目"sample"的值指定到新的commandFrame元素的"time"属性。将值"真,,指定到布尔量"frameOpen,,。7.在操作5330中,将"sdsmPos"和"sdsmBit"的值指定的点开始的sdsm位流中的下两个位指定到数量"cmdCode"。将数量"sdsmBit"的值增大2,并将数量"cmdCode"的值与0进行比较。8.在操作5335中,如果数量"cmdCode,,的值等于"0"1206,则执行过程"解码插入命令"。9.在操作5340中,将数量"cmdCode"的值与"l,,进行比较。10.在操作5345中,如果数量"cmdCode,,的值等于'T,1226,则执行过程"解码删除命令"。11.在操作5350中,将数量"cmdCode"的值与"2"进行比较。1.2.在操作5355中,如果数量"cmdCode"的值等于"2"1244,则执行过程"解码替换命令,'。13.在操作5360中,如果"cmdCode,,的值不是"O"、"l,,或"2",则它必须是"3",因为此值由两个位的数据确定。因此,此步骤的结果始终是"是"。14.在操作5365中,如果数量"cmdCode"的值等于"3,'1280,则执行过程"解码ReplaceScene命令"。过程"解码ReplaceScenecmd,,包括创建新的"ReplaceScene,,bifsCommand元素2930,并将它附加到当前"commandFrame,,元素2830(操作5310)。然后,解释跟在场景替换cmdCode1280后面的BIFS场景数据结构1290、1600,并根据需要提高sdsmBit和sdsmByte的值。通过增大sdsmBit的值,跳过"预留"组件1610指定的值。确定USENAMES1620指定的值,以及BIFS场景结构1600的protoList1630组件,并指定到新的"ReplaceScene,,元素的对应的属性。然后使用过程"解码SFNode"来解释BIFS场景结构1600的SFTopNode组件1640。新的"ReplaceScene,,bifsCommand元素2930充当所产生的TopNodeBIFS节点元素2940的父元素。将一位值"hasRoutes,,1650指定到布尔值"hasRoutes"。如果"hasRoutes,,的值为"l,,("真,,),那么,解释下列Routes组组件1660、1800、1830。创建新的"Routes"元素2950,并附加到新的"ReplaceScene,,元素2930。创建新的"Route,,元素2950,并附加到Routes组件1660内包含的每一个Route结构1810或1850的新的"Routes"元素2950。确定每一个Route结构1860的routeID1870、routeName1875、outNodeID1880、outFieldRef1885、隨odeID1890,以及inFieldRef1895组件指定的值,并指定到每一个新的"Route"元素2960的对应的属性。15.在操作5370中,在完成过程"解码插入命令"、"解码删除命令"、"解码替换命令"或"解码ReplaceScene命令"之后,将sdsm位流中的下一位指定到布尔量"continue"1130或1140。如果数量"continue"的所产生的值为"l"("真,,)1130,则此过程继续执行操作5310。16.操作5375,如果数量"continue"的值为"0"("假")1140,则sdsm位流转到下一字节的开始。即,如果数量sdsmBit的值为零,则不执行任何操作。否则,将"sdsmBit"的值设置为零,并将sdsmByte的值增大1。此步骤跳过sdsm命令帧1110结尾处的"填充位"1150。17.在操作5380中,将布尔量"frameOpen,,的值设置为"假",将数量"sample"的值增大1,此过程继续执行操作5310。过程"解码插入命令"如图54所示,过程"解码插入命令"包括下列步骤1.在操作5400中,将sdsm位流1210中的下两位指定到数量"paramType"。2.在操作5410中,将数量"paramType"的值与"O,,进行比较。3.在操作5420中,如果数量"paramType,,的值为"0,,1300,则执行过程"解码InsertNodecmd"。过程"解码InsertNodecmd,,包括创建新的"InsertNode"bifsCommand元素2840,并将它附加到当前父元素2830(操作5310)。确定节点插入命令1300的nodelD1312、insertionPosition1316,以及position1320组件指定的值,并指定到新的"InsertNode,,bifsCommand元素的对应的属性。然后使用过程"解码SFNode,,来解释节点插入命令1300的SFNode组件1324。4.在操作5430中,将数量"paramType"的值与"l,,进行比较。5.在操作5440中,如果数量"paramType,,的值为1,则遇到4晉误。在有效sdsm数据流内不允许此值。解码sdsm位流的过程必须终止。6.在操作5450中,将数量"paramType"的值与"2,,进行比较。7.在操作5460中,如果数量"paramType"的值为"2"1336,则执行过程"解码InsertldxValuecmd"。过程"解码InsertldxValuecmd"包括创建新的"InsertlndexedValue"bifsCommand元素2840,并将它附加到当前父元素2830(操作5310)。确定IndexedValueInsertion命令1328的nodeID1340、inFieldID1344、insertionPosition1348,以及position1320组件指定的值,并指定到新的"InsertlndexedValue"bifsCommand元素的对应的属性。由组件"fieldvalue"1356表示的数据的类型(布尔、整数、字符串等等)由数量"nodeID"、"inFieldID,,的值,以及MPEG誦4系统规范中定义的表来确定。如果字段值的数据类型为"SFNode",那么,使用过程"解码SFNode,,来解释IndexedValueInsertion命令1328的"fieldvalue,,组件1356,并将"fieldvalue,,组件中包含的BIFS节点的名称指定到新的"InsertIndexedValue,,元素的"value,,属性。否则,将由"fieldvahie,,组件1356表示的数值或字符串值指定到新的"InsertlndexedValue"bifsCommand元素的"value,,属性。8.在操作5470中,如杲"paramType"的值不是"O"、"l"或"2",则它必须是"3"1368,因为此值由两个位的数据确定。因此,此步骤的结果始终是"是"。9.在操作5480中,执行过程"解码InsertRoutecmd"。过程"解码InsertRoutecmd"包括创建新的"InsertRoute"bifsCommand元素2840,并将它附加到当前父元素2830(操作5310)。确定RouteInsertion命令1360的isUpdateable1372、routeID1376、departureNodeID1380、departureFieldID1384、arrivalNodeID1388,以及arrivalFieldID1392组件指定的值,并指定到新的"InsertRoute"bifsCommand元素的对应的属性。10.在操作5490中,在完成过程"解码InsertNodecmd"、"解码InsertldxValuecmd,,或"解码InsertRoutecmd"之后,对sdsm位流的处理在操作5370中用数量"moreCommands"的值继续。过程"解码删除命令"如图55所示,过程"解码删除命令"包括下列步骤1.在操作5500中,将sdsm位流中的下两位指定到数量"paramType"。2.在操作5510中,将数量"paramType"的值与"O"进行比较。3.在操作5520中,如果数量"paramType,,的值为"0,,1412,则执行过程"解码DeleteNodecmd"。过程"解码DeleteNodecmd"包括创建新的"DeleteNode"bifsCommand元素2840,并将它附加到当前父元素2830(操作5310)。确定NodeDeletion命令1400的nodeID1418组件指定的值,并指定到新的"DeleteNode"bifsCommand元素的"nodeID,,属性。4.在操作5530中,将数量"paramType,,的值与'T,进行比较。5.在操作5540中,如果数量"paramType"的值为1,则遇到错误。在有效sdsm数据流内不允许此值。解码sdsm位流的过程6.在操作5550中,将数量"paramType,,的值与"2"进行比较。7.在操作5560中,如果数量"paramType"的值为"2"1436,则执行过程"解码DeleteldxValuecmd"。过程"解码DeleteldxValuecmd"包括创建新的"DeletelndexedValue,,bifsCommand元素2840,并将它附加到当前父元素2830(操作5310)。确定NodeDeletion命令1424的nodeID1442、inFieldID1448、deletionPosition1454,以及position1460组件指定的值,并指定到新的"DeletelndexedValue,,bifsCommand元素的对应的属性。8.在操作5570中,如果"paramType"的值不是"O"、"1"或"2",则它必须是"3"1478,因为此值由两个位的数据确定。因此,此步骤的结果始终是"是"。9.在操作5580中,执行过程"解码DeleteRoutecmd"。过程"解码DeleteRoutecmd,,包括创建新的"DeleteRoute"bifsCommand元素2840,并将它附加到当前父元素2830(操作5310)。确定RouteDeletion命令1466的routelD1484组件指定的值,并指定到新的"DeleteRoute"bifsCommand元素的"routelD,,属性。10.在操作5590中,在完成过程"解码InsertNodecmd"、"解码InsertldxValuecmd,,或"解码InsertRoutecmd,,之后,对sdsm位流的处理在操作5370中用数量"moreCommands,,的值继续。过程"解码替换命令"如图56所示,过程"解码替换命令,,包括下列步骤1.在操作5600中,将sdsm位流中的下两位指定到数量wparamType,'。2.在操作5610中,将数量"paramType"的值与"O,,进行比较。3.在操作5620中,如果数量"paramType"的值为"O"1508,则执行过程"解码ReplaceNodecmd"。106过程"解码R印IaceNodecmd,,包括创建新的"RepIaceNode"bifsCommand元素2840,并将它附加到当前父元素2830(操作5310)。确定NodeReplacement命令1500的nodeID1510组仵指定的值,并指定到新的"ReplaceNode"bifsCommand元素的"nodeID"属性。然后使用过程"解码SFNode"来解释NodeReplacement命令1500的SFNode组件1514。4.在操作5630中,将数量"paramType"的值与"l,,进行比较。5.在操作5640中,如果数量"paramType,,的值为'T,1538,则执行过程"解码ReplaeeFieldcmd"。过程"解码ReplaeeFieldcmd"包括创建新的"ReplaeeField"bifsCommand元素2840,并将它附加到当前父元素2830(操作5310)。确定FieldReplacement命令1520的nodeID1530,以及inFieldID1534组件指定的值,并指定到新的"ReplaeeField"bifsCommand元素的对应的属性。由组件"fieldvalue"1538表示的数据的类型(布尔、整数、字符串等等)由数量"nodeID"、"inFieldID,,的值,以及MPEG-4系统规范中定义的表来确定。如果字段值的数据类型为"SFNode,,,那么,使用过程"解码SFNode,,来解释FieldReplacement命令1520的"fieldvalue"组件1538,并将"fieWvahie"组件中包含的BIFS节点的名称指定到新的"ReplaceField,,元素的"value"属性。否则,将由"fieldvalue"组件1538表示的数值或字符串值指定到新的"ReplaeeField"bifsCommand元素的"value,,属性。6.在操作5650中,将数量"paramType,,的值与"2,,进行比较。7.在操作5660中,如果数量"paramType"的值为"2',1548,则执行过程"解码ReplaceldxValuecmd"。过程"解码ReplaceldxVahiecmd"包括创建新的"ReplacelndexedValue"bifsCommand元素2840,并将它附加到当前父元素2830(操作5310)。确定IndexedValueReplacement命令1540的nodeID1550、inFieldID1554、r印lacementPosition1558,以及position1560组件指定的值,并指定到新的"ReplacelndexedVahie,,bifsCommand元素的对应的属性。由组件"fieldvalue,,1564表示的数据的类型(布尔、整数、字符串等等)由数量"nodeID"、"inFieldID,,的值,以及MPEG-4系统规范中定义的表来确定。如果字段值的数据类型为"SFNode",那么,使用过程"解码SFNode,,来解释IndexedValueReplacement命令1540的"fieldvalue,,组件1564,并将"fieldvalue"组件中包含的BIFS节点的名称指定到新的"ReplacelndexedValue"元素的"value"属性。否则,将由"fieldvalue,,组件1564表示的数值或字符串值指定到新的"replaceIndexedVahie"bifsCommand元素的"vahie,,属性。8.在操作5670中,如果"paramType"的值不是"0"、'T,或"2",则它必须是"3,,1578,因为此值由两个位的数据确定。因此,此步骤的结果始终是"是"。9.在操作5680中,执行过程"解码ReplaceRoutecmd"。过程"解码ReplaceRoutecmd,,包括创建新的"ReplaceRoute"bifsCommand元素2840,并将它附加到当前"commandFrame,,元素2830(操作5310)。确定RouteReplacement命令1570的routelD1580、d印artureNodeID1584、departureFieldID1588、arrivalNodeID1590,以及arrivalFieldID1594组件指定的值,并指定到新的"ReplaceRoute"bifsCommand元素的对应的属性。10.在操作5490中,在完成过程"解码Inser飾decmd"、"解码InsertldxValuecmd,,或"解码InsertRoutecmd,,之后,对sdsm位流的处理在操作5370中用数量"moreCommands,,的值继续。过程"解码SFNode"图17概述了SFNode数据结构1700、1710、1730的结构。每一个SFNode数据结构都包含在父数据结构内。父数据结构可以是BIFS命令1120或另一个SFNode结构。不论是哪一种情况,在mp4bifs文档中将会有对应的父元素。在BIFS命令父结构的情况下,mp4bifs父元素将是bifsCommand元素2910。在SFNode父结构的情况下,mp4bifs父元素将是BIFSNode元素。如图57所示,过程"解码SFNode"包括下列步骤1.在操作5700中,将sdsm位流中的下一位指定到布尔量"isReused,,1704、1712、1732,并将所产生的值与值"真"(l)进行比较。2.在操作5710中,如果"isReused"的值为"真,,(1)1704,则创建新的"ReusedNode,,元素,并附加到当前mp4bifs父元素。然后,解释"nodeIDReP组件1708的值,并将所产生的整数值指定到新的"ReusedNode,,元素的"nodeRef"属性。用于指定值"nodeIDReP的位数由mp4bifs文档2800的"bifsconfig,,元素2810的"nodeldBits,,属性来确定。这就完成了SFNode结构的处理。3.在操作5720,如果"isReused,,的值为"O"("假")1712、1732,则从sdsm位流提取"localNodeType"1714、1734的值。表示此值的位数由父结构的身份和MPEG-4系统规范中定义的表来确定。父结构的身份、"localNodeType,,的值,以及MPEG-4系统规范中定义的表用于确定由此SFNode结构表示的BIFS节点的特定类型的"nodeNumber,,属性的整数值。整型量"nodeNumber"的值和MPEG-4系统规范中定义的表用于确定字符串量"nodeName,,的值,该值描述了由此SFNode结构表示的BIFS节点的类型。创建具有数量"nodeName"的值指定的元素名称的新BIFS节点元素,并附加到mp4bifs父元素。4.在操作5730中,将sdsm位流中的下一位指定到布尔量"isupdateable"1716、1736,并将所产生的值与值"真"(l)进行比较。5.在操作5740中,如果"isUpdateable"的值为"l",那么,从sdsm位流中提取数量"nodeID"的整数值。用于指定值"nodeID"的位数由mp4bifs文档2800的"bifsConfig,,元素2810的"nodeldBits,,属性来确定。并将所产生的值指定到在操作5720中创建的新的BIFS节点元素的"nodeID"属性。6在操作5750中,将关联的"ReplaceScene"元素的"USENAMES,,属性的布尔值与值"真"(1)进行比较。7.在操作5760中,如果"USENAMES"的值为"真,,,那么,从SFNode结构中提取字母数字字符的空值结束的字符串1720、1740,并将所产生的字符串值指定到在操作5720中创建的新的BIFS节点元素的"name,,属性。8.在操作5770中,将sdsm位流中的下一位指定到布尔量"maskAccess"1722、1742,并将所产生的值与值"真,,(l)进行比较。9.在操作5780中,如果"maskAccess,,的值为1("真"),则SFNode结构具有图17B所示的形式。在此情况下,maskAccess位1722后面有屏蔽位1726的序列。屏蔽位的数量由数量"nFields"1728的值表示。数量"nFields,,的值由操作5720中的数量"nodeNumber"的值和MPEG-4系统规范中定义的表来确定。在解释"maskAccess,,1722的值之后,数量"fieldlndex"被设置为0。在解释每一个屏蔽位1726之后,将数量"fleldlndex"的值增大1。具有值"l"的每一个屏蔽位1726后面都有数量"nodeNumber"的值和数量"fieldlndex"的值指定的属性字段的值。每一个属性字段的值都由过程"解码字段值,,来确定。10.在操作57卯中,如果"maskAccess"的值为0("假"),则SFNode结构具有图17C所示的形式。在此情况下,maskAccess位1722后面有endFlag位1744。如果endFlag位的值为"1,,1750,则已经达到SFNode结构的结尾。如果endFlag位的值为"0"1744,则endFlag位后面有fieldRef值1746,以及数量"nodeNumber,,的值和数量"fieldlndex"的值指定属性字段的值1748。每一个属性字段的值都由过程"解码字段值"来确定。过程"解码字段值"每一个SFNode结构的每一个属性字段都具有特定的字段数据类型属性和特定的fieldName字符串。字段数据类型属性可以是下列类型之一布尔、整数、浮点、vector2d、vector3d、旋转、颜色、时间、字符串、URL、节点或緩沖。每一个属性字段都也被定义为SFField(单值字段)或MFField(多值字段)。每一个属性字段的字段数据类型属性、fieldName字符串,以及MFField/SFField属性由SFNode结构的"nodeNumber,,数量5720的值、"fieldlndex,,或"fieldReP数量的值,以及MPEG-4系统规范中定义的表来确定。在SFFidd属性字段的情况下,用于表示字段值的位的序列由字段数据类型属性和MPEG-4系统规范中提供的信息来确定。在MFField属性字段的情况下,字段值由零或多个SFFidd值的集合来确定。包括MFField属性字段的SFField值的集合具有图17D或图17E所描述的形式。不论是哪一种情况,第一位1762、1782都必须为零。下一位指定布尔量"isList,,1766、1786的值。如果数量"isList"的值为"l",则MFField属性字段具有图17D所示的列表形式。在此情况下,isList位1766后面有endFlag位1770。如果endFlag位的值是"0,,1770,则endFlag位后面有根据当前字段数据类型格式化的SFField值1774。每一个这样的SFField值1774后面都有另一个endFlag位1770。具有值"1,,1772的endFlag位结束列表形式MFField。如果数量"isList"的值为"l",则MFField属性字段具有图17D所示的列表形式。在此情况下,isList位1766后面有5位整数值"numBits"17卯。"numBits"的值后面有包括numBits位的整数值"nFidds,,1792。"nFields"的值后面有nFiddsSFField值,每一个值都根据当前字段数据类型格式化。在每一种情况下(SFField、列表形式MFField或矢量形式MFField),每一个SFField值都可以转换为字符串。每一个这样的字符串都附加到属性字符串中,连续地附加的值由空格分隔。在字段数据类型为整数、浮点、vector2d、vector3d、旋转、颜色、时间的情况下,使用标准装置来将每一个数值都表示为字符串。在字段数据类型为布尔的情况下,值"0,,和"1,,由字符串"false,,和"true,,来表示。在字段数据类型为字符串和URL的情况下,每一个SFField值都用引号括起来。在字段数据类型为"node"的情况下,每一个SFField值都表示SFNode结构1700、1710或1720。每一个这样的SFNode结构都叫做"子节点"。每一个这样的子节点都通过过程"解码SFNode"的递归使用来解释。为每一个这样的子节点确定的字符串量"nodeName,,的值被附加到当前属性字符串。此外,创建具有由字符串量"nodeName"的值指定的元素名称的新的xml元素,并附加到过程"解码SFNode"的步骤3中创建的BIFS节点元素。在字段数据类型为"緩沖"的情况下,每一个SFField值都表示sdsmBIFS命令1120。每一个这样的BIFS命令都使用过程"解码sdsm块"的操作5330到操作来解释,以当前节点元素充当父元素。将与每一个BIFS命令关联的commandName字符串(例如,"InsertNode")附加到当前属性字符串。此外,创建具有由commandName字符串指定的元素名称的新的xml元素,并附加到过程"解码SFNode"的步骤3中创建的BIFS节点元素。在完成每一个字段数据值的解释之后,将所产生的属性字符串指定到对应的BIFS节点元素的FieldName属性。即,将所产生的属性字符串指定到具有由指定的BIFS节点的指定的属性字段的fieldName字符串给出的属性名称的属性的属性值。构成以Otlnfo数据结构表示的moov原子的xml表示。基于Qtlnfo数据结构3100创建mp4file文档2300中的第二个步骤是创建mp4二进制文件700中包含的moov原子712、754的xml表示。如图58所示,此步骤包括下列操作1.在操作5800中,创建新的"moov"元素2320,并将它附加到mp4file文档2300的最高一级的元素。2.在操作5805中,处理Qtlnfo数据结构3100的MoovHeader成员3116。如图31D所示,MoovHeader数据结构3170包括数量size3173、version&flags3176、ereationTime3178、modifiedTime3180、timeScale3183、duration3186,以及nextTrackID3188的值。将这些值中的每一个值都指定到新的"moov,,元素2320的名称类似的属性。3.在操作5810中,执行过程"处理Mp4flnitObjectDescr"。4.在操作5820中,如果成员UserData3123的值不为零,则执4亍过程"处理UserData数据结构"。5.在操作5825中,将零值指定到整型量"iTrack"。6.在操作5830中,将数量"iTrack"的值与Qtlnfo成员"numTracks"3118的值进行比较。7.在操作5835中,如果数量"iTrack,,的值等于Qtlnfo成员"numTracks"的值,则此步骤完成。此时,创建中间xml文件2250和2260的过程完成。创建最后的XMT-A文档的过程从"基于中间xml文档创建XMT-xml文档"继续。8.在操作5840中,如果数量"iTrack"的值不等于Qtlnfo成员"numTracks"的值,则创建新的trak元素2350,并将其附加到在操作5800中创建的新moov元素2320。这是"当前trak元素"。将Qtlnfo成员"trakarray"3120中的条目"iTrack,,指定到表示trak结构3200的地址的数量"trakAtom"。由值"trakAtom"表示的trak结构是"当前trak结构"。9.在操作5850中,执行过程"处理TrakHeader数据结构"。10.在操作5860中,执行过程"处理TrakMedia数据结构"。11.在操作5870中,如果当前trak结构的TrackEdit成员3208的值不为零,则执行过程"处理TrackEdit数据结构"。12.在操作5880中,如果当前trak结构的TrackReference成员3210的值不为零,则执行过程"处理TraekReference数据结构"。13.在操作5890中,将数量"iTrack,,的值增大1,然后重复将数量"iTrack"的值与数量"numTracks"进行比较的过程5830。过禾呈"处理Mu4InitObiectDescr"过程"处理Mp4InitObjectDescr,,包括下列步骤1.创建新的"mp4fiods,,元素2330,并附加到"moov,,元素2320。2将Mp4flnitObjectDescr成员"ObjectDescrlD,,3138的整数值指定到新的"mp4fiods"元素2360的"objectDescriptorID,,属性2370。3.将成员"inlineProfiles,,3146的布尔值指定到新的mp4fiods元素2360的"includelnlineProfilesFlag,,属性。4.如果成员"urlFlag"3140的布尔值为"真",则将由成员"urlString,,3143表示的字符串指定到"mp4fiods,,元素2360的"uiT,属性,从而完成Mp4flnitObjectDescr数据结构3130的处理。如果成员"urlFlag"3140的布尔值为"假",则将空字符串指定到mp4fiods元素2360的"url,,属性。5.基于Mp4flnitObjectDescr数据结构3130的"ProfileLevels"成员3148的对应的成员(ODProfileLevel、sceneProfileLevel、audioProfileLevd、visualProfileLevel,以及graphicsProfileLevel),将整数值指定到mp4fiods元素2360的"ODProfileLevelIndication,,、"sceneProfileLevelIndication,,、"audioProfileLevelIndication"、"visualProfileLevelIndication",以及"graphicsProfileLevdlndication,,属性。6.为Mp4flnitobjectDescr数据结构3130中的Esldlnc数组3156中的每一个mimEsIdlncs3153条目创建新的Esldlnc元素2380。将每一个新的Esldlnc元素2380附加到mp4fiods元素2360。Esldlnc数组3156中的每一个条目都包括整数成员"trackID"。将成员"trackID"的值指定到对应的新的Esldlnc元素2380的"trackID"属性2390。过程"处理UserData数据结构"过程"处理UserData数据结构"包括下列步骤1.创建新的"udta,,元素2340,并将它附加到新的"moov,,元素2320。如果UserData数据结构3280中的成员numCprt3284的值大于零,则对于成员cprt数组3286中的每一个条目重复下列步骤2.创建新的"cprt,,元素,并将它附加到新的"udta"元素2340。3.将cprt数组386中的选定的条目表示的cprt结构3290的version&flags成员3294的值指定到新的"cprt,,元素的"version"和"flags,,属'I"生。4.将"cprt"结构3290中的成员"language"3296的值指定新的"cprt,,元素的"language,,属性。5.基于cprt数据结构32卯中的成员"notice,,3298,创建新的xml文本节点,并将此新文本节点附加到"Cprt"元素。过程"处理TrakHeader数据结构"过程"处理TrakHeader数据结构"包括下列步骤1.将当前trak结构的TrackHeader成员的成员"version,,3216的值指定到当前"trak,,元素2600的"version"属性。2.将当前trak结构的TrackHeader成员的成员"flags,,3216的值指定到当前"trak,,元素2600的"flags,,属性。3.将当前trak结构的TrackHeader成员的成员"creationTime,,3218的值指定到当前"trak"元素2600的"creationTime,,属性。4.将当前trak结构的TrackHeader成员的成员"modifiedTime,,3220的值指定到当前"trak"元素2600的"modifiedTime,,属性。5.将当前trak结构的TrackHeader成员的成员"duration"3222的值指定到当前"trak,,元素2600的"duration"属115性。6.将当前trak结构的TrackHeader成员的成员"tracklD,,3224的值指定到当前"trak"元素2600的"trackID"属性。过程"处理TrakMedia数据结构"过程"处理TrakMedia数据结构"包括下列步骤1.创建新的"mdia,,元素2604,并将它附加到当前的"trak"元素2600。2.执行过程"处理MediaHeader数据结构"。3.执行过程"处理Handler数据结构"。4.执行过程"处理Medialnfo数据结构"。过禾呈"处理TrackEdit数纟居结构"过程"处理TrackEdit数据结构,,包括下列步骤1.创建新的edts元素2644,并将它附加到当前trak元素。如果当前TrackEdit数据结构3208、3236的成员EditList3242不为零,则执行下列补充步骤2.创建新的elst元素2648,并将它附加到新的edts元素2644。3.将当前TrackEdit数据结构3208、3236的EditList成员3242表示的EditList数据结构3244的成员version&flags3248的值指定到新的"elst,,元素2648的"version,,和"flags"属性。4.将零值指定到数量"segment",并将EditList数据结构3244中的成员"mimSegments"3250的值指定到数量"numSegments"。数量"numSegments"的值预计为"2"。5.对于EditList数据结构3244的EditSegment数组成员3252中的每一个numSegments条目,重复下列步骤。这些条目中的每一个条目都包括EditSegment结构3256。6.创建新的"segment,,元素,并附加到新的"elst,,元素2648。7.将EditSegment结构3256的成员"startTime"3258的值指定到新的"segment,,元素的"startTime,,属性。8.将EditSegment结构3256的成员"duration"3260的值指定到新的"segment"元素的"duration,,属性。9.将EditSegment结构3256的成员"relativeRate"3262的值指定到新的"segment,,元素的"relativeRate,,属性。过禾呈"处理TrackReference数l居结构"过程"处理TrackReference数据结构"包括下列步骤1.创建新的"treP元素2636,并将它附加到当前的trak元素2600。如果当前TrackReference数据结构3210、3264的成员Mpod3268不为零,则执行下列补充步骤2.创建新的"mpod,,元素2640,并将它附加到新的"tref,元素2636。3.将零值指定到数量"entry",并Mpod结构3268、3270中的成员"numEntries"3274的值指定到数量"numEntries",并创建名为"trackldList"的新字符串(作为空字符串)。4.如果数量"numEntries"的值大于零,则对于Mpod结构3270中的成员trackID数组3276中的每一个numEntries条目,重复下列三个步骤a.如果数量"entry"的值大于零,则将空格附加到字符串"trackIdList"。b.创建trackID数组3276中的条目"entry,,表示的整数值的字符串表示,并将结果附加到字符串"trackWList"。c.将数量"entry"的值增大1。5.将字符串"trackIdList,,的值指定到mpod元素2640的trackID属性。过禾呈"处理MediaHeader数才居结构"过程"处理MediaHeader数据结构,,包括下列步骤1.将MediaHeader结构3230、3300的成员"version"3306的值指定到当前"mdia"元素2604的"version"属性。2.将MediaHeader结构3230、3300的成员"flags"3306的值指定到当前"mdia"元素2604的"flags"属性。3.将MediaHeader结构3230、3300的成员"creationTime,,3308的值指定到当前"mdia,,元素2604的"creationTime,,属性。4.将MediaHeader结构3230、3300的成员"modifiedTime"3310的值指定到当前"mdia,,元素2604的"modifiedTime,,属性。5.将MediaHeader结构3230、3300的成员"timeScale"3313的值指定到当前"mdia,,元素2604的"timeScale,,属性。6.将MediaHeader结构3230、3300的成员"duration,,3316的值指定到当前"mdia"元素2604的"duration"属性。7.将MediaHeader结构3230、3300的成员"language"3318的值指定到当前"mdia,,元素2604的"language"属性。过程"处理Handler数据结构"过程"处理Handler数据结构"包括下列步骤1.创建新的"hdlr,,元素2608,并将它附加到当前"mdia"元素2604。2.将Handler结构3232、3320的成员"version,,3326的值指定到新的"hdlr,,元素2608的"version"属性。3.将Handler结构3232、3320的成员"flags"3326的值指定到新的"hdlr,,元素2608的"flags"属性。4.将Handler结构3232、3320的成员"handlerType"3328的值指定到新的"hdlr,,元素2608的"handlerType,,属性。5.将Handler数据结构3232、3320的成员"name,,3330的值指定到新的"hdlr,,元素2608的"name,,属性。过禾呈"处理Medialnfo数据结构"过程"处理Medialnfo数据结构,,包括下列步骤1.创建新的"minP元素2612,并将它附加到当前"mdia"元素1182604。2.执4亍过程"处理MediaDatalnfo数据结构"。3.执行过程"处理MedialnfoHeader数据结构"。4.执行过程"处理SampleTables数据结构"。过程"处理MediaDatalnfo数据结构"过程"处理MediaDatalnfo数据结构"包括下列步骤1.创建新的"dinP元素2616,并将它附加到当前"minF元素2612。2.如果MediaDatalnfo结构3338的成员DataRefTable3358不是零,则执行下列步骤3.创建新的"dref"元素2620,并将它附加到新"dinP元素2616。4.将由MediaDatalnfo结构3338、3350中的成员DataRefTable3358表示的成员"version"3366的值指定到新的"dref,元素2620的"version,,属性。5.将DataRefTable结构3360的成员"flags,,3366的值指定到新的"dref"元素2620的"flags"属性。6.对于DataRefTable结构3360中的成员dataRef数组3370中的每一个条目,重复下列步骤7.创建新的"urlData"元素2624,并将其附加到新"dreP元素2620。8.将由DataRef数组3370中的选定条目表示的dataRef结构3380中的成员"version,,3386的值指定到新的"urlData"元素2624的"version"属性。9.将dataRef结构3380的成员"flags"3386的值指定到新的"urlData,,元素2624的"flags,,属性。10.如果dataRef结构3380的成员"flags"3386的值不是T,成员"(lataRefType,,3388的值是"url"(即,u-r-l-space),那么,将成员"dataRefData,,3390解释为字符串,并将结果指定到新的"urlData"元素2624的"location"属性。过程"处理MedialnfoHeader数据结构"给定trak结构内包含的MedialnfoHeader数据结构可以是三种类型中的某一种类型,具体取决于与trak结构关联的媒体数据的流类型。如果当前"trak"结构与场景描述流(sdsm)或对象描述符流(odsm)关联,那么,MedialnfoHeader结构3343必须是"Mpeg4MediaHeader,,数据结构。此结构具有成员"size"、"version"和"flags"。在此情况下,过程"处理MedialnfoHeader数据结构,,包括下列步骤1.创建新的"nmhd,,元素2632,并将它附加到当前"minP元素2616。2.将MedialnfoHeader结构3343的成员"version"的值指定到新的"nmhd,,元素2632的"version,,属性。3.将MedialnfoHeader结构3343的成员"flags"的值指定到新的"nmhd,,元素2632的"flags,,属性。如果当前"trak,,结构与音频流关联,那么,MedialnfoHeader结构3343必须是"SoundMediaHeader,,数据结构。此数据结构具有成员"size"、"鶴ion,,、"flags",和"balance"。在此情况下,过程"处理MedialnfoHeader数据结构,,包括下列步骤1.创建新的"smhd"元素2632,并将它附加到当前"minf"元素。2.将MedialnfoHeader结构3343的成员"version,,的值指定到新的"smhd,,元素2632的"version"属性。3.将MedialnfoHeader结构3343的成员"flags"的值指定到新的"smhd,,元素2632的"flags,,属性。4.将MedialnfoHeader结构3343的成员"balance"的值指定到新的"smhd,,元素2632的"balance"属性。如果当前"trak"结构与视频流关联,那么,MedialnfoHeaderstmcture3343必须是"VideoMediaHeader,,数据结构。此数据结构具有成员"size"、"version","flags"、"graphMode"、"opRed,,、"opGreen"和"叩Blue,,。在此情况下,过程"处理MedialnfoHeader数据结构,,包括下列步骤1.创建新的"vmhd,,元素2632,并将它附加到当前"minP元素。2.将MedialnfoHeader结构3343的成员"version"的值指定到新的"vmhd"元素2632的"version"属性。3.将MedialnfoHeader结构3343的成员"flags"的值指定到新的"vmhd,,元素2632的"flags,,属性。4.将MedialnfoHeader结构3343的成员"graphMode"的值指定到新的"vmhd"元素2632的"transferMode"属性。5.将MedialnfoHeader结构3343的成员"叩Red"的值指定到新的"vmhd,,元素2632的"opColorRed,,属性。6.将MedialnfoHeader结构3343的成员"opGreen"的值指定到新的"vmhd"元素2632的"叩ColorGreen"属性。7.将MedialnfoHeader结构3343的成员"opBlue"的值指定到新的"vmhd"元素2632的"叩ColorBlue,,属性。过程"处理SampleTables数据结构"过程"处理SampleTables数据结构"包括下列步骤1.创建新的"stbl"元素2628,并将它附加到当前"minP元素2612。2.执行过程"处理SampleToChunkTable数据结构"。3.执行过程"处理ChunkOffsetTable数据结构"。4.执行过程"处理TimeToSampleTable数据结构"。5.执行过程"处理SampleSizeTable数据结构"。6.如果SampleTables3400成员SyncSampleTabie3416的值不是零,则执行过程"处理SyncSampleTabie数据结构"。7.执行过程"处理SampleDescrTable数据结构"。过程"处理SampleToChunkTable数据结构"SampleToChunkTable数据结构包括样本表数据结构3420,其中,成员"tablearray,,中的每一个条目都包括SampIeToOumk结构3460。过程"处理SampleToChunkTable数据结构,,包括下列步1.创建新的"stsc,,元素2656,并将它附加到当前"stbl"元素2628、2652。2.将SampleTables成员SampleToChunkTable3406指定到样本表结构3420"SampleToChunkTable"。3.将SampleToChunkTable成员"version"3426的值指定到新的"stsc,,元素2656的"version"属性。4.将SampleToChunkTable成员"flags"3426的值指定到新的"stsc,,元素2656的"flags,,属性。5.将SampleToChunKTable成员"numEntries"3428的值指定到数量"numEntries"。将零值指定到数量"entry",并重复下列步骤,直到数量"entry"的值等于数量"numEntries"的值6.创建新的"sampleToChunk"元素,并将它附加到新的"stsc,,元素2656。7.将SampleToChunkTable成员"tablearray"3430中的条目"entry"指定到SampleToChunk结构3460"SampleToChimkTableEiitry,,。8将SampleToChunkTableEntry成员"firstChunk',3463的值指定到新的"sampleToChunk,,元素的"firstChunk"属性。9.将SampleToChunkTableEntry成员"numSamples"3466的值指定到新的"sampleToChunk"元素的"numSamples"属性。10.将SampleToChunkTableEntry成员"description"3468的值指定到新的"sampleToChimk"元素的"sampleDesc,,属性。11.将数量"entry,,的值增大1。过程"处理ChunkOffsetTable数据结构"ChunkOffsetTable数据结构3408包括样本表数据结构3420,其中,成员"tablearray"中的每一个条目都包括整数序列。过程"处理ChunkOffsetTable数据结构,,包括下列步骤1.创建新的"stco"元素2664,并将它附加到当前"stbl,,元素2652。2.将SampleTables成员ChunkOffsetTable3408指定到样本表结构3420"ChunkOffsetTable"。3.将ChunkOffsetTable成员"version"的值指定到新的"stco,,元素2664的"version,,属性。4.将ChunkOffsetTable成员"flags"的值指定到新的"stco"元素2664的"flags"属性。5.将ChunkOffsetTable成员"numEntries"3428的值指定到数量"immEntries"。将零值指定到数量"entry",并重复下列步骤,直到数量"entry,,的值等于数量"numEntries,,的值6.创建新的"chunkOffset"元素,并将它附加到新的"stco"元素2664。7将成员"tablearray"中的条目"entry"的值指定到数量"offset"。8将数量"offset"的值指定到新的"chunkOffset"元素的"offset"属性。9.将数量"offset"的值与Qtlnfo成员"mdatarray"3113中的每一个条目3160中的成员"start"3166和"size,,3163的值进行比较,以判断与指定的偏移值关联的mdat原子706的索引"mdatld"的值。数量"mdatld"的值通过"mdatarray"3113中的条目的索引来判断,数量"offset"的值大于成员"start"3166的值,小于成员"start,,3166和"size,,3163的和。10.将mdat数组条目"mdatld,,的成员"start"3163的值指定到数量"mdatStarf,。将"mdatStart"的值加"8",并将数量"offset,,的值减去所得的结果,并将结果指定到数量"mdatOffset"。11.将数量"mdatld,,的值指定到新的"chunkOffset,,元素的"mdatld,,属性。12.将数量"mdatOffset,,的值指定到新的"chunkOffset"元素的"mdatOffset,,属性。13.将数量"entry"的值增大1。过程"处理TimeToSampleTable数据结构"TimeToSampleTable数据结构3410包括样本表数据结构3420,其中,成员"tablearray"中的每一个条目都包括TimeToSample结构3470。过程"处理TimeToSampleTable数据结构"包括下列步骤1.创建新的"stts,,元素2660,并将它附加到当前"stbl,,元素。2.将SampleTables成员TimeToSampleTable3410指定到样本表结构3420"TimeToSampleTable"。3.将TimeToSampleTable成员"version"3426的值指定到新的"stts,,元素2660的"version,,属性。4.将TimeToSampleTable成员"flags"3426的值指定到新的"stts"元素2660的"flags,,属性。5.将TimeToSampleTable成员"numEntries"3428的值指定到数量"numEntries"。将零值指定到数量"entry",并重复下列步骤,直到数量"entry"的值等于数量"numEntries"的值6.创建新的"timeToSample"元素,并将它附加到新的"stts"元素2660。7.将TimeToSampleTable成员"tablearray"3430中的条目"entry"指定到TimeToSample结构3470"TimeToSampleTableEntry,,。8.将TimeToSampleTableEntry成员"count"3473的值指定到新的"timeToSample,,元素的"count,,属性。9.将TimeToSampleTableEntry成员"duration,,3476的值指定到新的"timeToSample,,元素的"duration,,属性。10.将数量"entry"的值增大1。过程"处理SampleSizeTable数据结构"过程"处理SampleSizeTable数据结构"包括下列步骤1.创建新的"stsz"元素2668,并将它附加到当前"stbl,,元素2652。2.将SampleTables成员SampleSizeTable3413指定到SampleSizeTable结构3440"SampleSizeTable"。3.将SampleSizeTable成员"version,,3446的值指定到新的"stsz,,元素2668的"version"属性。4.将SampLeSizeTable成员"flags,,3446的值指定到新的"stsz,,元素2668的"flags,,属性。5.将SampleSizeTable成员"numEntries"3453的值指定到数量"numEntries,,。6将数量"numEntries"的值指定到新的"stsz"元素2668的"numSamples"属性。7.如果SampleSizeTable3413、3440成员"sampleSize,,3450的值不是零,则将SampleSizeTable3413、3440成员"sampleSize,,3450的值指定到新的"stsz"元素的"sizeForAll"属性。在此情况下,此过程完成。8.如果SampleSizeTable3413、3440成员"sampleSize,,3450的值为零,则将零值指定到数量"entry",并重复下列步骤,直到数量"entry"的值等于数量"numEntries,,的值9.创建新的"sampleSize,,元素,并将它附加到新的"stsz"元素2668。10.将SampleSizeTable成员"tablearray,,3456中的条目"entry"的值指定到新的"sampieSize"元素的"size,,属性。11.将数量"entry"的值增大1。过程"处理SvncSampleTable数据结构"SyncSampIeTable数据结构3416包括样本表数据结构3420,其中,成员"tablearray"中的每一个条目都包括整数序列。过程"处理SyncSampleTable数据结构"包括下列步骤1.创建新的"stss,,元素2672,并将它附加到当前"stbl"元素2652。2,将SampleTables成员SyncSampleTable3416指定到样本表结构3420"SyneSampleTable"。3.将SyncSampleTable成员"version"3426的值指定到新的"stss,,元素2672的属性"version"。4.将SyncSampleTable成员"flags"3426的值指定到新的"stss,,元素2672的属性"flags"。5.将SyncSampleTable成员"numEntries"3428的值指定到数量"numEntries"。将零值指定到数量"entry",并重复下列步骤,直到数量"entry"的值等于数量"numEntries"的值6.创建新的"syncSample,,元素,并将它附加到新的"stss,,元素2672。7.将SyncSampleTable成员"tablearray"3430中的条目"entry"的值指定到新的"syncSample"元素的属性"sampleNumber,,。8,将数量"entry"的值增大1。过程"处理SampleDescrTable数据结构"SampleDeserTable数据结构3418包括样本表数据结构3420,其中,成员"tablearray"中的每一个条目都包括SampleDescription结构3480。过程"处理SampleDescrTable数据结构"包括下列步骤1.创建新的"stsd,,元素2676,并将它附加到当前"stbl,,元素2652。2.将SampleTables成员SampleDescrTable3418指定到样本表结构3420"SampIeDescrTable"。3.将SampleDescrTable成员"version"3426的值指定到新的"stsd,,元素2676的属性"version"。4.将SampleDescrTable成员"flags"3426的值指定到新的"stsd"元素2676的属性"flags"。5.将SampieDescrTable成员"n腿Entries,,3428的值指定到数量"numEntries"。将零值指定到数量"entry",并重复下列步骤,直到数量"entry,,的值等于数量"numEntries"的值6.将SampleDescrTable成员"tablearray"3430中的条目"entry,,指定到SampleDescription结构3480"SampleDescription"。7如果SampleDescription成员"dataFormat,,的值对应于"mp4a",则创建新的"mp4a,,元素,并将它附加到新的"sts;d"元素2676。如果SampleDescription成员"dataFormat"的值对应于"mp4v",则创建新的"mp4v"元素,并将它附加到新的"sts;d,,元素2676。如果SampleDescription成员"dataFormat"的值对应于"mp4s",则创建新的"mp4s,,元素,并将它附加到新的"sts,d,,元素2676。所产生的元素("mp4a"、"mp4v",或"mp4s,,)将被称为"mp4",元素2680。8*将SampleDescription成员"dataReference,,3488的值指定到新的"mp4",元素2680的属性"dataReflndex"。9.创建新的"esds"元素2684,并将它附加到新的"mp4",元素2680。10,将SampleDescription成员"esdVersion,,3490的值指定到新的"esds,,元素2684的属性"version"。11.将SampleDescription成员"esdData"3496的值指定到表示字节数组的地址的数量"esdData,,,并将零值指定到数量"esdPos"。12.执行过程"解码esdData数组"。13.将数量"entry"的值增大1。执行过程"解码esdData数组"127过程"解码esdData数组,,包括下列步骤1.将数组"esdData"中的条目"esdPos,,的值指定到数量"EsDescTag",并将数量"esdPos"的值增大"l"。2.使用过程"获取标记大小",以获得数量"numBytes,,的值。3如果数量"EsDescTag"的值等于常量"ES—DescrTag,,的值(3),则执行下列步骤。否则,退出。4.创建新的"ES—Descr,,元素2688、2700,并将它附加到当前"esds"元素2684。5.将数量"numBytes"的值指定到新的"ES—Descr"元素2688、2700的属性"size"。6.将数组"esdData,,中的条目"esdPos"和"esdPos+l"的值組合为16位整数,将结果指定到新的"ES—Descr,,元素2688的"ES—ID"属性2700,并将数量"esdPos"的值增大"2"。7.将数组"esdData"中的条目"esdPos"的值指定到数量"flagsAndPriority",然后,将此值的高阶5位指定到数量"priority",将低阶3位指定到数量"flags",并将数量"esdPos"的值增大"l"。8.将数量"priority"的值指定到新的"ES—Descr,,元素2688、2700的属性"priority"。9.将数量"flags"的值指定到新的"ES—Descr"元素2688、2700的属性"flags"。10.如果数量"flags,,的低阶位为"l",将值"真"指定到新的"ES—Descr,,元素2688的属性"OCRstreamFlag"。11.重复下列步骤,直到数量"numBytes"的值小于"l":12.将数组"esdData"中的条目"esdPos,,的值指定到数量"descrTag",并将数量"numBytes"的值減少"l",并将数量"esdPos"的值增大"l"。13.使用过程"获取标记大小,,来确定数量"descrSize"的值,并将数量"mimBytes"的值减少用于指定此数量的值的字节数量。14将数量"numBytes"的值减少数量"descrSize"的值。15.如果数量"descrTag,,的值等于常量"DecoderConfigDescrTag"的值(4),则执行过程"处理解码器配置描述符"。16.如果数量"descrTag,,的值等于常量"SLConfigDescrTag,,的值(6),则执行过程"处理sl配置描述符"。17.否则(即,数量"descrTag,,的值不等于"DecoderConfigDescrTag"或者"SLConfigDescrTag,,中的任何一个),则将数量"esdPos"的值增大数量"infoSize"的值。过程"处理解码器配置描述符"过程"处理解码器配置描述符,,包括下列步骤1.创建新的"DecoderConfigDescriptor,,元素2710,并将它附加到当前"ES—Descr,,元素2700。2.将数量"descrSize"的值指定到新的"DecoderConfigDescriptor"元素2710的"size,,属性。3.将数组"esdData"中的条目"esdPos"的值指定到数量"objectType",并指定到新的"DecoderConfigDescriptor"元素2710的属性"objectType",将数量"esdPos"的值增大"l"。4.将数组"esdData"中的条目"esdPos,,的值指定到数量"streamType",并将数量"esdPos"的值增大"l"。5.如果数量"streamType"的第二位("2"位)不是零,则将值"真,,指定到新的"DecoderConfigDescriptor"元素2710的属性"upstream"。6.将数量"streamType"的值除以4(向右移两位),并结果指定到数量"streamType,,和新的"DecoderConfigDescriptor,,元素2710的属性"streamType"。7.将数组"esdData,,中的下三个条目组合成24位值,并将结果指定到新的"DecoderConfigDescriptor"元素2710的属性"bufferSize",并将数量"esdPos"的值增大"3"。8.将数组"esdData,,中的下四个条目组合成32位值,并将结果指定到新的"DecoderConfigDescriptor"元素2710的属性"maxBitrate",并将数量"esdPos"的值增大"4"。9.将数组"esdData,,中的下四个条目组合成32位值,并将结果指定到新的"DecoderConfigDescriptor,,元素2710的属性"avgBitrate",并将数量"esdPos"的值增大"4"。10.将数量"descrSize"的值减少13。11.如果数量"descrSize"的值大于零,则重复下列步骤,直到数量"descrSize"的值小于1:12.将数组"esdData,,中的下一条目指定到数量"infoTag",并将数量"descrSize"的值减少"l"。13.使用过程"获取标记大小,,来确定跟随在指定到数量"infoTag,,的值之后的标记大小值的值,并将结果指定到数量"infoSize",并将数量"descrSize,,的值减少用于指定此数量的值的字节数量。14.将数量"descrSize"的值减少数量"infoSize"的值。15.如果数量"infoTag,,的值等于常量"DecoderSpecificInfoTag"的值(5),则执行过程"处理解码器特定信息"。否则,将数量"esdPos,,的值增大数量"infoSize,,的值。过程"处理sl配置描述符"过程"处理sl配置描述符"包括下列步骤1.创建新的"SLConfigDescriptor,,元素2760,并将它附加到当前"ES—Descr,,元素2700。2.将数组"esdData,,中的条目"esdPos,,的值指定到新的"SLConfigDescriptor,,元素2760的属性"predefined",并将数量"esdPos"的值增大"l"。过程"处理解码器特定信息""DecoderSpecificInfoTag,,之后的数组"esdData,,中的条目的内容取决于数量"streamType"和"objectType"的值。如果数量"streamType"的值为"3",则执行过程"处理BIFS配置"。如果数量"streamType,,的值为"4",并且数量"objectType"的值为"108",则执行过程"处理JPEG配置"。如果数量"streamType,,的值为"4",并且数量"objectType"的值不是"108",则执行过程"处理视频配置"。如果数量"streamType"的值为"5",则执行过程"处理音频配置"。过程"处理BIFS配置"过程"处理BIFS配置,,包括下列步骤这些步骤将"esdData,,数组中的条目的"infoSize,,的序列,从条目"esdPos,,开始,当作位的序列。1.创建新的"BIFS—DecoderConfig,,元素2720,并将它附加到当前"DecoderConfigDescriptor,,元素2710。2.如果数量"objectType"的值为"2",则从数组"esdData"(从条目"esdPos"开始)提取下列数量的值,并将每一个所产生的值指定到新的BIFS—DecoderConfig元素的名称类似的属性a.use3DMeshCoding(1位),b.usePredictiveMFField(1位),c.n腿NodeldBits(5位),d.n腿RouteldBits(5位),e.numPROTOIDWts(5位),3.否则(即,数量"objectType"的值不是"2"),从数组"esddata,,(从条目"esdPos,,开始)提取下列数量的值,并将每一个所产生的值指定到新的BIFS—DecoderConfig元素的名称类似的属性a.n腿NodeldBits(5位),b.numRouteldBits(5位),4.提取数组"esdData"中的下一位的值的值。如果结果是"0",则将值"假"指定到新的BIFS—DecoderConfig元素的属性131"isCommandStream",并跳到步骤8。如果结果是'T,,则将值"真"指定到属性"isCommandStream,,,并执行下列步骤。5.提取数组"esdData,,中的下一位的值的值。如果结果是"0",则将值"假"指定到新的BIFS—DecoderConfig元素的属性"pixelmetric"。否则,将值"真"指定到属性"pixelmetric"。6.提取数组"esdData"中的下一位的值的值。如果结果是"0",则将值"假,,指定到新的BIFS—DecoderConfig元素的属性"hasSize",并跳到步骤8。如果结果是"l",则将值"真"指定到属性"hasSize",并执行下列步骤。7.从数组"esdData,,(从条目"esdPos,,开始)提取下列数量的值,并将每一个所产生的值指定到新的BIFS—DecoderConfig元素的名称类似的属性a.pixelwidth(16位),b.pixelHeight(16位)。8.将数量"esdPos"的值增大数量"infoSize"的值。过程"处理JPEG配置"过程"处理JPEG配置,,包括下列步骤1.创建新的"JPEG—DecoderConfig,,元素2730,并将它附加到当前"DecoderConfigDescriptor,,元素2710。■2.将数量"infoSize,,的值指定到新的"JPEG—DecoderConfig"元素2730的"size"属性。3.将数组"esdData"中的下两个条目组合成16位值,并将结果指定到新的"JPEG—DecoderConfig"元素2730的属性"headerLength",并将数量"esdPos,,的值增大"2"。4.将数组"esdData"中的下两个条目组合成16位值,并将结果指定到新的"JPEG—DecoderConfig"元素2730的属性"Xdensity",并将数量"esdPos,,的值增大"2"。5.将数组"esdData"中的下两个条目组合成16位值,并将结果指定到新的"JPEG—DecoderConfig"元素2730的属性"Ydensity",并将数量"esdPos,,的值增大"2"。6将数组"esdData,,中的条目"esdPos"的值指定到新的"JPEG—DecoderConfig,,元素2730的属性"mimComponents",并将数量"esdPos"的值增大"l"。过程"处理视频配置"过程"处理视频配置,,包括下列步骤1.创建新的"VisuaIConfig,,元素2740,并将它附加到当前"DecoderConfigDescriptor,,元素2710。2.将数量"infoSize,,的值指定到新的"VisualConfig,,元素2740的"size"属性。3.将数量"esdPos"的值增大数量"infoSize"的值。过程"处理音频配置"过程"处理音频配置,,包括下列步骤1.创建新的"AudioConfig,,元素2750,并将它附加到当前"DecoderConfigDescriptor,,元素2710。2将数量"infoSize"的值指定到新的"AudioConfig"元素2750的"size"属性。3.将数量"esdPos"的值增大数量"infoSize"的值。基于中间xml文档对创建XMT-A文档。如图59所示,创建XMT-A文档100的过程包括下列步骤1.在操作5900中,使用标准xml装置创建新的空白XMT-A文档100。2.在操作5920中,执行过程"创建XMT-A标头"。3.在操作5940中,使用标准xml装置创建新的空白XMT-ABody元素120,并将它附加到新的XMT-A文档100。4.在操作5960中,执行过程"为OD命令创建par元素"。5.在操作5980中,执行过程"为BIFS命令创建par元素"。下面将描述步骤2、4和5。在这些步骤的准备过程中,将从属于mp4file文档的"moov,,元素的"timeScale"属性的值指定到数量"timeScale"。过程"创建XMT-A标头元素,,如图60所示,过程"创建XMT-A标头"包括下列步骤1.在操作6000中,使用标准xml装置创建新的Header元素110,并将它附加到XMT-A文档100。2.在操作6010中,执行过程"创建InitialObjectDescriptor"。3.在操作6020中,执行过程"创建profiles元素"。4.在操作6030中,执行过程"创建Descr元素"。5.在操作6040中,使用标准xml装置选择mp4file文档2300中的从属于mp4fiods元素2330、2360的每一个元素。6.在操作6050中,对于从属于mp4fiods元素2330、2360的每一个Esldlnc元素2380,执行过程"处理Esldlnc元素"。步骤2中的过程"创建InitialObjectDescriptor"包括下列操作a.使用标准xml装置创建新的InitialObjectDescriptor元素130,并将它附加到新的Header元素110。b.使用标准xml装置定位mp4file文档2300中包含的moov元素2320。c.使用标准xml装置定位moov元素2320中包含的mp4fiods元素2330、2360。d.创建新的字符串,该字符串包括前缀"IODID:",后面是mp4fiods元素2360的objectDescriptorID属性2370的值,并将此字符串的值指定到InitialObjectDescriptor元素130的ODID属性。步骤3中的过程"创建Profiles元素,,包括下列操作a.使用标准xml装置创建新的profiles元素150,并将它附加到新的InitialObjectDescriptor元素130。b.将mp4fiods元素2360的includelnlineProfilesFlag属性的值指定到Profiles元素150的incIudelnlineProfileLevelFlag属性。c.基于mp4fiods元素2360的对应的属性的值指定到Profiles元素150的下列属性i.sceneProfileLevdlndicationii.ODProfileLevellndicationiii.audioProfileLevellndicationiv.visualProfileLevellndicationv.graphicsProfileLevellndication指定到Profiles元素150的属性的值可以包括表示由mp4fiods元素2360的对应的属性表示的特定数值的字母数字字符串。例如,可以使用字符串"None,,表示数值"-l"或"255"。对于mp4fiods元素2360的属性允许的其他数值可以替换为MPEG-4系统规范中定义的字符串值。步骤4中的过程"创建Descr元素"包括下列操作a.4吏用标准xml装置创建新的Descr元素160,并将它附加到新的InitialObjectDescriptor元素130。b.使用标准xml装置创建新的esDescr元素170,并将它附力口到新的Descr元素160。步骤5包括使用标准xml装置选择mp4file文档2300中的从属于mp4fiods元素2320、2360的每一个元素2380。此步骤中选定的元素预计是Esldlnc元素2380。对于此步骤中标识的每一个Esldlnc元素2380,执行过程"处理Esldlnc元素"。过程"处理Esldlnc元素"对于从属于mp4file文档2300中的mp4fiods元素2360的每一个Esldlnc元素2380,执行下列操作1.在操作6100中,将Esldlnc元素2380的trackID属性23卯的值指定到数量"trackID"。2.在操作6110中,使用标准xml装置来查找mp4file文档2300中的从属于moov元素2320的trak元素2350(trak元素2350的trackID属性的值匹配数量"trackID,,的值)。3.在操作6120中,使用标准xml装置查找前面的步骤中标识的trak元素2350、2600内包含的ES—Descr元素2688。4.在操作6130中,使用标准xml装置创建新的ES—Descriptor元素180、190,并将它附加到esDescr元素170。5.在操作6140中,将在步骤"2"中确定的字符串量"trackType,,的值与字符串"sdsm"进行比较。6.在操作6150中,如果字符串量"trackType"的值为"sdsm",则执行过程"为场景描述流创建DecoderConfigDescriptor,,。7.在操作6160中,执行过程"创建BIFSConfig"。8.在操作6170中,如果字符串量"trackType"的值不是"sdsm",将字符串量"trackType"的值与字符串"odsm,,进行比较。9.在操作6180中,如果字符串量"trackType"的值为"odsm",则执行过程"为对象描述符流创建DecoderConfigDescriptor,,。10.在操作6190中,执行过程"为trak从tref元素获取mpodTracklDs,,。步骤2包括下列操作,这些操作在标识选择的trak元素之后执行a.使用标准xml装置查找从属于指定的trak元素2600的hdlr元素2608。b.将此hdlr元素的"name"属性的值指定到字符串量"trackName,,。c.将此hdlr元素的"handlerType,,属性的值指定到字符串量"trackType"。此数量的值预计是"sdsm,,或"odsm"。d.通过将字符串"IOD"与数量"trackName"和字符串"ESID:1,,的值连接来创建新的字符串量"ES—ID",并将结果指定到新的ES—Descriptor元素180、190的"ES—ID,,属性。e.创建新的decConfigDescr元素646,并将它附加到ES—Descriptor元素180、190、640。f.创建新的DecoderConfigDescriptor元素650,并将它附加到decConfigDescr元素646。g.创建新的slConfigDescr元素660,并将它附加到ES—Descriptor元素640。h.创建新的slConfigDescr元素666,并将它附加到slConfigDescr元素660。i.创建新的"predefined"元素,并将它附加到SLConfigDescriptor元素666。j.将值"2,,指定到"predefined"元素的"value,,属性。为场景;l苗述;充创建DecoderConfigDescriptor1.使用标准xml装置查找mp4file文档2300中的所选择的trak元素2600内包含的ES—Descr元素2688、2700内包含的DecoderConfigDescriptor元素2710。2.将DecoderConfigDescriptor元素2710的"avgBitrate,,和"maxBitrate"属性的值指定到XMT-A文档100中的新的DecoderConfigDescriptor元素650的对应的属小生。3.将DecoderConfigDescriptor元素2710的"bufferSize,,属性的值指定到新的DecoderConfigDescriptor元素650的"bufferSizeDB"属性。4.基于mp4file文档2300中的DecoderConfigDescriptor元素2710的"streamType,,属性的数值,将字符串值指定到XMT-A文档100中的新的DecoderConfigDescriptor元素650的"streamType"属性。mp4file文档2300中的DecoderConfigDescriptor元素2710的"streamType,,属性的值预计匹配图62A中的第一列6200中的某一个条目。图62A中的第二列6220中的对应的条目被指定到XMT-A文档100中的新的137DecoderConfigDescriptor元素650的"streamType,,属性。在此情况下,mp4file文档2300中的DecoderConfigDescriptor元素2710的streamType属性的值预计为"3",将值"SceneDescription"指定到XMT-A文档100中的新的DecoderConfigDescriptor元素650的"streamType"的属性。5.基于mp4file文档2300中的DecoderConfigDescriptor元素2710的"streamType,,属性的数值,将字符串值指定到XMT-A文档100中的新的DecoderConfigDescriptor元素650的"objectTypelndication"属性。mp4file文档2300中的DecoderConfigDescriptor元素2710的"objectType,,属性的值预计匹配图62B中的第一列6240中的某一个条目。图62B中的第二列6260中的对应的条目被指定到XMT-A文档100中的新的DecoderConfigDescriptor元素650的"objectTypeIndication,,属性。6.创建新的decSpecificInfo元素656、680,并将它附加到DecoderConfigDescriptor元素650。创建BiFSCo由过程"创建BIFS配置"包括下列步骤1.创建新的BIFSConfig元素686,并将它附加到新的decSpecificInfo元素680。2.使用标准xml装置查找从属于DecoderConfigDescriptor元素2710的BIFS—DecoderConfig元素2720。3.将BIFS—DecoderConfig元素2720的"nodeIdBits,,属性的值指定到数量nodeldBits以及BIFSConfig元素686的"nodeIDbits"属性。4.将BIFS—DecoderConfig元素2720的"routeldBits,,属性的值指定到BIFSConfig元素686的"routeIDbits"属性。5.如果数量"v2Config,,的值为"真",则执行下列三个步骤a.将BIFS—DecoderConfig元素2720的"protoldbits"属性的值指定到BIFSConfig元素686的"PROTOIDbits,,属性。b.将BIFS—DecoderConfig元素2720的"use3DMeshCodmg,,属性的值指定到BIFSConfig元素686的"use3DMeshCoding"属性。c.将BIFS—DecoderConfig元素2720的"usePredictiveMFField,,属性的值指定到BIFSConfig元素686的"usePredictiveMFField,,属性。6.如果BIFS—DecoderConfig元素2710的"commandStream,,属性的值为"真",则执行下列步骤a.创建新的"commandStream"元素690,并将它附加到BIFSConfig元素686。b.将BIFS—DecoderConfig元素2710的"pixelMetric,,属性的值指定到commandStream元素686的"pixelMetric,,属性。c.创建新的"size"元素696,并将它附加到commandStream元素690。d.将BIFS—DecoderConfig元素2710的"pixelHeight,,属性的值指定到"size,,元素696的"pixelHeight,,属性。e.将BIFS—DecoderConfig元素2710的"pixelWidth,,属性的值指定到"size,,元素696的"pixelWidth"属性。为对象描述符流创建DecoderConfigDescriptor1.使用标准xml装置查找mp4file文档2300中的所选择的trak元素2600内包含的ES—Descr元素2688、2700内包舍的DecoderConfigDescriptor元素2710。2.将DecoderConfigDescriptor元素2710的"avgBitrate,,和"maxBitrate"属性的值指定到XMT-A文档中的新的DecoderConfigDescriptor元素650的对应的属小生。3.将mp4file文档中的trak原子中的DecoderConfigDescriptor元素的"bufferSize"属性的值指定到新的DecoderConfigDescriptor元素650的"bufferSizeDB,,属性。4.基于mp4file文档2300中的DecoderConfigDescriptor元素2710的"streamType"属性的数值,将字符串值指定到XMT-A文档100中的新的DecoderConCigDescriptor元素650的"streamType"属性。mp4file文档2300中的DecoderConfigDescriptor元素2710的"streamType,,属性的值预计匹配图62A中的第一列6200中的某一个条目。图62A中的第二列6220中的对应的条目被指定到XMT-A文档100中的新的DecoderConfigDescriptor元素650的"streamType,,属性。在此情况下,mp4file文档2300中的DecoderConfigDescriptor元素2710的streamType属性的值预计为"1",将值"ObjectDescriptor"指定到XMT-A文档100中的新的DecoderConfigDescriptor元素650的"streamType"的属性。5.基于mp4file文档2300中的DecoderConfigDescriptor元素2710的"streamType,,属性的数值,将字符串值指定到XMT-A文档100中的新的DecoderConCigDescriptor元素650的"objectTypelndication"属性。mp4file文档2300中的DecoderConfigDescriptor元素2710的"objectType,,属性的值预计匹配图62B中的第一列6240中的某一个条目。图62B中的第二列6260中的对应的条目被指定到XMT-A文档100中的新的DecoderConfigDescriptor元素650的"objectTypeIndication,,属性。为trak从tref元素获取mpodTrackIDs过程"为trak从tref元素获取mpodTrackIDs"包括下列步骤1.使用标准xml装置查找从属于选择的trak元素2600的tref元素2636。2.使用标准xml装置查找从属于选择的tref元素2636的mpod元素2640。3.将"mpod"元素2640的"trackID,,属性的值指定到数量"mpodTrackWs"。过程"为OD命令创建par元素"表示ObjectDescriptor命令元素的XMT-A"par,,元素140是从表示ObjectDescriptor流(odsm)的mp4file文档2300的元素2460派生而来。XMT-A文档100中表示的每一个ObjectDescriptor命令都还可以包括ES—Descriptor元素630、其中每一个都是从mp4file文档2300中的trak元素2350、2600中包含的ES—Descriptor元素2688派生而来的。在为创建这些"par"元素进行准备的过程中,使用字符串量"mpodTracklds,,来创建trackld值的数组pMpodTrackld。如杲对于对应的mp4文件存在对象描述符流(odsm),则在创建XMT-AHeader元素110的过程中,指定mpodTracklds的值。如果没有为此数量指定值,那么没有对象描述符流,并且不生成"par"元素,以表示ObjectDescriptor命令元素,此步骤完成。如果对应的mp4文件包括除sdsm和odsm外的一个或多个媒体数据流,那么,数量"mpodTracklds"的值将包含整数trackID值的序列,数组pMpodTrackld的每一个元素都将表示此序列的对应的成员。如图63所示,用于创建表示ObjectDescriptor命令的"par"元素的过程包括下列步骤1.在操作6300中,使用标准xml装置查找mp4file文档2300内的全部odsm元素2420。这通过首次使用标准xml装置来选择mp4file文档内的每一个mdat元素2310来实现。然后使用标准xml装置来选择每一个mdat元素2400内的每一个odsm元素2420。2.在操作6310中,使用标准xml装置来选择每一个odsm元素2460内的每一个odsmChunk元素2470。3.在操作6320中,使用标准xml装置来选择每一个odsmChunk元素2500内的每一个odsmSample元素2510。4.在操作6330中,使用标准xml装置来创建新的空白"par"元素140,并将其附加到XMT-ABody元素120。5.在操作6340中,将odsmSample元素2510的"time,,属性2515、2525的值除以数量"timeScale"的值,并将结果指定到新的"par"元素140的"begin"属性。6.在操作6350中,使用标准xml装置来选择每一个odsmSample元素2520内包含的每一个odsm-command元素2530。7.在操作6360中,将每一个odsm-command元素2530的元素名称与字符串"ObjectDescrUpdate,,进行比较。8.在操作6370中,如果odsm-command元素的元素名称为"ObjectDescrUpdate",则执4亍过禾呈"创建ObjectDescrUpdate元素"。9.在操作6380中,如果odsmcommand元素2530的元素名称不是"ObjectDescrUpdate",则将odsm-command2530的元素名牙尔与"ObjectDescrRemove"进4亍比4交。10.在操作6390中,如果odsm-command元素的元素名称为"ObjectDescrRemove",则执4亍过程"创建ObjectDescrRemove元素"。创建ObiectDescriptorUpdate元素过程"创建ObjectDescriptorUpdate元素,,包括下列步骤1.使用标准xml装置创建新的"ObjectDescriptorUpdate"元素220,并将它附加到当前"par,,元素210。2.使用标准xml装置创建新的"OD,,元素230,并将它附加到当前"ObjectDescriptorUpdate,,元素220。3.使用标准xml装置来查找从属于ObjectDescrUpdateodsm-command元素2540的"ObjectDescriptor,,元素2550。4.使用标准xml装置创建新的"ObjectDescriptor,,元素240、600,并将它附加到当前"OD,,元素230。5.将ObjectDescriptor元素2550的ODID属性2555的值指定到字符串量"ODID"。6.将字符串量"ODID"的值与前缀"ODID:,,连接,并将结果指定到新的ObjectDescriptor元素240、606的objectDescriptorID属性,"objectDescriptorID,,表示为"ODID"。7.使用标准xml装置创建新的"Descr"元素610,并将它附加到新的ObjectDescriptor元素600。8.使用标准xml装置创建新的"esDescr,,元素620,并将它附加到新的"Descr,,元素610。9.使用标准xml装置创建新的"ES—Descriptor,,元素630,并将它附加到当前"esDescr,,元素620。10.使用标准xml装置选择从属于ObjectDescriptor元素2550的"EsIdRef"元素2560。11.将"EsIdReP元素2560的"EsId"属性2565的值指定到数量"EsId"。12.使用标准xml装置创建新的"decConfigDescr,,元素646,并将它附加到新的"ES—Descriptor,,元素630、640。13.使用标准xml装置创建新的"DecoderConfigDescriptor"元素650,并将它附加到新的"decConfigDescr,,元素640。14.将数组pMpodTrackld中的条目(Esld-l)的值指定到数量"mpodTrackID"。例如,如果"EsId"的值为"1",则通过数组pMopdTrackld中的条目"0"(第一个条目)确定mpodTrackID的值。15.使用标准xml装置来选择其trackID属性的值匹配数量"mpodTrackID,,的值的trak元素2350。16.使用标准xml装置选择从属于选择的trak元素2350、2600的hdlr元素2608。17.将所选择的hdlr元素2608的"imme,,属性的值指定到字符串量"trackName"。18.将所选择的hdlr元素2608的"handlerType"属性的值指定到字符串量"trackType"。19.通过将字符串"ESID:"与数量"trackName"的值和数量"EsId,,的值连接来创建新的字符串量,并将结果指定到新的"ES—Descriptor,,元素640的"ES—ID,,属性636。20.使用标准xml装置创建新的"slConfigDescr"元素660,并将它附加到当前"ES—Descriptor,,元素640。21.使用标准xml装置创建新的"SLConfigDescriptor,,元素666,并将它附加到新"slConfigDescr,,元素660。22.使用标准xml装置创建新的"predefined,,元素,并将它附加到新的"SLConfigDescriptor,,元素666。23.将值"2,,指定到新的"predefined"元素的"value"属性。24.执行过程"为媒体数据流创建DecoderConfigDescriptor元素"。25.执行过程"创建StreamSource元素"。为媒体数才居流创建DecoderConfigDescriptor元素过程"为媒体数据流创建DecoderConfigDescriptor元素,,包括下列步骤1.使用标准xml装置选择过程"创建ObjectDescriptorUpdate元素,,的步骤15中选定的trak元素2350内包含的DecoderConfigDescriptor元素2710。2.将字符串值指定到过程"创建ObjectDescriptorUpdate元素,,的步骤13中创建的新的DecoderConfigDescriptor元素650的"streamType"属性。通过图62A中的第二列6220中的条目来确定此字符串的值。此条目对应于第一列6200上的匹配选定的DecoderConfigDescriptor2710的"streamType"属性的数值的条目。3.将字符串值指定到过程"创建ObjectDescriptorUpdate元素,,的步骤13中创建的新的DecoderConfigDescriptor元素,,属性。通过图62B中的第二列6260中的条目来确定此字符串的值。此条目对应于第一列6240上的匹配选定的DecoderConfigDescriptor2710的"objectType,,属性的数值的条目。4.将选定的DecoderConfigDescriptor元素2710的"avgBitrate,,和"maxBitrate,,属性的值指定到XMT-A文档中的新的DecoderContigDescriptor元素650的对应的属性。5.将选定的DecoderConfigDescriptor元素2710的"bufferSize"属性的值指定到XMT-A文档中的新的DecoderContigDescriptor元素650的"bufferSizeDB,,属性。6.如果选定的DecoderConfigDescriptor元素2710包含从属的JPEG—DecoderConfig元素2730、VisualConfig元素2740或AudioConfig元素2750,则执行下列步骤a.使用标准xml装置创建新的"decSpecificInfo"元素656,并将它附加到新的"DecoderConfigDescriptor"元素650。b.使用标准xml装置创建新的"DecoderSpecificInfo"元素,并将它附加到当前"decSpecicInfo,,元素656。c.将值"auto,,指定到新的DecoderSpecificInfo元素的"type,,属性。创建StreamSource元素过程"创建StreamSource元素"包括下列步骤1.使用标准xml装置来选择mp4file文档2300中包含的每一个mdat元素2310。2.使用标准xml装置来选择每一个mdat元素2310中包含的每一个mediaFile元素2430、2480。3.将每一个所选择的mediaFile元素2480的"trackID"属性的值指定到数量"mdatTrackID"。4.将数量"mdatTrackID,,的值与数量"mpodTrackID"的当前值进行比较。1455.如果数量"mdatTrackID"的值匹配数量"mpodTrackID"的当前值,则执行下列步骤a.使用标准xml装置创建新的"StreamSource,,元素670,并将它附加到当前"ES—Descriptor,,元素640。b.将所选择的mediaFile元素2480的"name,,属性的值与前缀"file:〃/"连接,并将结果指定到新的"StreamSource"元素670的"url"属性。创建ObjectDescriptorRemove元素过程"创建ObjectDescriptorRemove元素"包括下列步骤1.使用标准xml装置创建新的"ObjectDescriptorRemove,,元素250,并将它附加到当前"par,,元素210。2.将odsm-sample元素2530中的"ObjectDescriptorRemove"元素2570的"ODID"属性的值连接到前缀"ODID:,,,并将结果指定到新的"ObjectDescriptorRemove"元素250的"objectDescriptorld,,属性。XMT-A"ObjectDescriptorRemove,,元素的"objectDescriptorId,,属性表示为图2B中的"ODID"。过程"为BIFS命令创建par元素"如图64所示,过程"为BIFS命令创建par元素,,包括下列步骤1.在操作6400中,使用标准xml装置来选择mp4bifs文档2800中的bifsConfig元素2810。将"nodeldBits"属性的值指定到数量"numNodeldBits"。创建名为"pNodeNumber"的整数数组和名为"pNodeldName,,的字符串数组。这些数组中的每一个数组中的元素数量由2的numNodeldBits次方指定。2.在操作6410中,使用标准xml装置来选择mp4bifs文档2800中的每一个"commandFrame,,元素2820。3.在操作6420中,使用标准xml装置来创建新的空白"par"元素140,并将其附加到XMT-ABody元素120。4.在操作6430中,将commandFrame元素2820的"time,,属性的值指定到"par,,元素140的"begin"属性。5.在操作6440中,使用当前commandFrame元素2820执行过程"建立节点号码和节点名称的数组,,。6.在操作6450中,使用当前commandFrame元素2820执行过程"将mp4bifscommandFrame元素转换为XMT-A元素"。建立节点号码和节点名称的数组图65中概述了过程"建立节点号码和节点名称的数组"。此过程包括下列步骤1.在操作6500中,使用标准xml装置选择当前mp4bifscommandFrame元素2830所拥有的每一个从属元素。每一个这样的从属元素都对应于bifsCommand元素2840、2910。2.在操作6510中,使用标准xml装置选择当前bifsCommand元素所拥有的每一个从属元素。如果所选择的从属元素对应于bifsCommand元素,则递归地重复此过程。否则,所选择的从属元素必须对应于mp4bifsNode元素,并执行下列步骤。3.在操作6520中,将所选择的mp4bifsNode元素2920、3000的元素名称与字符串"ReusedNode"进行比较。如果所选择的mp4bifsNode元素2920、3000的元素名称为"ReusedNode",则继续选择下面的mp4bifsNode元素6510、6590(如果有的话)。4.在操作6530中,如果所选择的mp4bifsNode元素2920、3000的元素名称不是"ReusedNode",则使用标准xml装置来确定是否为所选择的mp4bifsNode元素2920、3000的"Nodeld"属性指定了值。5.在操作6540中,如果已经为所选择的mp4bifsNode元素2920、3000的"Nodeld,,属性指定了值,则将"Nodeld"属性的数值指定到整型量"nodeld"。6.在操作6550中,将所选择的mp4bifsNode元素2920、3000的名称与MPEG-4规范中定义的节点名称的数组中的每一个条目进行比较。将MPEG-4节点名称的数组中的匹配条目的索引指定到整型量nodeNumber。将整型量nodeNumber的值指定到数组pNodeNumber中的条目nodeld。7.在操作6560中,使用标准xml装置来确定是否为所选择的mp4bifsNode元素2920、3000的"name,,属性指定了值。8.在操作6570中,如果已经为所选择的mp4bifsNode元素2920、3000的"name"属性指定了值,则将此"name"属性的值指定到数组pNodeldName中的条目nodeld。9.在操作6580中,使用标准xml装置选择所选择的mp4bifsNode元素2920、3000所拥有的每一个从属元素3030、3070。对于对应于bifsCommand元素3070的每一个从属元素,递归地重复步骤26510。10.在操作6590中,对于对应于mp4bifsNode元素3030的每一个从属元素,递归地重复步骤36520。将mp4bifscommandFrame元素转换为XMT-A元素使用下列过程来将mp4bifscommandFrame元素2830的内容转换为XMT-ABIFS命令元素300、310、320。在此情况下,"当前mp4bifs元素"是在6410中选择的mp4bifscommandFrame元素2830,"XMT-A父元素,,是在6420中创建的XMT-A"par,,元素。使用相同的过程来将mp4fbifsConditionalNode3040转换为XMT-ABIFS命令元素300、310、320。在此情况下,"当前mp4bifs元素"是从属于mp4bifs命令元素2910或mp4bifsNode元素3000的mp4bifsConditionalNode元素3040,"XMT-A父元素,,是XMT-A命令元素300、310、320或XMT-ACommandBuffernodeField元素410。1,使用标准xml装置选择从属于当前mp4Wfs元素的每一个mp4bifs元素。对每一个这样的从属元素都按下列步骤中的某一个步骤所描述的方式进行处理2.如杲所选择的从属元素的元素名称为"InsertNode",则执行过程"将mp4bifsInsertNode元素转换为XMT-A元素"。3.如果所选择的从属元素的元素名称为"InsertlndexedValue",则执行过程"将mp4bifsInsertlndexedValue元素转换为XMT-A元素"。4.如果所选择的从属元素的元素名称为"InsertRoute,,,则执行过程"将mp4bifsInsertRoute元素转换为XMT-A元素"。5.如果所选择的从属元素的元素名称为"DeleteNode,,,则执行过程"将mp4bifsDeleteNode元素转换为XMT-A元素"。6.如果所选择的从属元素的元素名称为"DeletelndexedValue",则执行过程"将mp4bifsDeletelndexedValue元素转换为XMT-A元素"。7.如果所选择的从属元素的元素名称为"DeleteRoute",则执行过程"将mp4bifsDeleteRoute元素转换为XMT-A元素"。8.如果所选择的从属元素的元素名称为"ReplaceNode",则执行过程"将mp4bifsReplaceNode元素转换为XMT-A元素"。9.如果所选择的从属元素的元素名称为"ReplacelndexedValue",则执行过程"将mp4bifsReplacelndexedValue元素转换为XMT-A元素"。10.如果所选择的从属元素的元素名称为"ReplaceField",则执行过程"将mp4bifsReplaceField元素转换为XMT-A元素"。11.如果所选择的从属元素的元素名称为"ReplaceRoute",则执行过程"将mp4bifsReplaceRoute元素转换为XMT-A元素"。12.如果所选择的从属元素的元素名称为"ReplaceScene",则执行过程"将mp4bifsR印laceScene元素转换为XMT-A元素"。将mt)4bifsInsertNode元素转换为XMT-A元素过程"将mp4bifsInsertNode元素转换为XMT-A元素"包括下列步骤l.创建新的XMT-A"Inserf,元素300,并将它附加到XMT-A父元素。2.处理parentld属性a.将mp4bifs"InsertNode,,元素的"parentld,,属性的值指定到整型量"nodeld"。b.将数组pNodeldName中的条目nodeld的值指定到字符串量"nodeldName"。c.如果字符串量"nodeldName"的值为空值或没有内容(零长度),则将数量"nodeld,,的值附加到前缀"nodeld:,,,并将结果指定到数量"nodeldName"。d.将数量"nodeldName,,的值指定到XMT-A"Insert,,元素300的"atNode,,属性。3.处理insertionPosition属性a.将mp4bifs"InsertNode,,元素的"insertionPosition"属性的值指定到字符串量"position"。b.如果数量"position"的值为"O",则将mp4bifs"InsertNode"元素的"position"属性的值指定到XMT-A"Insert,,元素300的"positition,,属性。c.如果数量"position"的值为"2",则将值"BEGIN"指定到XMT-A"Insert,,元素300的"positition,,属性。d.如果数量"position"的值为"3",则将值"END"指定到XMT-A"Insert,,元素300的"positition,,属性。4.处理从属mp4bifsNode元素a.使用标准xml装置选择当前bifsCommand元素2910所拥有的每一个从属Node元素2920。b.对于每一个这样的所选择的从属Node元素2920,则执行过程"将mp4bifsNode元素转换为XMT-ANode元素"。将mi)4bifsInsertlndexedVahie元素转换为XMT-A元素过程"将mp4bifsInsertlndexedVahie元素转换为XMT-A元素"包括下列步骤1.创建新的XMT-A"Insert,,元素300,并将它附加到当前XMT-A父元素。2.处理nodeld属性a.将mp4bifs"InsertNode"元素的"nodeld,,属性的值指定到整型量"nodeld"。b.将数组pNodeNumber中的条目nodeld的值指定到整型量"nodeNumber"。c.将数组pNodeldName中的条目nodeld的值指定到字符串量"nodeldName,'。d.如果字符串量"nodeldName,,的值为空值或没有内容(零长度),则将数量"nodeld"的值附加到前缀"nodeld:,,,并将结果指定到数量"nodeldName"。e.将数量"nodeldName"的值指定到XMT-A"Insert"元素的"atNode,,属性。3.处理inFieldName和value属性a.将mp4bifs"Insertlndexedvalue,,元素的"inFieldName,,属性的值指定到XMT-A"Insert,,元素的"atField"属性。b.将mp4bifs"InsertlndexedValue,,元素的"value,,属性的值指定到XMT-A"Insert"元素的"value"属性。4.处理insertionPosition属性a.将mp4bifs"InsertlndexedValue"元素的"insertionPosition"属性的值指定到字符串量"position,,。b.如果数量"position"的值为"0",则将mp4bifs"InsertNode"元素的"position"属性的值指定到XMT-A"Insert"元素300的"positition"属性。c.如果数量"position"的值为"2",则将值"BEGIN"指定到XMT-A"Insert,,元素300的"positition,,属性。d.如果数量"position"的值为"3",则将值"END"指定到XMT-A"Insert"元素300的"positition,,属性。5.处理从属mp4bifsNode元素a.使用标准xml装置选择当前bifsCommand元素2910所拥有的每一个从属Node元素2920。b.对于每一个这样的所选择的从属Node元素2920,则执行过程"将mp4bifsNode元素转换为XMT-ANode元素"。将mp4bifsInsertRoute元素转换为XMT-A元素过程"将mp4bifsInsertRoute元素转换为XMT-A元素,,包括下列步骤1.创建新的XMT-A"Insert"元素300,并将它附加到当前XMT-A父元素。2.创建新的XMT-A"Route"元素340,并将它附加到新的XMT-A"Insert,,元素300。3.处理routeld属性a.将mp4bifs"InsertRoute"元素的"routeld,,属性的值指定到字符串量"iRoute"。b.将mp4bifs"InsertRoute,,元素的"name"属性的值指定到字符串量"routeName,,。c.如果字符串量"routeName,,的值不是空值并包括至少一个字符,则将数量"routeName,,指定到XMT-A"ROUTE,,元素340的"DEF,,属性。否则,如果字符串量"iRoute,,的值不是空值并包括至少一个字符,则将数量"iRoute"的值附加到前缀"route:",并将结果指定到XMT-A"ROUTE,,元素340的"DEF,属性。4.基于mp4Wfs"InsertRoute,,元素,执行过程"将mp4bifsRoute元素的属性转换为XMT-AROUTE元素的属性"。将mp4bifsDeleteNode元素转换为XMT-A元素过程"将mp4bifsDeleteNode元素转换为XMT-A元素"包括下列步骤1,创建新的XMT-A"Delete,,元素310,并将它附加到当前XMT-A父元素。2.处理nodeld属性a.将mp4bifs"DeleteNode,,元素的"nodeld"属性的值指定到整型量"nodeld"。b.将数组pNodeldName中的条目nodeld的值指定到字符串量"nodeldName,,。c.如果字符串量"nodeldName,,的值为空值或没有内容(零长度),则将数量"nodeld,,的值附加到前缀"nodeld:",并将结果指定到数量"nodeldName,,。d.将数量"nodeldName,,的值指定到XMT-A"Delete"元素310的"atNode,,属性。将mD4bifsDeletelndexedValue元素转换为XMT國A元素过程"将mp4bifsDeletelndexedVahie元素转换为XMT-A元素"包括下列步骤1.创建新的XMT-A"Delete,,元素310,并将它附加到当前XMT-A父元素。2.处理nodeld属性a.将mp4bifs"DeletelndexedValue"元素的"nodeld,,属性的值指定到整型量"nodeld"。b.将数组pNodeNumber中的条目nodeld的值指定到整型量"nodeNumber,,。c.将数组pNodeldName中的条目nodeld的值指定到字符串量"nodeldName"。d.如果字符串量"nodeldName"的值为空值或没有内容(零长度),则将数量"nodeld,,的值附加到前缀"nodeld:",并将结果指定到数量"nodeldName"。e.将数量"nodeldName"的值指定到XMT-A"Delete,,元素310的"atNode"属性。3.处理inField属性a.将mp4bifs"DeletelndexedValue"元素的"inFidd"属性的153值指定到整型量"field"。b.将具有索引"nodeNumber"的BIFS节点的MPEG-4规范中定义的字段名称的数组中的条目"field"的值指定到字符串量"fieldName"。c.将数量"FieldName,,的值指定到XMT-A"Delete"元素310的"atField"属性。4.处理deletionPosition属性a.将mp4bifs"DeletelndexedValue,,元素的"deletionPosition,,属性的值指定到字符串量"position"。b.如果数量"position,,的值为"0",则将mp4bifs"InsertNode"元素的"position"属性的值指定到XMT画A"Delete,,元素310的"positition,,属性。c.如果数量"position"的值为"2",则将值"BEGIN"指定到XMT-A"Delete,,元素310的"positition,,属性。d.如果数量"position"的值为"3",则将值"END"指定到XMT-A"Delete,,元素310的"positition,,属性。将mt)4bifsDeleteRoute元素转换为XMT-A元素过程"将mp4bifsDeleteRoute元素转换为XMT-A元素,,包括下列步骤1.创建新的XMT-A"Delete"元素310,并将它附加到当前XMT-A父元素。2.将mp4bifs"DeleteRoute"元素的"routeld"属性的值指定到字符串量"routeld"。3.将数量"routeld"的值附加到前缀"route:",并将结果指定到XMT-A"Delete,,元素310的"atRoute,,属性。将mp4bifsReplaceNode元素转换为XMT-A元素过程"将mp4bifsReplaceNode元素转换为XMT-A元素,,包括下列步骤1.创建新的XMT-A"Replace,,元素320,并将它附加到当前XMT-A父元素。2.处理nodeld属性a.将mp4bifs"R印laceNode,,元素的"nodeld,,属性的值指定到整型量"nodeld"。b.将数组pNodeldName中的条目nodeld的值指定到字符串量"nodeldName"。c.如果字符串量"nodeldName"的值为空值或没有内容(零长度),则将数量"nodeld"的值附加到前缀"nodeld:",并将结果指定到数量"nodeldName"。d.将数量"nodeldName,,的值指定到XMT-A"Replace,,元素320的"atNode,,属性。3.处理从属mp4bifsNode元素a.使用标准xml装置选择当前bifsCommand元素2910所拥有的每一个从属Node元素2920。b.对于每一个这样的所选择的从属Node元素2920,则执行过程"将mp4bifsNode元素转换为XMT-ANode元素"。将mi)4bifsReplacelndexedValue元素转换为XMT-A元素过程"将mp4bifsReplacelndexedValue元素转换为XMT-A元素"包括下列步骤1.创建新的XMT-A"Replace,,元素320,并将它附加到当前XMT-A父元素(图3C)。2.处理nodeld属性a.将mp4bifs"ReplacelndexedValue,,元素的"nodeld,,属性的值指定到整型量"nodeld"。b.将数组pNodeNumber中的条目nodeld的值指定到整型量"nodeNumber"。c.将数组pNodeldName中的条目nodeld的值指定到字符串量"nodeIdName"。d.如果字符串量"nodeldName,,的值为空值或没有内容(零长度),则将数量"nodeld"的值附加到前缀"nodeld:",并将结果指定到数量"nodeldName"。e.将数量"nodeldName,,的值指定到XMT-A"Replace,,元素320的"atNode,,属性。3.处理inFiel衡me和value属性a.将mp4bifs"ReplacelndexedValue,,元素的"inFieldName,,属性的值指定到XMT-A"Replace,,元素的"atField"属性。b.将mp4bifs"R印lacelndexedVaiue,,元素的"value"属性的值指定到XMT-A"Replace,,元素320的"value"属性。4.处理replacementPosition属性a.将mp4bifs"ReplacelndexedValue,,元素的"replacementPosition"属性的值指定到字符串量"position"。b.如果数量"position,,的值为"O",则将mp4bifs"InsertNode"元素的"position"属性的值指定到XMT-A"Replace"元素320的"positition,,属性。e.如果数量"position"的值为"2",则将值"BEGIN"指定到XMT-A"Replace,,元素320的"positition,,属性。d.如果数量"position,,的值为"3",则将值"END"指定到XMT-A"R印lace,,元素330的"positition,,属性。5.处理从属mp4bifsNode元素a.使用标准xml装置选择当前bifsCommand元素2910所拥有的每一个从属Node元素2920。b.对于每一个这样的所选择的从属Node元素2920,则执行过程"将mp4bifsNode元素转换为XMT-ANode元素"。将mp4bifsRepIaceField元素转换为XMT-A元素过程"将mp4bifsReplaceField元素转换为XMT-A元素"包括下列步骤1.创建新的XMT-A"R印lace,,元素320,并将它附加到当前XMT-A父元素。2.处理nodeld属性a.将mp4bifs"ReplaceField"元素的"nodeld"属性的值指定到整型量"nodeld"。b.将数组pNodeNumber中的条目nodeld的值指定到整型量"nodeNumber,'。c.将数组pNodeldName中的条目nodeld的值指定到字符串量"nodeldName"。d.如果字符串量"nodeldName"的值为空值或没有内容(零长度),则将数量"nodeld"的值附加到前缀"nodeld:",并将结果指定到数量"nodeldName"。e.将数量"nodeldName,,的值指定到XMT-A"Replace"元素320的"atNode"属性。3.处理inFieldName和value属性a.将mp4bifs"ReplaceField"元素的"inFieldName"属性的值指定到XMT-A"Replace,,元素的"atField"属性。b.将mp4bifs"ReplaceField"元素的"value"属性的值指定到XMT-A"Replace,,元素320的"value,,属性。4.处理从属mp4bifsNode元素a.使用标准xml装置选择当前bifsCommand元素2910所拥有的每一个从属Node元素2920。b.对于每一个这样的所选择的从属Node元素2920,则执行过程"将mp4bifsNode元素转换为XMT-ANode元素"。将mp4bifsReplaceRoute元素转换为XMT-A元素过程"将mp4bifsReplaceRoute元素转换为XMT-A元素,,包括下列步骤1.创建新的XMT-A"Replace,,元素320,并将它附加到当前XMT-A父元素。2.将mp4bifs"ReplaceRoute"元素的"routeld,,属性的值指定到字符串量"routeld"。1573.将数量"routeld,,的值附加到前缀"route:",并将结果指定到XMT-A"Replace,,元素310的"atRoute,,属性。4.基于mp4bifs"ReplaceRoute"元素,执行过程"将mp4bifsRoute元素的属性转换为XMT-AROUTE元素的属性"。将mp4bifsReplaceScene元素转换为XMT-A元素过程"将mp4bifsReplaceScene元素转换为XMT-A元素"包括下列步骤1.创建新的XMT-A"Replace,,元素320,并将它附加到当前XMT-A父元素。2.创建新的XMT-A"Scene,,元素370,并将它附加到新的XMT-A"Replace,,元素320。3.将ReplaceScene元素2930的"USENAMES,,属性的值指定到字符串量"useNames"。如果数量useNames的值为"真,,,将数量useNames的值指定到新的XMT-AScene元素370的"USENAMES,,属性。4.使用标准xml装置选择从属于ReplaceScene元素2930所拥有的的每一个从属元素。对于每一个这样的所选择的从属元素,执行下列操作5.如果所选择的从属元素的名称为"Routes,,2950,则执行下列步骤。否则,执行过程"将mp4bifsNode元素转换为XMT-ANode元素"。6.使用标准xml装置选择选定的"Routes,,元素2950所拥有的每一个从属元素。每一个这样的从属元素预计为"Route,,元素2960。对于每一个这样的"Route"元素2960,执行下列步骤7.创建新的XMT-A"ROUTE,,元素390,并将它附加到新的XMT-A"Scene,,元素370。8.处理可选的routeld属性a.将选定的"Route,,元素2960的"routeld,,属性的值指定到字符串量"iRoute"。b.将mp4bifs"Route,,元素的"name,,属性的值指定到字符串量"routeName,'。c.如果字符串量"routeName"的值不是空值并包括至少一个字符,则将数量"routeName,,指定到XMT-A"ROUTE,,元素390的"DEF"属性。否则,如果字符串量"iRoute"的值不是空值并包括至少一个字符,则将数量"iRoute"的值附加到前缀"route:",并将结果指定到XMT-A"ROUTE,,元素3卯的"DEF,属性。9.基于mp4bifs"Route,,元素,执行过程"将mp4bifsRoute元素的属性转换为XMT-AROUTE元素的属性"。将mp4bifsRoute元素的属性转换为XMT-AROUTE元素的属性过程"将mp4bifsRoute元素的属性转换为XMT-AROUTE元素的属性"包括下列步骤。在此过程中引用的mp4bifsRoute元素可以是mp4bifs"Route,,元素2960、mp4bifs"InsertRoute,,bifsCommand元素2910,或mp4bifs"ReplaceRoute"bifsCommand元素2910。1.处理departureNode值a.将mp4bifsRoute元素的"departureNode,,属性的值指定到整型量"nodeld"。b.将数组pNodeNumber中的条目nodeld的值指定到整型量"nodeNumber"。c.将数组pNodeldName中的条目nodeld的值指定到字符串量"nodeldName',。d.如果字符串量"nodeldName,,的值为空值或没有内容(零长度),则将数量"nodeld"的值附加到前缀"nodeld:,,,并将结果指定到数量"nodeldName"。e.将数量"nodeldName"的值指定到XMT-A"ROUTE,,元素360或390的"fromNode,,属性。2.处理departureField值a.将mp4bifsRoute元素的"departureField,,属性的值指定到整型量"field"。b.将具有索引"nodeNumber"的BIFS节点的MPEG-4规范中定义的字段名称的数组中的条目"field"的值指定到字符串量"fiel倫me"。c.将数量"fieldName,,的值指定到XMT-A"ROUTE"元素360或390的"fromField"属性。3.处理arrivalNode值a.将mp4bifsRoute元素的"arrivalNode"属性的值指定到整型量"nodeld"。b.将数组pNodeNumber中的条目nodeld的值指定到整型量"nodeNumber,'。c.将数组pNodeldName中的条目nodeld的值指定到字符串量"nodeldName',。d.如果字符串量"nodeldName,,的值为空值或没有内容(零长度),则将数量"nodeld"的值附加到前缀"nodeld:",并将结果指定到数量"nodeIdName"。e.将数量"nodeldName,,的值指定到XMT-A"ROUTE,,元素360或390的"toNode,,属性。4.处理arrivalField值a.将mp4bifsRoute元素的"arrivalField,,属性的值指定到整型量"field"。b.将具有索引"nodeNumber,,的BIFS节点的MPEG-4规范中定义的字段名称的数组中的条目"field"的值指定到字符串量"fie顧ame"。c.将数量"fieldName,,的值指定到XMT-A"ROUTE,,元素360或390的"toFieId,,属性。将mp4bifsNode元素转换为XMT-ANode元素每一个mp4bifsNode元素3000都由从属于特定XMT-A父元素的新的XMT-ANode元素400表示。此XMT-A父元素的身份是由mp4bifsNode3000元素所从属的mp4bifs元素确定的a.如果mp4bifsNode元素2920从属于InsertNodebifsCommand元素2910或InsertlndexedValuebifsCommand元素2910,那么,XMT-A父元素由对应的XMT-A"Insert"元素300进行定义。b.如果mp4bifsNode元素2920从属于ReplaceNodebifsCommand元素2910、ReplaceFieldbifsCommand元素2910或ReplacelndexedValuebifsCommand元素2910,那么,XMT國A父元素由对应的XMT-A"Replace"元素320进行定义。c.如果mp4bifsNode元素2940从属于ReplaceScenebifsCommand元素2930,那么,XMT-A由对应的XMT画A"Scene"元素370进行定义。d.如果mp4bifsNode元素3030从属于另一个mp4bifsNode元素3000或InsertlndexedValuebifsCommand元素2910,那么,XMT-A父元素由对应的XMT-A"nodeField,,元素410进行定义。如果mp4bifsNode元素的元素名称为"ReusedNode,,3080,则执行过程"为mp4bifsReusedNode元素创建XMT-ANode元素"。否则,执行下列步骤。1.确定整型量"nodeNumber,,的值。by此值是由MPEG-4规范中定义的节点名称的数组中的条目号码(所指出的条目的值匹配当前mp4bifsNode元素3000的节点名称)确定。2.用相同元素名称(NodeName)作为mp4bifsNode元素3000创建新的XMT-ANode元素400,并将它附加到XMT-A父元素。此新的XMT-ANode元素被定义为"当前XMT-ANode元素"。3.如果需要,确定"DEF"属性的值a.将mp4bifsNode元素的"name"属性3016的值指定到字符串量"nodeldName"。b.如果数量"nodeldName"的值不是空值并且由此数量表示的字符串至少具有一个字符,则将数量"nodeldName,,的值指定到新的XMT-ANode元素400的"DEF"属性。c.如果数量"nodeldName"的值是空值或由此数量表示的字符串小于一个字符,则将mp4bifsNode元素3000的"Nodeld"属性3010的值指定到字符串量"nodeld"。d.如果数量"nodel(JName,,的值不是空值并且由此数量表示的字符串至少具有一个字符,则将数量"nodeldName"的值附加到新的XMT-ANode元素400的"DEF,,属性。4.使用标准xml装置选择为当前mp4bifsNode元素3000指定的每一个属性字段属性值3020。5.将当前属性值的名称的值指定到字符串量"attributeName"。6.对于mp4bifsNode元素3000的每一个属性字段属性3020,执行下列步骤。5.确定字段数据类型a.确定整型量"field"的值。此值等于匹配"attributeName,,的值字段名称的表的成员的条目编号的值。字段名称的表是由MPEG-4规范为具有与当前mp4bifsNode元素关联的节点名称和节点号码的BIFS节点定义的。b.将fieldDataType值的表中的条目"field,,的值指定到整型量"fieldDataType,,。fieldDataType值的表是由MPEG-4规范为具有与当前mp4bifsNode元素3000关联的节点名称和节点号码的BIFS节点定义的。6.检查URL字段数据类型。如果字段数据类型等于MPEG-4规范定义的表示"URL"字段数据类型的值,则执行下列操作a.将mp4bifsNode元素的"attributeName,,属性的值指定到字符串量"urlString"。将由数量"urlString,,表示的字符串的开头五个字符替换为前缀"odid:〃ODID:"c.将所产生的字符串值指定到当前XMT-ANode元素400的"attributeName"属性。7.检查Node字段数据类型。如果字段数据类型等于MPEG-4规范定义的表示"Node"字段数据类型的值,则执行下列操作a.创建新的具有元素名称"attributeName"的XMT-A元素,并将它附加到XMT-ANode元素。此元素#:定义为"当前XMT-AnodeField元素"。b.使用标准xml装置选择当前mp4bifsNode元素所拥有的每一个从属元素。这些从属元素中的每一个从属元素预计为另一个mp4bifsNode元素。这些从属元素被指定为"子"元素,当前mp4bifsNode元素被指定为"父,,元素。c.使用当前XMT-AnodeField元素作为"父,,元素,对每一个子元素执行过程"将mp4bifsNode元素转换为XMT-A元素"。8.检查CommandBuffer字段数据类型。如果字段数据类型等于MPEG-4规范定义的表示"CommandBuffer"字段数据类型的值,则执行下列操作a.创建新的具有元素名称"attributeName,,的XMT-A元素,并将它附加到XMT-ANode元素。此元素^皮定义为"当前XMT-AnodeField元素,,400。b.使用当前XMT-AnodeField元素作为"父"元素,执行过程"将mp4bifscommandFrame元素转换为XMT-A元素"。9.处理其他属性。如果字段数据类型不是在前面的步骤中标识的其中一个值,则执行下列操作a.将mp4bifsNode元素的"attributeName"属性的值指定到字符串量"attributeValue"。b.将数量"attributeVahie,,的值指定到XMT-ANode元素400的"attributeName,,属性。163为mo4bifsReusedNode元素创建XMT-ANode元素在mp4bifsReusedNode元素3080的情况下,nodeRef值3090是必需的属性。对于每一个mp4bifsReusedNode元素3080,执行下列步骤1.将nodeRef属性3090的值指定到整型量"nodeld"。2.将数组pNodeNumbers中的条目"nodeld"的值指定到整型量"nodeNumber,'。3.将MPEG-4规范中定义的节点名称的表中的条目"nodeNumber,,的值指定到字符串量"nodeName,,。4.创建类型"nodeName"的新的XMT-Anode元素400,并将它附加到当前XMT-A父元素。5.将数量nodeld的值指定到新的XMT-ANode元素400的"USE"属性。前面的对本发明的简要说明只是为了说明和描述。它不可以是详尽的描述,也不将本发明限制为所说明的准确形式,根据上述原理,其他修改和变化也是可以的。例如,对XMT-A文件的精确定义可以随着时间而变化或发展。同样,对MPEG-4中间格式的精确定义也可以随着时间变化或发展。这里所描述的本发明不仅限于上文所引用的文档中指定的特定定义。如此,此发明的原理还可以适用于其他不相关的数据结构。在MPEG-4系统规范中还定义了SFNode数据结构的其他扩展形式。如下列实施例中所描述的扩展本发明以涵盖这样的情况的装置,对于精通本技术的那些人是显而易见的。如此,选择和描述了所说明的实施例,以便最好地说明本发明的原理,以及其实际应用,从而使精通本技术的其他人最好地在各种实施例和各种变体中利用本发明,只要它们适合于特定用途。此外,所附的权利要求应该被解释为涵盖本发明的其他替代实施例,除非被现有技术限制。权利要求1.一种用于将MPEG-4(mp4)二进制文件转换为可扩展MPEG-4文本(XMT)文件的方法,该方法包括生成至少一个表示mp4二进制文件的中间结构化文档;将至少一个中间结构化文档转换为XMT结构化文档;以及基于XMT结构化文档创建XMT文件。2.根据权利要求1所述的方法,其中,中间结构化文档包括表示moov原子和一个或多个mdat原子的数据结构,moov原子包括iods原子和一个或多个trak原子。3.根据权利要求2所述的方法,进一步包括基于表示mdat原子和trak原子的数据结构生成外部媒体文件。4.根据权利要求1所述的方法,其中,转换中间结构化文档的过程包括生成mp4-file结构化文档。5.根据权利要求4所述的方法,其中,mp4-file结构化文档基于可扩展标记语言。6.根据权利要求4所述的方法,其中,mp4-file结构化文档包括moov结构化元素和一个或多个mdat结构化元素,moov结构化元素表示moov原子,每一个mdat结构化元素都表示由中间结构化文档表示的mdat原子中的一个。7.根据权利要求6所述的方法,其中,moov结构化元素包括表示中间结构化文档的对应的部分的iods元素和一个或多个trak元素。8.根据权利要求7所述的方法,其中,mp4-bifs结构化文档是与mp4-file结构化文档分开的不同的文档。9.根据权利要求4所述的方法,其中,mp4-file结构化文档包括表示对象描述符流的元素。10.根据权利要求4所述的方法,其中,mp4-file结构化文档包括表示场景描述流的元素。11.根据权利要求1所述的方法,其中,生成中间结构化文档的过程包括生成表示mp4二进制文件的数据结构集;以及将数据结构集转换为中间结构化文档。12.根据权利要求1所述的方法,其中,转换中间结构化文档的过程包括生成表示场景描述流的mp4-bifs结构化文档。13.—种用于将MPEG-4(mp4)二进制文件转换为可扩展MPEG-4文本(XMT)文件的系统,该系统包括二进制文件解码器,该解码器被配置为输入mp4二进制文件,并生成表示mp4二进制文件的至少一个中间结构化文档,转换器,该转换器被配置为输入中间结构化文档,并生成XMT结构化文档;以及XMT串行器,该串行器被配置为输入XMT结构化文档,并生成XMT文件。14.根据权利要求13所述的系统,其中,至少一个中间结构化文档包括表示moov原子和一个或多个mdat原子的数据结构。15.根据权利要求14所述的系统,其中,表示moov原子的数据结构包括表示iods原子和一个或多个trak原子的数据结构。16.根据权利要求15所述的系统,进一步包括基于表示mdat原子和trak原子的数据结构的一个或多个外部媒体文件。17.根据权利要求14所述的系统,其中,至少一个中间结构化文档包括mp4-file结构化文档,mp4-file结构化文档包括基于数据结构集的一个或多个mdat元素、moov元素以及iods元素。18.根据权利要求17所述的系统,其中,mp4-file结构化文档表示对象描述符流。19.根据权利要求17所述的系统,进一步包括表示场景描述流的mp4-bifs结构化文档。20.根据权利要求19所述的系统,其中,mp4-bifs结构化文档是与mp4-file结构化文档分开的不同的结构化文档。21.包含在有形介质中的计算机程序产品,包括连接到有形的媒体的计算机可读的程序代码,用于将MPEG-4(mp4)二进制文件转换为可扩展的MPEG-4文本(XMT)文件,计算机可读的程序代码被配置为使程序生成至少一个表示mp4二进制文件的中间结构化文档;将中间结构化文档转换为XMT结构化文档;以及基于XMT结构化文档创建XMT文件。22.根据权利要求21所述的计算机程序产品,其中,至少一个中间结构化文档包括表示moov原子和一个或多个mdat原子的数据结构,moov原子包括一个或多个trak原子。23.根据权利要求22所述的计算机程序产品,其中,计算机可读的程序代码进一步被配置为基于表示mdat原子和trak原子的数据结构生成外部^f某体文件。24.根据权利要求21所述的计算机程序产品,其中,至少一个中间结构化文档包括mp4-file结构化文档。25.根据权利要求24所述的计算机程序产品,其中,mp4-file结构化文档包括基于至少一个中间结构化文档的一个或多个mdat元素、moov元素以及iods元素。26.根据权利要求25所述的计算机程序产品,其中,mp4-file结构化文档表示对象描述符流。27.根据权利要求25所述的计算机程序产品,其中,mp4-file结构化文档表示场景描述流。28.根据权利要求21所述的计算机程序产品,其中,至少一个中间结构化文档包括表示场景描述流的mp4-bifs结构化文档。29.根据权利要求28所述的计算机程序产品,其中,mp4-bifs结构化文档是与mp4-file结构化文档分开的不同的文档。30.根据权利要求21所述的计算机程序产品,其中,计算机可读的程序代码进一步被配置为生成表示mp4二进制文件的数据结构集;以及将数据结构集转换为至少一个中间结构化文档。全文摘要一种用于将二进制MPEG-4(mp4)二进制文件(2210)转换为可扩展MPEG-4文本(XMT)文件(2220)的方法、系统和计算机程序产品(2200)。本发明包括生成至少一个表示mp4二进制文件(2210)的中间结构化文档(2245)。一种转换器被配置为输入中间文档(224)并生成XMT结构化文档(2220)。然后使用XMT串行器(2270)基于XMT结构化文档(2245)创建XMT文件(2220)。文档编号G06FGK101427571SQ200380105014公开日2009年5月6日申请日期2003年11月29日优先权日2002年12月4日发明者威廉·拉肯申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1