專利名稱::從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日發明者威廉·拉肯申請人:國際商業機器公司