CN1720523A - 用于从mpeg-4文本表示创建mpeg-4中间格式的有效手段 - Google Patents

用于从mpeg-4文本表示创建mpeg-4中间格式的有效手段 Download PDF

Info

Publication number
CN1720523A
CN1720523A CNA200380104998XA CN200380104998A CN1720523A CN 1720523 A CN1720523 A CN 1720523A CN A200380104998X A CNA200380104998X A CN A200380104998XA CN 200380104998 A CN200380104998 A CN 200380104998A CN 1720523 A CN1720523 A CN 1720523A
Authority
CN
China
Prior art keywords
value
document
attribute
file
xmt
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA200380104998XA
Other languages
English (en)
Other versions
CN100470535C (zh
Inventor
威廉·鲁肯
埃蒂内·罗伊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN1720523A publication Critical patent/CN1720523A/zh
Application granted granted Critical
Publication of CN100470535C publication Critical patent/CN100470535C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/8543Content authoring using a description language, e.g. Multimedia and Hypermedia information coding Expert Group [MHEG], eXtensible Markup Language [XML]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/258Data format conversion from or to a database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/40Information retrieval; Database structures therefor; File system structures therefor of multimedia data, e.g. slideshows comprising image and additional audio data
    • G06F16/43Querying
    • G06F16/438Presentation of query results
    • G06F16/4387Presentation of query results by the use of playlists
    • G06F16/4393Multimedia presentations, e.g. slide shows, multimedia albums
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/85406Content authoring involving a specific file format, e.g. MP4 format

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Document Processing Apparatus (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

本发明公开了一种用于将可扩展MPEG-4文本(XMT)文档(2210)转换为二进制MPEG-4(mp4)文件(2230)的方法、系统和计算机程序产品。该XMT文档(2210)可包括0或多个相关媒体数据文件(2220)。本发明包括生成表示mp4文件的中间文档(2245),并根据中间文档(2245)和相关媒体数据文件(2220)创建mp4文件(2230)。第一转换器(2240)配置成输入XMT文档(2210),并生成至少一个表示mp4文件的结构的中间文档(2245)。第二转换器(2270)配置成输入中间文档(2245)和任何相关的媒体文件(2220),并生成mp4文件(2230)。

Description

用于从MPEG-4文本表示创建MPEG-4 中间格式的有效手段
技术领域
本发明一般涉及多媒体信息的数据表示,更具体地,涉及一种称作“MPEG-4文本表示”的多媒体信息表示的形式到另一种称作“MPEG-4中间格式”的多媒体信息表示的形式的转换。
背景技术
计算机通用于呈现多种数字媒体,包括图像、音频样本(声音)和视频媒体、以及文本和几何形状。这些媒体类型中的每一种都可被单独呈现,或者这些媒体元素中的多种可以以称作组合多媒体表示的方式一起呈现。
对于基于各种媒体类型的信息的传播来说,创建和分发组合多媒体表示的能力是相当重要的。此外,已经创建了表现组合多媒体表示的标准化手段,以使得许多编辑者能够创建可以在诸如个人计算机、机顶盒及其他设备的各种计算机平台上再现的表示。
由运动图像专家组(MPEG)开发的两种公知的组合多媒体表示的标准化格式为可扩展MPEG-4文本(XMT)格式和二进制编码MPEG-4(mp4)格式。XMT格式很适于编辑组合多媒体表示,而mp4格式很适于组合多媒体表示的压缩存储和传送。因此,期望能够有效地将XMT格式化的表示转换为mp4格式化的表示。
发明内容
如下面所描述的,本发明提供了一种用于将可扩展MPEG-4文本(XMT)格式转换为二进制编码MPEG-4(mp4)格式的方法、系统和装置。本发明使用包括相对较少数量的软件且其只需要最少量资源的有效工具来实现从XMT格式到mp4格式的组合多媒体表示转换。
这样,本发明的一个方面涉及一种用于将可扩展MPEG-4文本(XMT)文档转换为二进制MPEG-4(mp4)文件的方法。该XMT文档可能包括零或多个相关媒体数据文件。该方法包括生成表示mp4文件的中间文档,及根据该中间文档和相关媒体数据文件创建mp4文件。
本发明的另一方面在于一种用于将具有0或多个相关媒体文件的可扩展MPEG-4文本(XMT)文档转换为二进制MPEG-4(mp4)文件的系统。该系统包括第一转换器,其设置成输入XMT文档,并生成至少一个表示mp4文件的结构的中间文档。第二转换器设置成输入上述中间文档和任何相关的媒体文件,并生成mp4文件。
本发明的又一方面在于一种实现于有形介质中用于将具有0或多个相关媒体文件的可扩展MPEG-4文本(XMT)文档转换为二进制MPEG-4(mp4)文件的计算机程序产品。该计算机程序执行操作:生成表示mp4文件的中间文档,并根据上述中间文档和相关媒体数据文件创建mp4文件。
从下面对如附图中所示出的本发明各实施例的更具体描述中,本发明的上述和其他特征、用途和优点将是显而易见的。
附图说明
图1A示出本发明的一个实施例所使用的示例性XMT-A文档;
图1B示出示例性XMT-A初始对象描述符;
图2A示出示例性XMT-A par元素;
图2B示出示例性XMT-A odsm命令元素;
图3A示出示例性XMT-A插入命令;
图3B示出示例性XMT-A删除命令;
图3C示出示例性XMT-A替换命令;
图4示出示例性XMT-A BIFS节点元素;
图5A示出示例性MT-A BIFS节点;
图5B示出示例性重用的XMT-A BIFS节点;
图6A示出示例性XMT-A对象描述符;
图6B示出示例性XMT-A ES描述符;
图6C示出sdsm(BIFS)的示例性解码器详细信息;
图7A示出本发明的一个实施例生成的示例性mp4二进制文件;
图7B示出示例性mdat原子;
图7C示出示例性字节块;
图7D示出示例性moov原子;
图8A示出示例性mp4文件idos原子;
图8B示出示例性Mp4fInitObjectDescr;
图8C示出示例性ES_ID_Inc;
图9A示出示例性trak原子;
图9B示出示例性样本表格原子;
图10A示出示例性二进制ES描述符;
图10B示出示例性解码器配置描述符;
图10C示出示例性解码器详细信息描述符;
图10D示出示例性二进制SL配置描述符;
图11A示出示例性sdsm二进制字节块;
图11B示出示例性sdsm命令帧;
图12A示出示例性BIFS插入命令;
图12B示出示例性BIFS删除命令;
图12C示出示例性BIFS替换命令;
图12D示出示例性BIFS情境替换命令;
图13A示出示例性节点插入命令;
图13B示出示例性索引值的插入命令;
图13C示出示例性路由插入命令;
图14A示出示例性节点删除命令;
图14B示出示例性索引值的删除命令;
图14C示出示例性路由删除命令;
图15A示出示例性节点替换命令;
图15B示出示例性字段替换命令;
图15C示出示例性索引值的替换命令;
图15D示出示例性路由替换命令;
图16示出示例性BIFS情境;
图17A示出示例性SFN节点(重用的);
图17B示出示例性SFN节点(屏蔽节点);
图17C示出示例性SFN节点(列表节点);
图17D示出示例性MF字段(列表形式);
图17E示出示例性MF字段(向量形式);
图18A示出示例性路由(列表形式);
图18B示出示例性路由(向量形式);
图18C示出示例性路由;
图19A示出示例性odsm二进制字节块;
图19B示出示例性odsm二进制样本;
图20A示出示例性对象描述符更新命令;
图20B示出示例性对象描述符移除命令;
图21A示出示例性二进制对象描述符;
图21B示出示例性二进制EsI dRef描述符;
图22示出本发明设想的示例性XMT-A到MPEG-4中间文件转换器;
图23A示出示例性mp4file文档;
图23B示出示例性mp4fiods组件;
图24A示出示例性mdat组件;
图24B示出示例性sdsm组件;
图24C示出示例性odsm组件;
图24D示出示例性媒体文件组件;
图25A示出示例性odsm字节块组件;
图25B示出示例性odsm样本组件;
图25C示出示例性odsm命令组件;
图26A示出示例性trak组件;
图26B示出示例性stbl组件;
图27示出示例性ES_Descr;
图28A示出示例性mp4bifs文档;
图28B示出示例性mp4bifs命令帧元素;
图29A示出示例性mp4bifs bifs命令元素;
图29B示出示例性mp4bifs替换情景元素;
图30A示出示例性mp4bifs源节点元素;
图30B示出示例性mp4bifs条件节点元素;
图30C示出示例性mp4bifs重用节点元素;
图31A示出示例性处理XMT-A文档流程;
图31B示出示例性处理XMT-A头流程;
图32示出示例性处理XMT-A Descr元素流程;
图33示出示例性处理XMT-A esDescr元素流程;
图34示出示例性处理XMT-A ES_Descr流程;
图35示出示例性创建mdat元素流程;
图36A示出示例性创建trak元素流程;
图36B示出示例性创建stbl元素流程;
图37示出示例性创建esds元素流程;
图38示出示例性处理BIFS配置流程;
图39A示出示例性对象表;
图39B示出示例性BIFS NodeID表;
图39C示出示例性BIFS RouteID表;
图39D示出示例性替换情景时间表;
图39E示出示例性分类对象表;
图40示出示例性处理XMT-A体元素(第1遍或第2遍)流程;
图41示出示例性处理XMT-A par元素(第1遍或第2遍)流程;
图42示出示例性处理XMT-A命令元素(第1遍)流程;
图43示出示例性处理XMT-A par元素(第2遍)流程;
图44示出示例性处理插入命令流程;
图45示出示例性处理删除命令流程
图46示出示例性处理替换命令流程;
图47示出示例性创建替换情景命令流程;
图48示出示例性处理XMTA BIFS节点流程;
图49示出示例性处理odsm的XML表示流程;
图50示出示例性mp4原子结构创建流程;
图51示出示例性mp4对象结构创建流程;
图52示出示例性处理mdat元素流程;
图53示出示例性处理mediaFile元素流程;
图54示出示例性构建同步样本表流程。
标题表:
MPEG-4文本表示…………1.0
MPEG-4中间格式文件…………2.0
情景描述流(sdsm)…………3.0
对象描述符流(odsm)…………4.0
mp4文件文档…………5.0
mp4-bifs文档…………6.0
xmta-mp4转换器…………7.0
根据XMT-A文档创建中间文档…………7.1
创建XMT-A、mp4文件、和mp4bifs文档…………7.1.1
为mp4bifs文档创建新的“bifsConfig”元素…………7.1.2
为mp4file文档创建新的“moov”元素…………7.1.3
处理XMT-A“头”元素…………7.1.4
处理XMT-A体元素(第1遍)…………7.1.5
处理XMT-A par元素(第1遍)…………7.1.5.1
处理XMT-A命令元素(第1遍)…………7.1.5.2
“处理ODUpdate命令-1”过程…………7.1.5.3
“处理ODRmove cmnd”过程…………7.1.5.4
为odsm创建编辑列表…………7.1.6
处理XMT-A体元素(第2遍)…………7.1.7
处理XMT-A par元素(第2遍)…………7.1.7.1
处理ODUpdate命令-2…………7.1.7.2
处理插入命令…………7.1.7.3
“创建插入路由命令”过程…………7.1.7.4
“创建插入节点命令”过程…………7.1.7.5
处理删除命令…………7.1.7.6
处理替换命令…………7.1.7.7
“创建替换路由命令”过程…………7.1.7.8
“创建替换情景命令”过程…………7.1.7.9
“处理XMTA BIFS节点”过程…………7.1.7.10
数据格式转换…………7.1.7.11
将命令帧插入到mp4bifs文档中…………7.1.8
将OD命令插入到odsm的mdat元素中…………7.1.9
更新mp4-bifs和mp4-file文档的bifsConfig…………7.1.10
处理ES描述符…………7.1.10.1
创建trak元素…………7.1.10.2
创建初始样本表元素…………7.1.10.3
处理BIFS配置…………7.1.10.4
根据中间XML文档创建mp4二进制文件…………7.2
建立输入文档和输出目的地…………7.2.1
创建mp4原子的过程…………7.2.1.1
创建mp4对象结构的过程…………7.2.1.2
创建工作数组…………7.2.2
处理“mdat”元素…………7.2.3
插入媒体文件数据…………7.2.3.1
插入媒体数据块…………7.2.3.2
插入odsm数据…………7.2.3.3
ObjectDescrUpdate元素…………7.2.3.4
ObjectDescrRemove元素…………7.2.3.5
插入sdsm数据…………7.2.3.6
节点插入BIFS命令…………7.2.3.7
索引值插入BIFS命令…………7.2.3.8
路由插入BIFS命令…………7.2.3.9
节点删除命令…………7.2.3.10
索引值删除BIFS命令…………7.2.3.11
路由删除BIFS命令…………7.2.3.12
节点替换BIFS命令…………7.2.3.13
字段替换BIFS命令…………7.2.3.14
索引值替换BIFS命令…………7.2.3.15
路由替换BIFS命令…………7.2.3.16
情景替换BIFS命令…………7.2.3.17
Route结构…………7.2.3.18
SFNode结构…………7.2.3.19
SFField结构…………7.2.3.20
处理“moov”元素…………7.2.4
处理mp4fiods元素…………7.2.4.1
处理每一个trak元素…………7.2.4.2
处理mdia元素…………7.2.4.3
处理hdlr元素…………7.2.4.4
处理minf元素…………7.2.4.5
处理stbl元素…………7.2.4.6
处理stsc元素…………7.2.4.7
处理stsc元素…………7.2.4.8
处理stco元素…………7.2.4.9
处理stsz元素…………7.2.4.10
处理stss元素…………7.2.4.11
处理stsd元素…………7.2.4.12
处理ES_Descr元素…………7.2.4.13
处理BIFS DecoderConfig元素…………7.2.4.14
处理JPEG DecoderConfig元素…………7.2.4.15
处理VisualConfig元素…………7.2.4.16
处理AudioConfig元素…………7.2.4.17
处理媒体头元素…………7.2.4.18
处理tref元素…………7.2.4.19
处理edts元素…………7.2.4.20
处理可选用户数据元素…………7.2.5
更新odsm缓存大小…………7.2.6
具体实施方式
本发明是一种用于将可扩展MPEG-4文本(XMT)格式(这里也称作XMT-A文档和MPEG-4文本表示)转换为二进制编码的MPEG-4(mp4)格式(也称作MPEG-4中间二进制格式)的方法、系统和计算机程序。本发明使用只需要相对较少数量的软件和仅最小的资源的新的方案来实现从XMT-A到mp4的转换。这里参照图1-54来描述本发明。
1.0  MPEG-4文本表示
MPEG-4文本表示包括表现多媒体表示的结构的“文本文件”。多媒体表示包括声音、静止图像、视频剪辑和其他元素的同步组合或序列。文本文件是包括字母、数字和标点符号的二进制编码序列的电子数据结构。通常可使用统称为“文本编辑器”的软件来解释文本文件。存在许多文本编辑器的例子,包括用于基于Windows(r)操作系统的计算机的称作“NotePad.exe”的软件和用于使用统称为UNIX的各种操作系统的计算机的“vi”。Windows是位于华盛顿的Redmond的微软公司的注册商标。包括MPEG-4文本表示的特定类型的文本文件称为“XMT-A”文件。
在文本文件的范围内,XMT-A文件是可扩展标记语言(XML)文件的一个例子。XML文件是根据万维网联盟规定的原理(参见http://www.w3.org/TR/2000/REC-XML-20001006)的结构化文档。如国际标准化组织和国际电工委员会所规定的(参见2000年10月2日可于http://mpeg.telecomitalialab.com/working_documents.htm和国际标准化组织(ISO),1,rue de Varembe,Case postal 56,CH-1211 Geneva20,Switzerland获得的ISO/IEC文档14496-1:2000Amd.),XMT-A文件表现XML文件的特定实例。XMT-A规范的每一部分的完整描述篇幅都是很长的。因此,下面对XMT-A文件的描述仅限于对本发明进行描述所需规范的那一部分。读者应该参考所引用的用于XMT-A文件结构的完整描述的XMT规范文档。
像任何XML文件一样,XMT-A文件包括“元素”的层次集合。每一元素可能包括称作子元素的下级元素。此外,每一元素可能拥有一组称作“属性”的数据值。每一属性都具有名称和值。任何特定元素所拥有的特定属性名称和可能的子元素依赖于该元素的类型。每一属性值的解释依赖于相应的属性名称和拥有该属性的元素。
如图1A所示,XMT-A文件100包括两个主要部分,头元素110和体元素120。头元素110包括定义为InitialObjectDescriptor元素130的单个子元素。体元素120包括一个或多个作为子元素的“par”元素140。
InitialObjectDescriptor具有一个属性,ObjectDescriptorID(ODID)130,且其值为字符串。如图1B中所示,该元素具有两个子元素,简档元素150和Descr元素160。简档元素150不具有子元素。简档元素150拥有包括“includeInclineProfileLevelFlag”、“sceneProfileLevelIndication”、“ODProfileLevelIndication”、“audioProfileLevelIndication”、“visualProfileLevelIndication”、及“graphicsProfileLevelIndication”若干属性。
Descr元素160可能具有若干类型的子元素。仅对本发明必要的类型是唯一的“esDescr”元素170。esDescr170可能拥有一个或多个“ES_Descriptor”子元素180、190。ES_Descriptor元素指出“基本流”的某一属性,“基本流”是MPEG-4文档中定义的一个概念。下面简要说明ES_Descriptor元素的结构。
附属于InitialObjectDescriptor元素130的esDescr元素170拥有一个或两个ES_Descriptor元素180、190。在各种情况下,应该存在用于定义为“sdsm”或“情境描述流(scene description stream)”的基本流的ES_Descriptor 180。此外,还可能存在用于定义为“odsm”或“对象描述符流”的基本流的第二ES_Descriptor 190。用于odsm的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属性所确定的时间值是相对于任何父元素所暗示的时间值计算的,体元素120暗示零开始时间。
par-child元素210可能包含图2B中所示的两类odsm命令元素的实例。这些包括ObjectDescriptorUpdate元素220和ObjectDescritorRemove元素250。ObjectDescriptorUpdate元素220包含单个OD子元素230,而OD元素230包含单个ObjectDscriptor子元素240。下面更详细地描述ObjectDscriptor元素240。ObjectDescritorRemove元素250具有一个属性,且无子元素。ObjectDescritorRemove元素250的属性称为“ODID”。
Par-child元素210可能包含图3中所示的三类bifs命令元素的实例。这些包括插入元素300、删除元素310和替换元素320。如图3A所示,插入元素300可能具有“xmtaBifsNode”子元素330或“ROUTE”子元素340。删除元素310不具有子元素。替换元素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个BIFS节点元素中的任何一个。这些元素中的每一个具有图4中所示的一般结构400。每一个xmtaBifsNode元素400表示BIFS节点、其是在2001年8月MPEG-4系统规范ISO-IEC文档ISO/IEC 14496-1:2001的第9章中定义的一个二进制数据结构。关于该文档的信息可在http://mpeg.telecomitalialab.com/documents.htm和国际标准化组织(ISO)1,rue de Varembe,Case postale 56,CH-1211 Geneva20,Switzerland处获得。每一xmtaBifsNode元素400的元素标签是基于MPEG-4系统规范中定义的相应节点名称的。某些类型的xmtaBifs节点元素可能具有基于相应BIFS节点的某些属性的下级(子)元素。这些称作nodeField元素410。每一nodeField元素可能具有一个或多个包括其他xmtaBifsNode元素420的下级元素。这一排布可能循环重复,以描述BIFS节点的一个层次树。对这一层次的深度并没有限制。
每一BIFS节点具有若干称作“字段”的属性。这些字段的每一个具有已定义的字段名(串)和字段数据类型(布尔型、整型、浮点型等)。一种字段数据类型是“节点”。所有除了节点之外的字段数据类型由诸如xmtaBifsNode元素400的相同名字的属性表示。每一个具有“节点”类型的字段由xmtaBifsNode元素400的子元素410的相同名字的属性表示。xmtaBifsNode元素400的每一个子元素410可能具有作为子元素的一个或多个xmtaBifsNode元素420(xmtaBifsNode父元素400的孙子元素)。
图5中示出了XMT-A BIFS节点的XML表示。每一个XMT-ABIFS节点元素由NodeName标签500、570标识,这些标签唯一标识100多个可能类型的XMT-A BIFS节点中的一个。每一个节点元素可能是原始节点元素500或重用节点元素570。在原始节点元素500的情况下,可选属性“DEF”510可用于提供特定节点的唯一字母数字描述。如果提供了这一属性,则将该节点分类为“可重用”。
原始XMT-A BIFS节点元素还拥有一组字段属性520,一个字段属性用于一个为NodeName类型的节点定义的并具有除“节点”或“缓冲区”之外的节点数据类型的属性字段。这些属性在图5A中表示为“字段0”、“字段2”、“字段3”和“字段5”。这些属性中每一个的实际名称由MPEG-4系统规范中为“NodeName”类型的节点定义的相应属性字段名所确定。指派给这些属性的每一个的值必须代表具有MPEG-4系统规范中定义的节点数据类型(布尔型、整型、浮点型等)的数据值。
此外,原始XMT-A BIFS节点元素500可能具有一个或多个字段值子元素530、540,其具有对应于具有“节点”或“缓冲区”数据类型的属性字段的字段名的元素标签。每一个这样的字段值元素都具有起始标签530和结束标签540。这种字段值元素530、540的例子以图5A中的元素标签<字段1>、</字段1>和<字段4>...</字段4>表示。
在具有“节点”数据类型的属性字段的情况下,字段值元素可能包含一个或多个对应于BIFS节点元素550的子元素。这种NIFS节点子元素的例子以元素标签<NodeName1.../>、<NodeName2.../>和<NodeName3.../>表示。
在具有“缓冲区”数据类型的属性字段的情况下,字段值元素可能包含一个或多个对应于BIFS命令元素300、310、320的子元素。
如果一个XMT-A BIFS节点元素包括任何字段值子元素,则该节点元素将遵循标准XML原理,以</NodeName>结束标签560结束。
将上述XMT-A BIFS节点元素的定义递推地应用到每一个从属BIFS节点元素(<NodeName1>等),允许创建节点的分层树。对于XMT-A BIFS节点元素的这种树的深度没有限制。
在重用节点570的情况下,节点元素只具有一个属性,而且没有孩子节点。这唯一的属性是“USE”属性580,其值590是节点ID串。该作为USE属性的值的节点ID串必须与指定为具有相同NodeName的原始节点元素500的DEF属性510的节点ID串相匹配。
术语“xmtaTopNode”表示允许作为Scene元素的子元素的xmtaBifsNode元素的已定义子集中的一个。
如图6A所示,ObjectDescriptor元素240、600(ObjectDescriptorUpdate元素220)类似于上面描述的InitialObjectDescriptor元素130。与InitialObjectDescriptor元素130不同,ObjectDescriptor元素240、600缺少简档子元素150。与InitialObjectDescriptor元素130相同,ObjectDescriptor元素240、600具有“ObjectDescrhptorID”(ODID)属性606。典型的ObjectDescriptor元素240、600具有单个Descr子元素610,Descr元素610具有单个esDesrc子元素620,而esDesrc元素620具有单个ES_Descriptor子元素630。Descr元素610、esDesrc元素620及ES_Descriptor元素630类似于InitjalObjectDescriptor元素130的对应子元素160、170、180、190。
ES_Descriptor元素180、190、630可包含在ObjectDescriptor元素600或InitialObjectDescriptor元素130内。在每一种情况下,ES_Descriptor元素180、190、630具有图6B中所示的结构640。ES_Descriptor元素640的“ES_ID”属性636的值是字母数字串,其对于每一流来说是唯一的。ES_Descriptor元素640通常具有decConfigDescr子元素646和slConfigDescr子元素660。如果ES_Descriptor元素630、640从属于ObjectDescriptor元素600,则ES_Descriptor元素630、640还具有StreamSource子元素670。如果ES_Descriptor元素180、190、640从属于InitialObjectDescriptor元素130,则ES_Descriptor元素180、190、640不具有StreamSource子元素670。
decConfigDescr元素646具有DecoderConfigDescriptor子元素650。DecoderConfigDescriptor元素650具有若干属性,包括指示父ES_Descriptor元素640代表音频、视频、sdsm、odsm还是其他类型的媒体的“流类型”和“objectTypeIndication”。DecoderConfigDescriptor元素650还可具有依赖于流类型和objectTypeIndication的值的decSpecificInfo子元素656。
在sdsm(情境描述流)ES_Descriptor元素180的情况下,DecoderConfigDescriptor元素650具有decSpecificInfo子元素656。如图6C中所示,decSpecificInfo子元素680元素具有BIFSConfig子元素686。BIFSConfig元素686拥有若干指出怎样对BIFS节点进行编码的属性。BIFSConfig元素686还拥有命令流元素690,而命令流元素690拥有“大小”元素696。
slConfig元素660具有SLConfigDescriptor子元素666。SLConfigDescriptor元素666具有一个称作“预定”的属性,并且不具有子元素。“预定”属性通常具有值“2”。
StreamSource元素670具有一个“url”属性,并且不具有子元素。url属性的值指出一个文件名或互联网地址(URL,统一资源定位器),其表示包含音频数据、视频数据或其他为特定流定义实际的声音、图像等的数据的媒体数据文件的位置。对于sdsm(情景描述流)或odsm(对象描述流)来说,不存在StreamSource元素670,因为这些流都是由XMT-A文件定义的。
2.0  MPEG-4中间格式文件
MPEG-4中间格式文件是具有2001年8月的MPEG-4系统规范文档ISO-IEC 14496-1:2001的第13章中定义的结构和组成的电子数据的形式。这种电子数据结构的形式是一般称作“二进制文件”的形式的一个例子,因为它包括不限于字母、数字和标点的表示的二进制数据值序列。这允许比诸如XMT-A文件的典型文本文件所提供的要多的压缩数据结构。具有MPEG-4中间格式所定义的结构的电子数据的存储形式称作“mp4二进制文件”。与XMT-A文件不同,mp4二进制文件不能由大多数文本编辑软件所解释。
MPEG-4中间格式源自于苹果计算机公司在1996年所定义的、并可在http://developer.apple.com/techpubs/quicktime/qtdevdocs/REF/refFileFormat96.htm和http://developer.apple.com/techpubs/quicktime/qtdevdocs
/PDF/QTFileFormat.pdf处在线获得的QuickTime(r)文件。QuickTime是苹果计算机公司的注册商标。
因为它的QuickTime(r)继承性,MPEG-4中间格式保留多种源自QuickTime(r)规范的特性。这些特性包括作为数据结构的单位的“原子”概念。每一个原子具有两部分,头和体。头包含指出包括该原子(包括头)的字节数的原子大小值。头还包含指出原子的类型的原子ID。原子的体包含由该原子承载的数据。此数据可包括从属原子。在原子的基本形式中,原子包含由四个字节(无符号整数)组成的原子大小值和也包括四个字节(字符)的原子ID。在MPEG-4规范中还定义了具有不只4个字节的原子大小值和原子ID值的原子的扩展形式。
如图7A中所示,mp4二进制文件700包括一个或多个“mdat”原子706和一个“moov”原子712。moov原子712可在mdat原子706之前或在其之后。如图7B中所示,每一个mdat原子718包括原子大小值724,在其之后有四字节原子ID“mdat”730和称作“块”的数据块序列736。如图7C中所示,每一个块742包括媒体数据“样本”序列748。每一个样本748指出与单个媒体流的特定时间点相关的数据块。在单个块内的所有样本代表相同的媒体数据流。从对mdat原子700的检查中识别出各个样本748或块736、742是肯定可能的。可使用存储在mp4二进制文件之内的其他地方的表识别每一个样本748和块736、742。
如图7D所示,moov原子758包括原子大小值760,其后有四字节原子ID“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包括原子大小值,其后有四字节原子ID“mvhd”和若干数据值,包括时间日期戳、时标值、及文件持续时间值。Mvhd原子的原子大小值通常为108。时间日期戳指示该文件是何时创建的。时标值指示用于表示文件的时间值的每秒滴答数。文件持续时间值指示以时标值所指出的时间单位的呈现该文件中的材料所需的总时间。
如图8A中所示,iods原子800包括原子大小值804,其后有四字节原子ID“iods”808、8位版本值812、24位标志值816、及MP4fInitObjDescr数据结构820。如图8B所示,MP4fInitObjDescr数据结构824包括一字节MP4_IOD_TAG值828、随后数据块的字节数832、10位ObjectDescriptorID 836、两个标志位840、844、四个保留位848、及五个简档级别指示值852、856、860、864、868。简档级别指示值之后有一个或两个MPEG-4 ES_ID_Inc数据结构872。一个ES_ID_Inc数据结构表示trak原子790对应于sdsm(情景描述流)的ES_ID。第二个ES_ID_Inc结构只在odsm出现时才出现。如图8C所示,每一个ES_ID_Inc数据结构包括一字节ES_ID_IncTag值880、随后数据的字节数(通常为4)884、和32位ES_ID值888。
如图9A中所示,每一个trak原子900包括原子大小值903,其后有四字节原子ID“trak”906、“tkhd”(track header(跟踪头))原子910、及“mdia”(media(媒体))原子912。在代表odsm(objectdescriptor stream(对象描述流))的trak原子的情况下,trak原子还包括“tref”(track reference(跟踪基准))原子940。在具有定时开始的跟踪的情况下,提供一个“edts”(edit list(编辑列表))原子945,以指示何时开始跟踪。mdia原子912包括“mdhd”(media header(媒体头))原子915、“hdlr”(handler(处理器))原子918、“minf”(media information(媒体信息))原子920、“stbl”(sample tables(样本表))原子933、和媒体信息头原子936。“mhd”标签表示若干媒体信息头原子类型中的任意一种,这些类型包括“nmhd”(用于sdsm和odsm跟踪)、“smhd”(用于音频跟踪)、“vmhd”(用于视频跟踪)等。
tkhd原子910、mdhd原子915和hdlr原子918包含若干数据值,包括跟踪ID号、时间日期戳、媒体时标和媒体持续时间值。每一个跟踪具有它自己的时标,其可以不同于在mvhd原子772中指出的全局时标。
如图9B所示,样本表原子950包括原子大小值954,其后有四字节原子ID“stbl”957和一系列样本表原子960、963、966、970、974、978。各样本表原子可以处于任何顺序。这些包括“stsc”(sample-to-chunk-table(样本-块表))原子960、“stts”(time-to-sampletable(时间-样本表))原子963、“stco”(chunk offset table(块偏移表))原子966、“stsz”(sample size table(样本大小表))原子970、可能的stss(sync sample table(同步样本表))原子974、和“stsd”(sample description table(样本描述表))原子978。这些样本表原子中的每一个包含描述存储于相关mdat原子706、718中的二进制媒体数据736、748的属性的数据。
样本到块表(stsc原子)960包括原子大小值、四字节原子ID(“stsc”)、32位无符号整数(numStscEntries)、及样本-块数据记录序列。NumStscEntries的值指出在样本-块数据记录的序列中的项数。每一个样本-块数据记录包括三个32位无符号整数,其指出起始块号、每个块的样本数、及样本描述索引。样本描述索引是对样本描述表978中的项的索引。每个块的样本数指出在由起始块号指定的块736,及由下一项指定的起始块之前的所有后续块中的样本748的数量。
时间-样本表原子(stts原子)963包括原子大小值、四字节原子ID(“stts”)、32位无符号整数(numSttsEntries)、及时间-样本数据记录的序列。NumSttsEntries的值指出在时间-样本数据记录的序列中的项数。每一个时间-样本数据记录包括两个32位无符号整数,其指出样本计数和跟踪时标单位的样本持续时间。样本计数值指出具有相应样本持续时间的连续样本748的数量。
块偏移表原子(stco原子)966包括原子大小值、四字节原子ID(“stco”)、32位无符号整数(numStcoEntries)、及块偏移值序列。NumStcoEntries的值指出在块偏移值序列中的项数。这一序列中的每一个项包括一个32位无符号整数,其指出在mp4文件的起始与mdat原子718内的相应块736的起始之间的字节数。
样本大小表原子(stsz原子)970包括原子大小值、四字节原子ID(“stsz”)、及32位无符号整数(iSampleSize),其指出与这一trak原子900相关的所有媒体数据样本748的大小。如果与这一trak原子相关的媒体数据样本在大小上不全部相等,则iSampleSize的值被指定为0,32位无符号整数(numStszEntries)和样本大小值的序列也随之被指定为0。NumStszEntries的值指出样本大小值的序列中的项数。在这一序列中的每一项包括一个32位无符号整数,其指出在与这一trak原子900相关的媒体数据718内的相应样本748中的字节数。
同步样本表原子(stss原子)974(如果存在的话)包括原子大小值、四字节原子ID(“stss”)、32位无符号整数(numStssEntries)、和样本索引值的序列。NumStssEntries的值指出样本索引值的序列中的项数。这一序列中的每一项包括一个32位无符号整数,其指出对于“随机访问样本”的样本索引。随机访问样本索引识别对应于与这一trak原子900相关的媒体数据中的一个点的媒体数据样本748,该点是媒体播放器可以开始处理媒体数据而无需考虑之前的样本的点。这一表中的样本索引值应当是单调递增的。
样本描述表原子(stsd原子)978包括原子大小值、四字节原子ID(“stsd”)、32位无符号整数(numStscEntries)、及样本描述数据记录序列。NumStsdEntries的值指出样本描述数据记录的序列中的项数。每一个样本描述数据记录指出用于对样本-块数据记录中相应的索引所标识的媒体数据样本进行编码的手段。样本描述数据记录的序列通常具有单个项(numStsdEntries=1),其指出媒体类型(音频、视频、sdsm、odsm)、用于音频和视频样本的压缩算法等。每一个样本描述表项包含于“mp4*”原子982中,其中“mp4*”是“mp4s”(用于sdsm和odsm样本)、“mp4a”(用于音频样本)、和“mp4v”(用于视频样本)的通称。每一个“mp4”原子982包含“esds”(基本流描述符)原子986,且每一个esds原子986包含MPEG-4基本流描述符(ES_Descr)数据结构990。
图10A中示出了MPEG-4基本流描述符1000的结构。这一数据结构包括一字节标签(ES_DescrTag)1004,其后有该数据结构的余项中的字节数的指示1008、三个1位标志(streamDependenceFlag、URL_Flag和OCRstreamFlag)1016、及5位流优先级值1020。如果这三个标志1016中的任何一个是非0,则在流优先级值1020之后可以有其他数据值(未示出)。这些可选数据值对于本发明来说不是所需的。
流优先级值1020之后有解码器配置描述符数据结构1024和同步层配置描述符数据结构1028。图10B中示出了解码器配置描述符1024、1032。这一数据结构包括一字节标志(DecoderConfigDescrTag)1036,其后有该数据结构的余项中的字节数的指示1040、一系列数据值:对象类型1044、流类型1048、upStream位1052、保留位1056、bufferSizeDB 1060、maxBitrate1064、和avgBitrate1068。这些值之后可以有取决于解码器详细信息数据结构1072的流类型和对象类型。解码器详细信息数据结构1072对于sdam来说是所需的,但对于odsm来说不是所需的。大多数音频和视频媒体数据流在解码器配置描述符1032之内还具有解码器详细信息数据结构。
图10C中示出了解码器详细信息数据结构1072、1076。这一数据结构包括一字节标志(DecoderSpecificInfoTag)1080,其后有该数据结构中余项中的字节数的指示1084。剩余字节依赖于对象类型和流类型。在sdsm(情景描述流或BIFS)的情况下,解码器详细信息1072、1076包括用于编码节点ID值的位数、和用于编码路由ID值的位数的指示。这些值中的每一个由5位无符号整数表示。
图10D中示出了同步层配置描述符1028、1088的结构。这一数据结构包括一字节标志(SLConfigDescrTag)1090,其后有该数据结构中余项中的字节数的指示(通常为1)1094、及指示要用于同步层的预定配置的单个数据字节(值2,“预定的”)1098。
3.0  情景描述流(sdsm)
在XMT-A规范或MPEG-4中间格式文件规范中未规定用于对音频和视频数据流的特定字节进行编码或解码的手段,因此这里未涉及怎样对这些流进行编码的细节。XMT-A文档包含关于流描述流(sdsm)和对象描述流(odsm)的内容的详细信息。因此,每一个XMT-A文档密切涉及包含在MPEG-4中间文件内的sdsm和odsm流。这一部分描述sdsm数据的结构,下一部分描述odsm数据的结构。
与任何其他媒体数据流一样,sdsm数据包括一个或多个块,每一个块包括一个或多个样本。如图11A中所示,sdsm二进制块1100内的每一个样本被定义为“命令帧”1110。每一个命令帧1110是字节对齐的。如图11B中所示,每一个命令帧1110包括一个或多个“BIFS命令”1120。“BIFS”代表“流的二进制格式”。每一个BIFS命令1120之后有继续位1130、1140。如果继续位的值是(1),则其后有另一个BIFS命令。1140在与其不同的情况下时,继续位后有足够数量的空填充位1150填满最后的字节。除了命令帧中的第一个BIFS命令之外,各个BIFS命令1120一般不是字节对齐的。
如图12中所示,存在四字节的BIFS命令:“插入”、“删除”、“替换”和“情景替换”。BIFS插入命令1200包括两位插入代码(值=“00”)1206,其后有两位参数类型代码1210和插入命令数据1216。BIFS删除命令1220包括两位删除代码(值=“01”)1226,其后有两位参数类型代码1230和删除命令数据1236。BIFS替换命令1240包括两位替换代码(值=“10”)1244,其后有两位参数类型代码1250和替换命令数据1260。BIFS情景替换命令1270包括两位情景替换代码(值=“11”)1280,其后有BIFS情景数据结构1290。
如图13中所示,存在三种类型的BIFS插入命令:(a)节点插入命令,(b)索引值插入命令,和(c)路由插入命令。插入命令的类型由参数类型值1210确定。节点插入命令1300包括两位插入代码(值=“00”)1304,其后有两位参数类型代码(值=“01”,类型=节点)1308、节点ID值1312、两位插入位置代码1316、及SF节点数据结构1324。如果插入位置代码1316的值为0,则在插入位置代码1316之后有8位位置值1320。节点ID值1312在BIFS命令中的其他位置定义的一组可更新节点中指定其中的一个。在用于sdsm流的解码器详细信息1072中指出了用于对此和其他节点ID值进行编码的位数。SF节点数据结构1324的结构在下面解释。
索引值插入命令1328包括两位插入代码(值=“00”)1332,其后有两位参数类型代码(值=“10”,类型=IndexedValue)1336、节点ID值1340、inField值1344、两位插入位置代码1348、和字段值数据结构1356。如果插入位置代码1348的值为0,则在插入位置代码1348之后有8位位置值1352。节点ID值1340在BIFS命令的其他位置定义的一组可更新节点中指定其中的一个。在用于sdsm流的解码器详细信息1072中指出了用于对节点ID值1340进行编码的位数。inFieldID值1344标识由节点ID 1340的值指定的BIFS节点的数据字段中的某一个。用于对inField值1344进行编码的位数取决于包含在MPEG-4系统规范中的表。
字段值数据结构的内容依赖于指定BIFS节点的指定数据字段的字段数据类型(布尔型、整型、浮点型、字符串型、节点型等)。这可以如一位那样的简单,或可以如SF节点数据结构那样的复杂。包含在MPEG-4系统规范中的表中为每一个BIFS节点的每一个数据字段指定了字段数据类型。
路由插入命令1360包括两位插入代码(值=“00”)1364,其后有两位参数类型代码(值=“11”,类型=Route)1368、“isUpdateable”位1372、出发节点ID值1380、出发字段ID值1384、到达节点ID值1388、和到达字段ID值1392。如果“isUpdateable”位的值是(1),则路由ID值1376跟随“isUpdateable”位1372之后。在用于sdsm流的解码器详细信息1072中指出了用于对出发节点ID值1380和到达节点ID值1388进行编码的位数。用于对出发字段ID值1384进行编码的位数及用于对到达字段ID值1392进行编码的位数取决于包含在MPEG-4系统规范中的表。
如图14中所示,存在三种类型的BIFS删除命令:(a)节点删除命令,(b)索引值删除命令,及(c)路由删除命令。删除命令的类型由参数类型值1230确定。节点删除命令1400包括两位删除代码(值=“00”)1406,其后有两位参数类型代码(值=“00”,类型=Node)1412和节点ID值1418。节点ID值1418在BIFS命令中其他位置定义的一组可更新节点中指定其中的一个。在用于sdsm流的解码器详细信息1072中指出了用于对节点ID值1418进行编码的位数。
索引值删除命令1424包括两位删除代码(值=“01”)1430,其后有两位参数类型代码(值=“10”,类型=IndexedValue)1436、节点ID值1442、inFieldID值1448、和两位删除位置值1454。节点ID值1418在该BIFS命令中其他位置定义的一组可更新节点中指定其中的一个。在用于sdsm流的解码器详细信息1072中指出了用于对节点ID值1418进行编码的位数。
路由删除命令1466包括两位删除代码(值=“10”)1472,其后有两位参数类型代码(值=“11”,类型=Route)1478和路由ID值1484。路由ID值1484在该BIFS命令的其他位置定义的一组可更新路由中指定其中的一个。在用于sdsm流的解码器详细信息1072中指出了用于对路由ID值1484进行编码的位数。
如图15所示,存在四种类型的替换命令:(a)节点替换命令,(b)字段替换命令,(c)索引值替换命令,和(d)路由替换命令。插入命令的类型由参数类型值1210确定。节点替换命令1500包括两位替换代码(值=“10”)1504,其后有两位参数类型代码(值=“01”,类型=Node)1508、节点ID值1510、及SF节点数据结构1514。节点ID值1510在该BIFS命令的其他位置定义的一组可更新节点中指定其中的一个。在用于sdsm流的解码器详细信息1072中指出了用于对节点ID值1510进行编码的位数。SF节点数据结构1514的结构在下面解释。
字段替换命令1520包括两位替换代码(值=“10”)1524,其后有两位参数类型代码(值=“01”,类型=Field)1528、节点ID值1530、inFieldID值1534、及字段值数据结构1538。节点ID值1530在该BIFS命令中的其他位置定义的一组可更新节点中指定其中的一个。在用于sdsm流的解码器详细信息1072中指出了用于对节点ID值1530进行编码的位数。inFieldID值1534标识由节点ID1530的值指定的BIFS节点的数据字段之一。用于对inFieldID值1534进行编码的位数取决于包含在MPEG-4系统规范中的表。
索引值替换命令1540包括两位替换代码(值=“10”)1544,其后有两位参数类型代码(值=“10”,类型=索引值)1548、节点ID值1550、inFieldID值1554、两位替换位置代码1558、和字段值数据结构1564。如果替换位置代码1558的值为0,则在替换位置代码1558之后有8位位置值1560。节点ID值1550在一组由该BIFS命令的其他位置定义的可更新节点中指定其中的一个。在用于sdsm流的解码器详细信息1072中指出了用于对节点ID值1550进行编码的位数。inFieldID值1554识别由节点ID 1550指定的BIFS节点的数据字段中的一个。用于对inFieldID值1554进行编码的位数取决于包含在MPEG-4系统规范中的表。
路由替换命令1570包括两位替换代码(值=“10”)1574,其后有两位参数类型代码(值=“11”,类型=Route)1578、路由ID值1580、出发节点ID值1584、出发字段ID值1588、到达节点ID值1590、及到达字段ID值1594。路由ID值1580在该BIFS命令的其他位置定义的一组可更新路由中指定其中的一个。在用于sdsm流的解码器详细信息1072中指出用于对路由ID值1590进行编码的位数。在用于sdsm流的解码器详细信息1072中指出了用于对出发节点ID值1584和到达节点ID值1590进行编码的位数。用于对出发字段ID值1588进行编码的位数和用于对到达字段ID值1594进行编码的位数取决于包含在MPEG-4系统规范中包含的表。
如图12D中所示,替换情景BIFS命令1270包括两位情景替换代码(值=“11”)1280,其后有BIFS情景数据结构1290。如图16中所示,BIFS情景数据结构1600包括6位保留字段1610、两个一位标志(USENAMES 1620和protoList 1630)、SFTopNode数据结构1640、和一位标志(hasRoute)1650。如果protoList标志1630为真(1),则在protoList标志之后有MPEG-4系统规范中定义的其他数据。SFTopNode数据结构1640是图17中所示的SF节点数据结构的特殊情况。如果hasRoute标志1650为真(1),则在hasRoute标志之后有路由数据结构1660。图18中示出了路由数据结构的结构。
如图17A、17B和17C中所示,SF节点数据结构可具有下面三种形式中的一种:(a)重用,(b)mask节点、和(c)列表节点。所有这三种形式都以一位标志(isReused)开始。在重用SF节点1700的情况下,isReused标志的值为“1”(真)1704,且该SF节点数据结构的余项包括nodeIDref值1708。NodeIDref的值1708应当匹配该sdsm数据中其他位置定义的可更新SF节点的节点ID值。
如果isReused标志为假(0)1712、1732,则SF节点类型可具有图17B和17C中所示两种形式中的一个,这取决于maskAccess标志位的值1722、1742。在每一个种情况下,该SF节点的数据包括本地节点类型值(localNodeType)1714、1734、一位标志(isUpdateable)1716、1736、及第二个一位标志(maskAccess)1722、1742。用于对本地节点类型1714、1734进行编码的位数取决于MPEG-4系统规范中指定的表。如果isUpdateable标志1716、1736为真(1),则在isUpdateable标志之后有节点ID值1718、1738。如果isUpdateable1716、1736为真(1),且在相关BIFS情景数据结构1600中的USENAME标志1620也为真(1),则在节点ID值1718、1738之后有以空结尾的字符串(“name”)1720、1740。
如果maskAccess位为真(1)1722,则SF节点具有“mask节点”结构1710。在这一情况下,如图17B中所示,maskAccess位1722之后有mask位1726的有序序列,每一个在MPEG-4规范中为具有本地节点类型1714的值所给定的节点类型的BIFS节点定义的nField属性字段具有一个mask位1726。在这种mask位为真(1)的每一种情况下,mask位之后有二进制字段值1728,其根据由本地节点类型1734、字段号(在mask位的序列内的位置)和MPEG-4规范种定义的表多确定的字段数据类型(整型、布尔型、字符串型、节点型等)。
如果maskAccess位为假(0)1742,则SF节点具有“列表节点”结构1730。在这一情况下,如图17C中所示,maskAccess位1742之后有一个或多个字段引用记录。每一个字段引用记录以一位结束标志1744、1750开始。如果结束标志为假(0)1744,则结束标志1744之后有用于为本地节点类型1734定义的属性字段的字段引用索引号(fieldRef)1746,且fieldRef值1746之后有根据本地节点类型1734和由fieldRef值1746指示的属性字段确定的字段数据类型(整型、布尔型、字符串型、节点型等)编码的二进制字段值1748。用于对fieldRef值1746进行编码的位数由在MPEG-4系统规范中定义的表所确定。如果结束标志为真(1)1750,则结束字段值的列表。
每一个包括在SF节点结构内的属性字段值可包括单个数据值(SF字段数据结构)或多个数据值(MF字段数据结构)。每一个MF字段数据结构保留0或更多个SF字段成分。如图17D及17E中所示,根据isList位的值1766、1786,存在两种形式的MF字段结构:列表形式1760和向量形式1780。这两种形式以isList位1766、1786之后的一位保留位1762、1782开始。
如果isList位具有值(1)1766,则MF字段数据结构具有列表形式1760。在这一情况下,isList位1766之后有一位结束标志值的序列1770、1772。如果结束标志位的值为“0”1770,则结束标志位之后有SF字段数据结构1774。如果结束标志位的值为“1”1772,则MF字段数据结构结束。
如果isList位具有值(0)1786,则MF字段数据结构具有向量形式1780。在这一情况下,isList位1786之后有5位字段(nBits)1790,其指出后面的字段计数值(nField)1792中的位数。这之后有nFields SF字段结构1796。
每一个SF字段值的结构取决于与如MPEG-4系统规范中指定的表所指示的相应属性字段关联的特定字段数据类型。例如,布尔型字段包括单个位。在MPEG-4系统规范中定义并描述了其他包括整型、浮点型、字符串型、SF节点型的情况。
BIFS情景数据结构1600的最后部分是可选的路由数据结构1660。如图18A和18B中所示,存在两种形式的路由数据结构:列表形式1800和向量形式1830。这两种形式的路由数据结构均以一位列表标志1805、1835开始。如果列表标志的值为真(1)1805,则路由数据结构具有列表形式1800。在这一情况下,列表位1805之后有一个或多个路由数据结构1810,且每一个具有数据结构1810之后有一位moreRoutes标志1810、1820。如果moreRoutes标志的值为真(1)1810,则之后有另一个路由数据结构1810。如果moreRoutes标志的值为假(0)1820,则路由数据结构1800结束。
如果路由数据结构中的列表标志的值为假(0)1835,路由数据结构具有向量形式1830。在这一情况下,列表位1835之后有5位nBits字段1840。包含在nBits字段中的无符号整数值指出用于对后面的numRoutes值1845进行编码的位数。在后面的numRoutes值1845中编码的无符号整数指出在numRoutes值1845之后的路由数据结构1850的数量。
如图18C中所示,路由数据结构1860包括一位标志(isUpdateable)1865、outNodeID值1880、outFieldRef值1885、inNodeID值1890、及inFieldRef值1895。如果isUpdateable标志1865的值为真(1),则isUpdateable标志1865之后有routeID值1870。如果isUpdateable标志1865的值为真(1),且相应的BIFS情景数据结构1600中的USENAMES标志1620也为真(1),则路由ID值1870之后有以空结尾的字符串(路由名)1875。在用于sdsm流的解码器详细信息1072中指出了用于对outNodeID值、inNodeID值、和routeID值进行编码的位数。用于对outFieldRef和inFieldRef进行编码的位数由MPEG-4系统规范中定义的表确定。
4.0  对象描述符流(odsm)
与任何其他MPEG-4基本流相同,odsm(对象描述符流)包含于一个或多个块736的序列中。如图19中所示,每一个odsm块1900包括odsm样本1920的序列,且每一个odsm样本1940包括odsm命令1960的序列。每一个odsm块1900中的Odsm样本1920的数量由用于对象描述符流的trak原子790、900中的样本-块表原子(stsc)的内容所确定。每一个odsm样本1940中的odsm命令1960的数量由用于对象描述符流的trak原子790、900中的样本大小表原子(stsz)970所确定。
存在两种可能的odsm命令:对象描述符更新命令和对象描述符移除命令。如图20A中所示,对象描述符更新命令2000包括一字节对象描述符更新标签2010、该命令中余项中的字节数的指示(numBytes)2020、及对象描述符序列2030。对象描述符的结构概括于图21中。如图20B中所示,对象描述符移除命令2040包括一字节对象描述符移除标签2050、该命令的余项中字节数的指示(numBytes)2060、对象描述符ID值2070、和2到6个填充位2080。
每一个numBytes值2020、2060指出odsm命令的余项中的字节数。如果numBytes的值小于12B,则将numBytes的值编码在单个字节中。否则,numBytes的值编码在大小字节的序列中。每一个大小字节中的高位指示其后是否有另一个大小字节。如果该高位为“1”,则后面有另一个大小字节。每一个大小字节中的剩余7位指出所得到的numBytes的无符号整数值的7位。
每一个对象描述符ID值2070编码于10位中,并将在对象描述符移除命令2040中发现的10位对象描述符ID值的序列打包成字节序列。如果对象描述符ID值的数量不是4的倍数,则在最后的对象描述符ID值之后跟随两个、四个或六个空位2080,以填充这一命令中的最后字节。
如图21A中所示,对象描述符更新命令2000中的对象描述符2100包括一字节MP4_OD_Tag2100,其后有numBytes值2116、十位对象描述符ID值2124、一位URL_Flag值2132、五位保留字段(0x1f)2140、及ES Descr数据结构或EsIdRef数据结构2148。在对象描述符的这一形式中,URL_Flag2132通常为假(0)。NumBytes值2116指出包括对象描述符的余项的字节数,且其以为在对象描述符更新命令2000或对象描述符移除命令2040中发现的numBytes值指定的相同方式被编码。
图10A中示出了ES_Descr数据结构1000的结构。如图21B所示,EsIdRef数据结构2160包括一字节ES_ID_RefTag2170、numBytes值2180、和16位基本流ID(ES_ID)值2190。在这一情下,numBytes的值通常为“2”,且该值被指定为8位整数。
图22中示出了本发明的操作。本发明2200根据XMT-A文档2210和相关媒体数据文件2220,创建MPEG-4中间文件2230。输出MPEG-4中间文件2230还可称作“mp4二进制文件”或“mp4file”。输入XMT-A文档2210可包括基于XMT-A规范的文本文件或这样一个文件的一组数据结构表示,其中的XMT-A规范可在ISO/IEC14496-1:2000 Amd.2中发现。相关媒体数据文件2220代表由包含在XMT-A文档2210中的流源引用696所标识的音频、视频和图像数据。媒体数据文件2220的数量可以是0或更多。
本发明所执行的逻辑操作2200可以实现为(1)运行在计算机系统上的计算机执行的步骤序列,和/或(2)计算系统内互连的机器模块。该实现的一个问题是依赖于应用本发明的系统的性能需求的选择。因此,构成这里所描述的本发明的实施例的逻辑操作可选地称作操作、步骤或模块。
此外,由本发明所实现的操作可以是实现为计算机可读介质的计算机可读程序。例如,但不限于,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以任何用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的方法或技术实现的易失性和非易失性、可移动及不可移动介质。计算机存储介质包括但不限于RAM、ROM、EPROM、快闪存储或其他存储技术、CD-ROM、数字通用盘(DVD)或其他光存储器、盒式磁带、磁带、磁盘存储器或其他磁存储设备、或任何其他可用于存储所需信息并能由计算机访问的介质。通信介质通常在调制的数据信号(诸如载波或其他传输机制)中实现计算机可读指令、数据结构、程序模块或其他数据,并包括任何信息呈递介质。术语“调制的数据信号”意指具有信号特性集中的一种或多种的信号、或以对该信号中的信息进行编码的方式改变的信号。例如,但并不限于,通信介质包括有线介质(诸如有线网络或直接有线连接),或无限介质(诸如声音、RF、红外线和其他无线介质)。上述的任何的组合也应包括在计算机可读介质的范围之内。
如图22中所示,创建mp4file 2230的过程以两步来实现。在第一个步骤中,XMT-A到中间文档转换器2240解释输入XMT-A文档2210,并创建一个或多个表示MPEG-4中间文件2230的中间文档2245。在本发明的一个实施例中,由中间文档转换器创建一对中间文档2250和2260。中间文档包括mp4-file文档2250和mp4-bifs文档2260。在第二步骤中,中间文档到mp4file转换器2270根据与该XMT-A文档2210相关的mp4-文件文档2260、mp4-bifs文档2260和媒体数据文件2220(如果存在的话)生成输出mp4文件2230。
将这一过程2200分为两步的一个原因在于,尽管输出mp4文件2230表示由输入XMT-A文档2210和媒体数据文件2220所表示的相同信息,但输出mp4文件2230的组织和结构很大程度上不同于输入XMT-A文档的组织和结构。例如,mp4文件的结构密切相关于Quicktime(r)媒体数据文件的结构,但XMT-A的结构不具有一个Quicktime(r)媒体数据文件的特性。XMT-A文档包含情景描述流(sdsm)和对象描述符流(odsm)描述,但这些可以任何顺序混合。Mp4文件还包含sdsm和odsm的描述,但这些中的每一个被表示为临时排序样本的分离流。
因为mp4文件2230的结构和组织如此不同于XMT-A文档2210的结构和组织,所以将根据XMT-A文档2210创建mp4文件2230的过程分为至少两步是有利的,即(a)重组,和(b)二进制编码。在第一个步骤中,包含在XMT-A文档2210中的信息组织为反映mp4文件的结构和组织的形式。在第二个步骤中,通过遍历所得到的组织的信息而同时执行对该信息的二进制编码来创建输出mp4文件2230,其中的信息是以输出该mp4文件2230所需的顺序组织的。以这一方式,第一步可以在不考虑mp4文件的二进制编码的需求的情况下进行,而第二步可以在不考虑XMT-A文档的结构的情况下进行。
为了实现将根据XMT-A文档2210创建mp4文件2230的过程分为这两步的目的,定义新的结构化文档是必须的,该新结构化文档表示(a)mp4文件的结构和组织,(b)如在mp4文件中表示的流描述流(sdsm)的结构和组织,及(c)如在mp4文件2230中表示的对象描述符流(odsm)的结构和组织。这可通过定义三种新类型的结构化文档来实现,这三种结构化文档一个表示mp4文件、一个表示sdsm、和一个表示odsm。在这些当中,表示mp4文件和sdsm所需的结构化文档是相对复杂的,但表示odsm所需的结构化文档是非常简单的。因此,将odsm的描述并入用于表示mp4文件的结构化文档中是有利的。因此,在本发明的一个实施例中,引入了新的结构化文档,一个用于mp4文件和odsm,一个用于sdsm。这两个结构化文档被标识为mp4-文件文档2250和mp4-bifs文档2260。这些结构化文档统称为中间文档。
应该指出,为方便起见,选择使用了两种类型的结构化文档。通过定义三种类型的结构化文档(仅mp4文件、仅odsm及仅sdsm)、或所有三种类型的信息可以合并为单个复合结构化文档,可以实现该相同目的。
在本发明的一个实施例中,被创建来表示重组的信息的特定类型结构化文档是基于“XML”(可扩展标记语言)技术之上的。其是有利的,因为:
(a)XMT-A文档的定义是基于XML技术的;
(b)XML技术提供表示结构化文档的标准化手段;以及
(c)存在标准化软件工具,用于作用于基于XML技术的结构化文档。
这样,在本发明的一个实施例中,对包含在XMT-A文件中的信息进行重组的过程被简化为XML到XML的转换。此外,作用于XML文件的标准化软件使得对输入XMT-A文档以及中间文档进行管理,而无需开发新的执行该相同功能的专用软件成为可能。
尽管此实施例是基于对表示中间文档的XML技术的使用之上,但创建使用其他类型的结构化文档的本发明可选实施例是可能的。
下面的资料描述(1)mp4-文件文档2250的结构,(2)mp4-bifs文档2260的结构,(3)XMT-A到中间文档转换器2240的操作,和(4)中间文档到mp4文件转换器2270的操作。
.0mp4文件文档
如图23A中所示,mp4-文件文档2300的结构相当类似于mp4二进制文件700的结构。Mp4-文件文档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”、“ODProfileLevelIndcation”、“audioProfileLevelIndication”、“visualProfileLevelIndcation”、和“graphicsProfileLevelIndication”。Mp4fiods元素2360还包括一个或多个EsIdInc元素2380。每一个EsIdInc元素2380拥有trackID属性2390,其匹配相关trak元素2340的trackID属性。
如图24A中所示,每一个mdat元素240可包含下面元素中的一个或多个:sdsm元素2410、odsm元素2420、和mediaFile元素2430。这些元素中的每一个拥有唯一的“trackID”属性,其匹配相关trak元素2340的trackID属性。每一个mediaFile元素2430具有“name”属性,其指出包含相关媒体数据(音频数据、视频数据等)的外部二进制文件的文件名。每一个sdsm元素2410具有“xmlFile”属性,其指出表示相关mp4-bifs文档2260的XML文件的名字。在一个实施例中,对表示mp4-文件文档和/或mp4-bifs文档的XML文件的创建对于诊断目的是有用的,但这种文件对于本发明的操作不是所需的。
如图24B和24D所示,每一个sdsm元素2440和每一个mediaFile元素280包括一个或多个块元素2450、2490。每一个块元素2450、2490拥有“size”属性,其指示相关的二进制数据块中的字节数,如果已知的话。每一个块元素2450、2490还拥有“offset”属性,其指示二进制sdsm数据或媒体数据文件的开始与该二进制sdsm数据或媒体数据文件内的当前块的数据开始之间的字节数,如果已知的话。其他描述情景描述流(sdsm)的信息包含在mp4-bifs文档内。
如图24C所示,每一个odsm元素2460包含一个或多个odsmChunk2470元素。每一个odsmChunk元素2470拥有“size”属性,其指示对象描述符流中的相关部分的字节数,如果已知的话。每一个odsmChunk元素2470还拥有“offset”属性,其指示在相关对象描述符流的开始与该流的当前块的数据开始之间的字节数,如果已知的话。
如图25A所示,每一个odsmChunk元素2500包含一个或多个odsmSample元素2510。如图25B所示,每一个odsmSample元素2520包含一个或多个odsm命令元素2530。如图25C所示,每一个odsm命令元素可以是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”属性,其示出数字的对象描述符ID。每一个EsIdRef元素2560拥有“EsId”属性,其指出数字的基本流ID。
如图26A所示,Trak元素2350、2600的结构相当类似于mp4文件700内的trak原子790、900的结构。每一个trak元素2600包含mdia元素2604。Trak元素2600还包含tref(track reference(跟踪基准))元素2636和/或edts(edit list(编辑列表))元素2644。不存在类似于mp4文件中的tkhd原子910的tkhd元素。而是,包含在tkhd原子910中的属性表示为trak元素2600的属性。
Mdia元素2604包含hdlr元素2608和minf元素2612。Mdhd原子915的属性表示为mdia元素2604的属性。Minf元素2612包含dinf元素2616、stbl元素2628、和媒体头元素2632。媒体头元素(“*mhd”)2632可具有一种或几种依赖于相关数据流中的数据类型的形式。与sdsm或odsm相关的trak元素中的媒体头元素2632由“nmhd”元素代表。与音频流相关的trak元素中的媒体头元素2632由“smhd”元素代表,与视频流相关的trak元素内的媒体头元素2632由“vmhd”元素代表。
如图26B所示,stbl(sample tables(样本表))元素2628、2652包含stsc(sample-to-chunk-table(样本-块表))元素2656、stts(time-to-sample table(时间-样本表))2660、stco(chunk offset table(块偏移表))元素2664、stsz(sample size table(样本大小表))元素2668、和stsd(sample description table(样本描述表))元素2676。Stbl元素2664还可包括依赖于流或媒体类型的stss(sync sampletable(同步样本表))元素2672。Stsd元素2676可包含图26B中表示为“mp4*元素”2680的若干类型从属元素中的一种。在包含在与sdsm或odsm流相关的trak元素2600内的stsd元素2676的情况下,stsd元素2680包含“mp4s”元素。在包含在与音频流相关的trak元素2600内的stsd元素2680的情况下,stsd元素2680包含“mp4a”元素。在包含在与视频流相关的trak元素2600内的stsd元素2680的情况下,stsd元素2680包含“mp4v”元素。在每一个情况下,“mp4*”元素2680都包含esds元素2684,而esds元素2684包含ES_Descr元素2688。
如图27所示,ES_Descr元素2700包含解码器配置描述符元素2710和SLConfigDescriptor元素2760。解码器配置描述符元素2710可包含若干类型的解码器详细信息元素中的一种,包括BIFS_DecoderConfig元素2720、JPEG解码器配置2730、视频配置2740、或音频配置2750。这各种解码器详细信息中的每一种都表示包含在二进制解码器配置描述符结构1032中的解码器详细信息数据结构1072的一种形式。二进制ES_Descr结构1000、解码器配置描述符结构1032、SLConfigDescriptor结构1088、和解码器详细信息结构1076的属性由mp4-文件文档2300的相应元素2700、2710、2760、2720、2730、2740、2750的属性代表。
6.0  mp4-bifs文档
如图28A所示,mp4-bifs文档2800包含单个bifsConfig元素2810,其后有一个或多个命令帧元素2820的序列。如图28B所示,每一个命令帧元素2830包含一个或多个mp4bifs bifs命令元素2840。每一个命令帧元素2820、2830拥有属性“time”,其以秒指出当包含在命令帧元素中的命令要执行时的时间。
每一个mp4bifs bifs命令元素2840代表11种可能的MPEG-4BIFS命令:插入节点、插入索引值、插入路由、删除节点、删除索引值、删除路由、替换节点、替换字段、替换索引值、替换路由和替换情景中的一种。如图29A所示,mp4bifs bifs命令元素2910可包含一个或多个mp4bifs节点元素2920。在11种类型的bifs命令元素中,插入节点、插入索引值、替换节点、替换字段、替换索引值、和替换情景可包括从属mp4bifs节点元素2920。
如图29B所示,替换情景bifs命令元素2930可包括仅单个从属mp4bifs节点元素,则这肯定是“TopNode”元素2940。TopNode元素2940对应于MPEG-4BIFS节点的特定子集的一个成员。这个子集被定义于MPEG-4系统规范中。此外,替换情景bifs命令元素2930还可包括从属“Routes”元素2950,该“Routes”元素2950可包含一个或多个从属“Route”元素2960。Mp4bifsRoute元素2960具有属性“routeId”、“arrivalNodeId”、“arrivalField”、“departureNodeId”、和“departureField”。
除了可能的从属mp4bifs节点元素之外,每一种类型的mp4bifsbifs命令元素拥有下列属性值:
1.插入节点:“父Id”、“插入位置”和“位置”
2.插入索引值:“节点Id”、“inFieldName”、“插入位置”“位置”和“值”
3.插入路由:“路由Id”、“departureNode”、“departureField”、“arrivalNode”和“arrivalField”
4.删除节点:“节点Id”
5.删除索引值:“节点Id”、“inFieldName”、“删除位置”和“位置”
6.删除路由:“routeId”
7.替换节点:“父Id”
8.替换字段:“节点Id”、“infieldName”和“值”
9.替换索引值:“节点Id”、“infieldName”、“插入位置”、“位置”和“值”
10.替换路由:“路由Id”、“departureNode”、“departureField”、“arrivalNode”和“arrivalField”
11.替换情景:“USENAMES”(布尔值)
对于bifs命令元素插入索引值、替换字段、和替换索引值,如果由“infieldName”属性指定的属性字段具有节点数据类型“Node”(按照MPEG-4规范),则该元素将包含一个或多个从属mp4bifs节点元素2920,且“值”属性将包含与每一个从属节点元素相关的节点名的列表。
Mp4bifs节点元素2920代表多种类型的MPEG-4BIFS节点数据结构中的一种。在MPEG-4系统规范中定义了100多种不同的BIFS节点类型。每一种类型的MPEG-4 BIFS节点具有特定的节点名和属性字段集。
存在两种基本类型的mp4bifs节点元素:原始节点元素和重用节点元素。如图30A所示,mp4bifs原始节点元素3000由对应于MPEG-4系统规范中定义的其中一种BIFS节点的节点名属性的“NodeName”所标识。
Mp4bifs原始节点元素3000可具有可选的节点Id属性3010。如果对于节点Id属性3010指定了一个值,则节点元素3000被分类为“重用节点”。节点ID属性的值3010(如果指定了的话)是1到当前情景中定义的重用节点数的范围内的一个整数。如果对于节点ID属性3010已指定了一个值,且相关替换情景命令的“USENAMES”属性的值为“真”,则该节点元素将还具有“名称”属性3016。
除了节点ID3010和名称3016属性之外,每一个原始节点元素具有多个属性字段属性3020。每一个属性字段属性3020对应于MPEG-4系统规范中为特定节点元素的NodeName所标识的节点类型定义的属性字段中的一种。每一种属性字段具有已定义的字段数据类型,诸如布尔型、整型、浮点型等。可能的字段数据类型的集合包括“SFNode”和“MFNode”。如果特定原始节点元素的NodeName对应于MPEG-4BIFS节点具有字段数据类型“SFNode”和“MFNode”的属性字段或字段,则该节点元可拥有一个或多个从属节点元素3030。如果是这样,则相应属性字段属性的值包括与该属性字段相关的每一个从属节点元素的NodeName串。
如果例如具有NodeName“Group”的特定mp4bifs节点元素拥有具有与“children”属性相关的NodeName“Transform2D”、“Valuator”和“TimeSensor”的从属mp4bifs节点元素,则“children”属性的值将是“Transform2D Valuator TimeSensor”。
在条件BIFS节点的特殊情况下,属性字段中的一个具有属性字段名“buffer”,“buffer”属性字段的字段数据类型是“commandbuffer”且“buffer”属性字段的值包括一个或多个BIFS命令。在这一情况下,相应mp4bifs节点元素3040的NodeName为“conditional”。条件节点元素3040的节点ID属性3050和名字属性3056的值可以指定为用于任意其他的mp4bifs原始节点元素3000。代替从属节点元素3030,条件节点元素拥有一个或多个从属bofs命令元素3070,且“buffer”属性的值包括从属bifs命令元素3070的命令名的有序列表。
如果例如特定条件节点元素拥有其后有从属删除节点bifs命令元素的从属插入路由bifs命令元素,则“buffer”属性的值将为“插入路由删除节点”。
原始节点元素拥有从属节点元素或bifs命令元素的能力可对BIS命令和节点元素的层次集合循环重复。
如图30C所示,重用的节点元素3080具有NodeName“重用节点”。重用节点元素3080不具有从属元素。重用节点元素3080具有单个属性,称为“nodeRef”3090。NodeRef属性3090的值必须与可重用原始节点元素3000、3040中的一个的节点ID属性3010、3050的值匹配。
7.0  xmta-mp4转换器
如上面所述,本发明的一个实施例根据XMT-A文档2210和一组0个或多个二进制媒体数据文件2220,创建MPEG-4中间二进制文件(“mp4 file”)2230。
这一过程包括两个主要步骤:
a.第一步骤2240,其中根据XMT-A文档2210创建一对中间文档2250、2260,以及
b.第二步骤2270,其中根据中间文档2250、2260和在XMT-A文档2210中指定的任何二进制媒体数据文件2220,创建MPEG-4中间二进制文件2230。
媒体数据文件2220仅用于第二步骤中。第一步骤2240可使用媒体数据文件的名字,但这些媒体数据文件自身不用于第一步骤2240中。
这些主要步骤示于图22中,下面对其进行详细描述。
7.1  根据XMT-A文档创建中间文档
图31A中概括了创建中间文档2250的过程2240。设想过程2240可以硬件、如见和硬件和软件的组合来实现,以满足特定应用的需要。硬件实现趋向于工作更快速,而软件实现通常在制造上是低成本的。由过程2240实现的逻辑操作可是实现为(1)运行于计算机系统上的计算机实现步骤的序列和、或(2)计算机系统内互连的机器模块。该实现是依赖于应用本发明的系统的性能需求的选择问题。因此,这里所描述的构成本发明实施例的逻辑操作可选地称作操作、步骤、或模块。
7.1.1  创建XMT-A、mp4文件、和mp4bifs文档
过程2240开始于操作3100。可通过读取和解释表示XMT-A文档的XML文件来创建XMT-A文档100。可使用标准XML手段读取这样的一个文件,并产生表示包含在该XML文件内的所有信息的XMT-A文档。这是一个标准XML操作,且不是本发明专有的。可选地,可将先前从其他诸如基于XMTA的MPEG-4编辑工具的手段获得的XMT-A文档提供为对实现下面步骤的软件或其他手段的依据。
使用标准XML手段来创建空mp4file文档2300和空mp4bifs文档2800。这些文档中的每一个包含顶级元素,其不具有子元素,且除了可能的默认属性之外无其他属性。可向字符串量“sdsmFileName”指派一个值。该值仅在中间文档要保存到外部文本文件中时使用。可从输入XMT-A文档的名字中提取出一个适当值,如果存在的话。否则,将值“mp4bifs.xml”指派给量“sdsmFileName”。在操作3100完成之后,控制流传递给操作3106。
7.1.2  为mp4bifs文档创建新的“bifsConfig”元素
在操作3106,为mp4bifs文档创建新的“bifsConfig”元素。使用标准XML手段创建空的“bifsConfig”元素2810,并将其插入mp4bifs文档2800的顶级元素中。使用标准XML手段向该“bifsConfig”元素的下列属性指派值。向“nodeIdBits”属性指派值“0”。向“routeIdBits”属性指派值“0”。向“protoIdBits”属性指派值“0”。向“commandStream”属性指派值“真”。向“pixelMetric”属性指派值“真”。向“pixelHeight”属性指派值“0”。向“pixelWidth”属性指派值“0”。向“useBifsV2Config”属性指派值“假”。向“use3DmeshCoding”属性指派值“假”。向“usePredictiveMFField”属性指派值“假”。这些仅是临时值,其在后面将由从XMT-A文档中获取出的值替换。在操作3106完成之后,控制流传递给操作3110。
7.1.3  为mp4file文档创建新的“moov”元素
在操作3110,为该mp4file文档创建新的“moov”元素。使用标准XML手段创建空“moov”元素2320,并将其插入到该mp4file文档2300的顶级元素中。向量“nextTrackID”和量“nextEsId”指派值“1”。使用标准XML手段向该“moov”元素的下列属性指派值。
a.“creationTime”和“modificationTime”:这些属性的值将指出自从1904年1月1日以来所过去的秒数,表示为无符号整数。优选地,这些值应由当前时钟时间所确定。如果当前时钟时间不能获得,则可将这些值设置为任意值。这里所指出的实际值仅是参考性的,对所得到的MPEG-4二进制文件的处理不会有影响。
b.“timeScale”:该属性指出用于度量该MPEG-4二进制文件内的时间的每秒时钟滴答数。值1000暗示时间将以微秒来规定。
c.“duration”:向该属性指派值0。该值将在后面更新。
d.“nextTrackID”:向该属性指派量“nextTrackID”的值。该属性的值将在后面每一个新的“trak”元素被添加到该文档中且量“nextTrackID”的值增加时被更新。
此时,添加可选的“udta”(用户数据)元素2340是可能的。这可用于将版权消息插入在后面的主步骤2270中创建的MPEG-4二进制文件中。其他诸如作者标识符的信息也可在此时指出。在操作3110完成之后,控制流传递给操作3116。
7.1.4  处理XMT-A“头”元素
在操作3116,对XMT-A头进行处理。该步骤在“moov”元素2320中创建“mp4fiods”元素2330、2360。将为情景描述流(sdsm)创建“mdat”元素2310和“trak”元素2350。如果存在任何对象,则将为对象描述符流(odsm)创建另一个“mdat”元素2310和另一个“trak”元素2350。
可使用标准XML手段获得XMT-A文档100中的“头”元素110。然后,图31B中所示的步骤用于对该XMT-A“头”元素进行处理。该XMT-A“头”处理子操作开始于InitialObjectDescriptor处理操作3150。
然后,在操作3150,可使用标准XML手段获得从属于XMT-A“头”元素110的XMT-A“InitialObjectDescriptor”元素130。“InitialObjectDescriptor”元素130可具有称为“objectDescriptorID”的属性,其具有“IODID:nnn”形式的值,其中子串“nnn”代表正整数。可选地,该元素可具有称为“binaryID”具有值“nnn”的属性。在每一种情况下,由“nnn”表示的值都将指派给量“ODID”。如果这些属性中的每一个都不存在,则向量“ODID”指派值“1”。在操作3150完成之后,控制流传递给操作3160。
在操作3160,创建新的“mp4fiods”元素2330、2360,并将其插入到mp4file文档2300中的“moov”元素2320中。然后,将从XMT-A文档100中的“InitialObjectDescriptor”元素130中提取出的量“ODID”的值指派给“mp4fiods”元素2330、2360的“objectDescriptorID”属性2370。在操作3160完成之后,控制流传递给操作3170。
在操作3170,使用标准XML手段获得从属于“InitialObjectDescriptor”元素130的“Profiles”元素150。然后,根据“Profiles”元素150的同名属性的值设置“includeInlineProfiles”、“sceneProfileLevelIndication”、“ODProfileLevelIndication”、“audioProfileLevelIndication”、“visualProfileLevelIndication”和“graphicsProfileLevelIndication”属性的值。
“mp4fiods”元素2360的“includeInlineProfiles”属性的值必须为“真”或“假”。如果“Profiles”元素150中的“includeInlineProfiles”属性的值为“真”或“假”,则将同一值指派给“mp4fods”元素2360的“includeInlineProfiles”属性。否则,将值“假”指派给“mp4fiods”元素2360的“includeInlineProfiles”属性。
“mp4fiods”元素2360的五个简档和级别表示属性的值必须表示从-255到+255的数字值。“Profiles”元素150的相应属性可能具有相等的值,或它们可能具有由字母数字串指定的值。如果“Profiles”元素150的任何简档和级别表示属性具有字符串值“none”,则向“mp4fiods”元素2360的同名属性指派数字值“-1”或“255”。如果“Profiles”元素150的任何简档和级别表示属性具有字符串值“unspecified”,则向“mp4fiods”元素2360的同名属性指派数字值“-2”或“254”。在MPEG-4系统规范中包含的表中定义了“Profles”元素150的这些属性的其他字母数字值,并使其与数字值相关联。如果Profiles元素150的任何简档和级别表示属性的值与MPEG-4系统规范中定义的字母数字简档和级别字符串中的一个匹配,则将在这些表中指定的相应的数字值指派给“mp4fods”元素2360的相应属性。如果Profiles元素150的任何简档和级别表示属性的值包括不与MPEG-4系统规范中包含的简档和级别值的表中的任何项匹配的字母数字串,则向“mp4fiods”元素2360的相应属性指派值“-2”或“254”。在操作3170完成之后,控制流传递给操作3176。
在操作3176,使用标准XML手段获得从属于“InitialObjectDescriptor”元素130的“Descr”元素160。执行过程“处理Descr元素”3176,以识别从属于该Descr元素160的esDescr元素170。执行过程“处理esDescr元素”3180以识别每一个从属于esDescr元素的ES_Descriptor元素180、190。对于每一个从属于esDescr元素170的ES_Descriptor元素执行过程“处理ES_Descriptor”3186、3190。
如图32所示,过程“处理Descr元素”3176开始于向索引“i”3200指派值“0”。在该过程中,将索引“i”的值与量“numDescrChildren”3210的值进行比较。量numDescrChildren的值指示Descr元素160所拥有的从属元素的数量。如果索引“i”的值等于numDescrChildren的值,则过程“处理Descr元素”3176完成3260,过程“处理XMT-A头”3116完成,过程“处理XMT-A文档”前进到第1遍XMT-A体处理操作3120,下面进行描述。
如果索引“i”的值不等于numDescrChildren,则使用标准XML手段获得从属于Descr元素160的第i个元素,且所得到的从属元素标识为“DescrChildren”3220。如果DescrChildre的元素名为“esDescr”,则执行“处理esDescr元素”3240。随后,索引“i”的值递增1 3250,并重复“i”的值与numDescrChildren 3210的值的比较。期望每一个Descr元素生成单个从属esDescr元素。
如图33所示,过程“处理esDescr元素”3180开始于向索引“i”3300指派值“0”。该索引“i”不同于在过程“处理Descr元素”3180中定义的模拟量。在这一过程中,将索引“i”的值与量“numEsDescrChildren”3310的值进行比较。量numEsDescrChildren的值指示esDescr元素170所拥有的从属元素的数量。如果索引“i”的值等于numEsDescrChildren,则过程“处理esDescr元素”3180完成,且过程“处理Descr元素”3176通过递增该过程中的索引“i”3250的值而继续。
如果索引“i”的值不等于numDescrChildren的值,则使用标准XML手段获得从属于esDescr元素170的第i个元素,并将所得到的从属元素标识为“esDescrChildren”3320。如果esDescrChildren的元素名为“ES_Descriptor”,则执行过程“处理ES_Descriptor”3340。图34中示出了过程“处理ES_Descriptor”,并在下面的“处理ES_Descriptor”之下描述该过程的操作。
随后,将索引“i”的值递增1 3350,并重复“i”的值与numEsDescrChildren 3310的值的比较。
期望每一个从属于Descr元素160(而Descr元素160从属于InitialObjectorDescriptor130)的esDescr元素170生成一个或两个ES_Descriptor元素180、190,一个用于情景描述流(sdsm)180,而可能的一个用于对象描述符流(odsm)190。在XMT-A文档100包括音频、视频或其他对象时,期望有用于odsm的ES_Descriptor元素190。使用过程“处理ES_Descriptor”处理每一个ES_Descriptor元素180、190。这一过程在下面进行描述。
7.1.5  处理XMT-A体元素(第1遍)
在操作3120,构建一组列举XMT-A文档100的体元素120中定义的所有媒体对象、可重用BIFS节点和可重用路由的表。这些表用于确定媒体对象的数量、BIFS节点的数量和路由的数量。这些表还用于确定媒体对象的某些属性,用于解决对媒体对象、BIFS节点和路由的引用。
每一个媒体对象都由ObjectDescriptor元素240所定义。每一个ObjectDescriptor元素240都包含在对象描述符更新命令元素220中,而该命令元素包含在XMT-A文档100的体元素120内的“par”元素140、200中。媒体对象的属性包括ObjectDescriptorID(ODID)、对象开始时间、对象结束时间和对象持续时间。ObjectDescriptorID是指定为“ObjectDescriptor”元素240的“ObjectDescriptorID”属性的字母数字串。
对象开始时间由附加于“par”元素200的“begin”属性确定。
对象结束时间由附加于对象描述符移除命令元素250的“par”元素200的“begin”属性所确定。在对象描述符移除命令元素250中指定的ObjectDescriptorID(ODID)属性的值必须与在相应的ObjectDescriptor元素240中指定的ObjectDescriptorID属性的值相匹配。对象持续时间是对象结束时间与对象开始时间之间的差。
ObjectDescriptorID串的值、及相关开始和停止时间存储于图39A中所示的对象表中。该表具有五列,ObjectDescriptorID 3910、OdId 3920、开始时间3930、停止时间3940、和EsId 3950。每一列中的各项由标识该表中的每一行的“position”值3900所指示。
可重用BIFS节点由指定“DEF”属性的值的XMT-A BIFS节点元素所定义。该属性的值是字母数字串。可重用BIFS节点DEF串的值存储于图39B中所示的表中。该表具有一列,NodeString 3966。该列中的各项由标识该表中的每一行的“position”值3960所指示。
可重用路由指定“DEF”属性的值的XMT-A路由元素所定义。该属性的值是字母数字串。可重用路由DEF串的值存储于图39C所示的表中。该表具有一列,RouteString 3976。该列中的各项由标识该表中每一行的“position”值3970所指示。
第四个表记录替换情景命令的时间值。该表具有一列,ReplaceSceneTime 3986。该列中的各项由标识该表中的每一行的“position”值3980所指示。
通过遍历图40中所示的XMT-A“体”元素内的从属元素来构建这些表。该过程开始操作4000,向索引“i”指派值“0”。在操作4000完成之后,控制流传递给操作4010。
在操作4010,将索引“i”的值与量“numBodyChildren”的值进行比较。量numBodyChildren的值指示由XMT-A体元素120所拥有的从属元素的数量。
在操作4010之后,如果索引“i”的值等于numBodyChildren的值,则该过程完成4060,且处理继续创建odsm的编辑列表。
如果索引“i”的值不等于numBodyChildren的值,则控制传递给操作4020,在其中使用标准XML手段获得从属于体元素120的第i个元素,并将所得到的从属元素标识为“bpdyChild”。以字符串量“childName”来标识元素bodyChild的元素名。
在操作4020完成之后,控制传递给操作4030,在其中将字符串量childName的值与字符串“par”进行比较。如果childName的值为“par”,则在处理操作4040,向量“parTime”指派值“0”,并使用当前bodyChild元素作为父元素来执行过程“处理XMT-A par元素(第1遍)”4040。过程“处理XMT-A par元素(第1遍)”在下面进行描述。
在操作4040完成之后,控制传递给操作4050,在其中随后将索引“i”的值递增1,并重复“i”的值与numBodyChildren 4010的值的比较。
7.1.5.1  处理XMT-A par元素(第1遍)
XMT-A“par”元素140、200可从属于XMT-A体元素120或另一个XMT-A“par”元素200。对每一个XMT-A“par”元素200的处理如图41所示。
在操作4100,将当前“par”元素200的“begin”属性的值与量“parTime”4040、4136的当前值相加,并将结果指派给量“时间”。
在操作4106,向索引“i”指派值“0”。该索引不同于在替他过程中使用的类似索引值。
在操作4110,将索引“i”的值与量“numParChildren”的值进行比较。量numParChildren的值指示当前“父”元素所拥有的从属元素的数量。
在操作4116,如果索引“i”的值等于numParChildren的值,则该过程完成,且如果该“父”元素从属于体元素120则处理继续操作4050,或如果“父”元素从属于另一“par”元素200则处理继续操作4126。
在操作4120,如果索引“i”的值不等于numParChildren的值,则使用标准XML手段获得从属于当前父元素的第i个元素,并将所得到的从属元素标识为“parChild”元素。ParChild元素的元素名由字符串“childName”所标识。
在操作4130,将字符串量childName的值与字符串“par”进行比较。
在操作4136,如果childName的值为“par”,将量“时间”的值指派给量“parTime”,并使用当前parChild元素作为“父”元素递归执行过程“处理XMT-A par元素(第1遍)”。在该过程完成之后,处理继续步骤4126,该步骤将在下面进行描述。
在操作4140,将字符串量childName的值与字符串“Delete”进行比较。如果childName的值为“Delete”,不进行任何处理,且处理继续操作4126。
在操作4150,将字符串量childName的值与字符串“Insert”进行比较。
在操作4160,将字符串量childName的值与字符串“Replace”进行比较。
在操作4166,如果childName的值为“Insert”或“Replace”,则使用当前parChild元素作为“父”元素执行过程“处理XMT-A命令元素(第1遍)”。该过程将在下面描述。在该过程完成之后,处理继续操作4126。
在操作4170,将字符串量childName的值与字符串“ObjectDescriptorUpdate”进行比较。
在操作4176,如果childName的值为“ObjectDescriptorUpdate”,则使用当前parChild元素作为“父”元素来执行过程“处理ODUpdatecmnd-1”。该过程将在下面描述。在该过程完成之后,处理继续操作4126。
在操作4180,将字符串量childName的值与字符串“ObjectDescriptorRemove”进行比较。
在操作4186,如果childName的值为“ObjectDescriptorRemove”,则使用当前parChild元素作为“父”元素来执行过程“处理ODRemove cmnd”。该过程在下面描述。
在操作4126,随后将索引“i”的值递增“1”,并重复操作4110的“i”的值与numParChildren的值的比较。
7.1.5.2  处理XMT-A命令元素(第1遍)
过程“处理XMT-A命令元素(第1遍)”可或者作为过程“处理XMT-A par元素(第1遍)”的一部分4166或递归作为过程“处理BIFS命令元素(第1遍)”的一部分4270来执行。如图42所示,该过程开始于操作4200,向索引“i”指派值“0”(不同于其他过程中使用的类似索引值)。
在操作4206,将索引“i”的值与量“numCmdChildren”的值进行比较。量numCmdChildren指示当前“父”元素200所拥有的从属元素的数量。
在操作4290,如果索引“i”的值等于numCmdChildren的值,该过程完成,且如果“父”元素从属于体元素120则处理继续操作4050,或如果“父”元素从属于另一个“par”元素200则处理继续操作4126。
在操作4210,如果索引“i”的值不等于numCmdChildren的值,则使用标准XML手段获得从属于当前父元素的第i个元素,且所得到的从属元素标识为“cmdChild”元素。以字符串量“childName”标识cmdChild元素的元素名。
在操作4216,将字符串量childName的值与字符串“ROUTE”进行比较。
在操作4220,如果childName的值为“ROUTE”,则使用标准XML手段获得cmdChild元素的“DEF”属性的值。如果不存在“DEF”属性,则不进行任何操作,并处理继续操作4280。
在操作4226,如果已为cmdChild元素的“DEF”属性指定了一个值,则将“DEF”属性的值指派给字符串量“idString”。然后,将IdString的值与路由ID表3976的每一个当前项进行比较。如果idString的值与该表中的任何当前项匹配,则处理继续操作4280。
在操作4230,如果idString的值不与路由ID表3976中的任何一个当前项匹配,则在该表中创建新项,并将idString的当前值指派给该新项。然后,处理继续操作4280。
在操作4240,将字符串量childName的值与字符串“Scene”进行比较。
在操作4246,如果childName的值为“Scene”,则在替换情景时间表3986中创建新项,并将量“time”的当前值指派给该新项。处理继续操作4280。
在操作4250,使用标准XML手段获得cmdChild元素的“DEF”属性的值。如果不存在“DEF”属性,处理继续操作4270。
在操作4256,如果已为cmdChild元素的“DEF”属性指定了一个值,则将“DEF”属性的值指派给字符串量“idString”。然后,将idString的值与NodeID表3966的每一个当前项进行比较。如果idString的值与该表中的任何当前项匹配,则处理继续操作4270。
在操作4260,如果idString的值不与NodeID表3966中的任何当前项匹配,则在该表中创建新项,并将idString的当前值指派给该新项。
然后,在操作4270,递归使用当前cmdChild元素作为父元素执行当前过程(处理BIFS命令元素(第1遍))。
随后,在操作4280,将索引“i”的值递增“1”,并重复操作4206的“i”的值与numCmdChildren的值的比较。
7.1.5.3  “处理ODUpdate命令-1”过程
使用标准XML手段获得从属于(父)对象描述符更新命令元素220的“OD”元素230。然后,使用标准XML手段获得从属于“OD”元素230的ObjectDescriptor元素240。将ObjectDescriptor元素240的“ObjectDescriptorID”属性(在图2B中缩写为“ODID”)的值与对象表(图39A)中ObjectDescriptorID列3910中的各项进行比较。如果发现匹配,则将量“time”的当前值指派给开始时间列3930中的相应项。
如果“ObjectDescriptorID”属性的值不与对象表的ObjectDescriptorID列3910中的任何当前项匹配,则向对象表中添加新项,将“objectDescriptorID”属性的值指派给ObjectDescriptorID列3910中的该新项,将量“time”的当前值放置在开始时间列3930中的相应项中,并将值“-1.0”放置在停止时间列3940中的相应项中。将对象表中的项数指派给OdId列3920中的相应项。作为过程“处理XMT-A体元素(第2遍)”的一部分,向EsId列3950中的相应项指派一个值。
7.1.5.4  “处理ODRmove cmnd”过程
将(父)对象描述符移除命令元素250的“ObjectDescriptorID”属性(在图2B中缩写为“ODID”)的值与对象表3910中的ObjectDescriptorID列中的各项进行比较。如果发现有匹配,则将量“time”的当前值指派给停止时间列3940中的相应项。
如果“objectDescriptorID”属性的值不与对象表的ObjectDescriptorID列3910中的任何当前项匹配,则向对象表添加一个新项,将“ObjectDescriptorID”属性的值指派给ObjectDescriptorID列3910中的该新项,将量“time”的当前值放置在停止时间列3940中的相应项中,并将值“-1.0”放置在开始时间列3930中的相应项中。对象表中的项数被指派给OdId列3920中的相应项。作为过程“处理XMT-A体元素(第2遍)”的一部分,将一个值指派给EsId列3950中的相应项。
7.1.6  为odsm创建编辑列表
在对XMT-A体元素的第一遍之后,比较对象表(图39A)中的开始时间项3930的值,以找到最小开始时间项(startTimeMin)。比较停止时间项3940的相应值,以确定最大停止时间项(stopTimeMax)。将stopTimeMax的值与startTimeMin的值之间的差指派给量“duration”。
如果最小开始时间值大于0,则将编辑列表(“edts”)元素2644插入到与odsm(对象描述符流)相关的trak元素2600中。这按下述来实现:
1.使用标准XML手段获得mp4-file文档2300中的moov元素2320。
2.使用标准XML手段获得moov元素2320中的每一个trak元素2350。
3.将每一个track元素2350的trackID属性的值与量trackIdForOdsm的值进行比较。当odsm的trak元素2350被创建时指派该值。
4.如果特定track元素2600的trackID属性的值与trackIdForOdsm的值匹配,则执行下述步骤。
5.使用标准XML手段创建新的edts元素2644,并将其插入到所选择的trak元素2600中。
6.使用标准XML手段创建新的elst元素(2648),并将其插入到新的edts元素2644中。
7.使用标准XML手段创建新的segment元素,并将其插入到新的elst元素2648中。
向该“segment”元素的“开始时间”属性指派值“-1”。向该“segment”元素的“rate”属性指派值“1.0”。向该新“segment”元素的“duration”属性指派“moov”元素2320中的“timeScale”属性与开始时间的值的乘积。
8.使用标准XML手段创建第二个新的segment元素,并将其插入到新的elst元素2648中。
向该第二个“segment”元素的“开始时间”属性指派值“0”。向该第二个“segment”元素的“rate”属性指派值“1.0”。向该第二个“segment”元素的“duration”属性指派量“duration”的值与“moov”元素2320中的“timeScale”的值的乘积。
7.1.7  处理XMT-A体元素(第2遍)
在该步骤中,再次对XMT-A“体”元素的从属元素进行遍历,如图40所示的那样。使用图43中所示的过程“处理XMT-A par元素(第2遍)”对在此次遍历中发现的每一个从属“par”元素进行处理4040。在该过程完成之后,处理继续步骤8,“向mp4bifs文档插入命令帧”。
7.1.7.1  处理XMT-A par元素(第2遍)
在操作4300,将当前“父”元素200的“begin”属性的值与量“parTime”4040、4346的当前值相加,并将结果指派给量“time”。
在操作4306,向索引“i”指派值“0”。该索引不同于在其他过程中使用的类似索引值。
在操作4310,将索引“i”的值与量“numParChildren”的值进行比较。量numParChildren的值指示当前“父”元素所拥有的从属元素的数量。
在操作4316,如果索引“i”的值等于numParChildren的值,则该过程完成,且如果该“父”元素从属于体元素120则处理继续4050,或如果“父”元素从属于另一个“par”元素200则处理继续4336。
在操作4320,如果索引“i”的值不等于numParChildren的值,则使用标准XML手段获得从属于当前父元素的第i个元素,并将所得到的元素标识为“parChild”元素。ParChild元素的元素名由字符串量“childName”标识。
在操作4330,使用标准XML手段创建新的命令帧元素2820、2830。
在操作4340,将字符串量childName的值与字符串“par”进行比较。
在操作4346,如果childName的值为“par”,则将量“time”的值指派给量“parTime”,并使用当前parChild元素作为“父”元素递归执行过程“处理XMT-A par元素(第2遍)”。在该过程完成之后,处理继续步骤4336,该步骤将在下面描述。
在操作4350,将字符串量childName的值与字符串“ObjectDescriptorUpdate”进行比较。
在操作4356,如果childName的值为“ObjectDescriptorUpdate”,则使用当前parChild元素作为“父”元素执行过程“处理ODUpdate命令-2”。该过程将在下面描述。在该过程完成之后,处理继续4126。
在操作4360,将字符串量childName的值与字符串“Insert”进行比较。
在操作4366,如果childName的值为“Insert”,则使用当前parChild元素作为“父”元素执行过程“处理插入命令”。该过程将在下面描述。在该过程完成之后,处理继续步骤4336,该步骤将在下面描述。
在操作4370,将字符串量childName的值与字符串“Delete”进行比较。
在操作4376,如果childName的值为“Delete”,则使用当前parChild元素作为“父”元素执行过程“处理删除命令”。该过程将在下面描述。在该过程完成之后,处理继续步骤4336,该步骤将在下面描述。
在操作4380,将字符串量childName的值与字符串“Replace”进行比较。
在操作4386,如果childName的值为“Replace”,则使用当前parChild元素作为“父”元素执行过程“处理替换命令”。该过程将在下面描述。
在操作4336,将在步骤4330创建的当前commandFrame元素2830插入到临时排序的commandFrame元素的列表中。这通过将每一个新的commandFrame元素插入到该列表中的一个位置处,该位置在该列表的具有大于新的commandFrame元素的time属性的值的time属性的第一个成员之前,或在该列表不具有大于新的commandFrame元素的time属性的值的time属性的当前成员时处于该列表的末端。在操作4330之后立即执行操作4336,而不是在操作4326之前立即执行操作4336是可能的(如图43所示)。在每一种情况下,操作4330和4336可创建不包含命令的空commandFrame元素、具有与其他commandFrame元素相同的time属性的多个commandFrame元素。在操作3136,消除空commandFrame元素,并组合具有相同time属性的多个命令帧。
随后,在操作4326,将索引“i”的值递增“1”,并重复“i”的值与numParChildren 4310的比较。
7.1.7.2  处理ODUpdate命令-2
使用标准XML手段获得从属于(父)对象描述符更新命令元素220的“OD”元素230。然后,使用标准XML手段获得从属于“OD”元素230的ObjectDescriptor元素240。然后,使用标准XML手段获得从属于“ObjectDescriptor”元素600的“Descr”元素610。如图32中所示的那样对“Descr”元素610进行处理,以获得从属“esDescr”元素620。如图33中所示的那样对“esDescr”元素620进行处理,以获得从“ES_Descriptor”元素630。然后,对于每一个以这种方式获得的“ES_Descriptor”元素630执行下面描述的过程“处理ES_Descriptor”。
7.1.7.3  处理插入命令
图44中示出了用于处理“插入”命令元素的步骤。该过程中的父元素是XMT-A插入命令元素300。该命令元素可以从属于XMT-A“par”元素200,或从属于条件节点元素400的“buffer”属性元素410。如果插入命令元素从属于XMT-A“par”元素200,则mp4bifs“目标”元素是在4330中创建的命令帧元素2820、2830。如果插入命令元素从属于条件节点元素400的“buffer”属性元素410,则mo4-bifs“目标”元素是mp4-bifs条件节点元素。
最初,向两个布尔值bInsertNode和bInsertValue指派值“假”。
在操作4400,将父元素的“atNode”属性的值指派给量“NodeId”。如果已对“atNode”属性指定了一个值,则该过程继续操作4446。
在操作4406,如果已对“atNode”属性指定了一个值,则将父元素的“atField”属性的值指派给量“FieldName”。
在操作4416,如果已对“atField”属性指定了一个值,则将量“FieldName”的值与字符串“children”进行比较。
在操作4410,如果已对“atField”指定了一个值,或量“FieldName”的值为“children”,则向布尔量“bInsertNode”指派值“真”,且该过程继续操作4446。
在操作4420,如果已对“atField”属性指定了一个值,且量“FieldName”的值不是“children”,则使用标准XML手段创建新的mp4-bifs插入索引值命令元素(“newCommand”)。然后,使用标准XML手段将该newCommand元素添加到当前mp4-bifs目标元素。
在操作4426,将父元素的“value”属性的值指派给量“value”。
在操作4430,如果已对XMT-A BIFS命令元素的“value”属性指定了一个值,则向新mp4bifs newCommand元素指派一个值。在大多数情况下,指派给新mp4bifs newCommand元素的“value”属性的值等于XMT-A BIFS命令元素的“value”属性的值。在下面识别的某些情况(数据格式转换)下,指派给新mp4bifs newCommand元素的“value”属性的值是从XMT-A BIFS命令元素的“value”属性的值中导出的。
在这种情况下,该过程完成,且处理继续操作4336或对XMT-A条件节点元素4890的处理。
在操作4436,如果已对“value”属性指派了一个值,则向布尔量“nInsertValue”指派值“真”。创建包括直接从属于当前父元素的所有元素的元素名列表的字符串量“childName”。
在操作4440,将字符串量“childNames”的值指派给新mp4-bifs元素“newCommand”的“value”属性。
在操作4446,向索引“i”指派值“0”,该索引值不同于在其他部分定义的其他索引值。
在操作4450,将索引“i”的值与量“numCmdChildren”的值进行比较。量numCmdChildren的值指示当前“父”元素所拥有的从属元素的数量。
在操作4456,如果索引“i”的值等于numCmdChildren的值,则该过程完成,且处理继续操作4336或对XMT-A条件节点元素4890的处理。
在操作4460,如果索引“i”的值不等于numCmdChildren的值,则使用标准XML手段获得从属于当前父元素的第i个元素,并将所得到的从属元素标识为“insertChild”元素。该insertChild元素的元素名由字符串量“childName”所标识。
在操作4470,将字符串量childName的值与字符串“ROUTE”进行比较。
在操作4476,如果字符串量childName的值为“ROUTE”,则执行过程“创建插入路由命令”。然后,使用标准XML手段将所得到的newCommand元素添加到当前mp4-bifs目标元素。然后,该过程继续操作4466。
在操作4480,如果字符串量childName的值不是“ROUTE”,则将布尔量bInsertNode的值与值“真”进行比较。
在操作4486,如果布尔量bInsertNode的值为“真”,则执行过程“创建插入节点命令”。然后,使用标准XML手段将所得到的newCommand元素添加到当前mp4-bifs目标元素。处理继续操作4496。
在操作4490,如果布尔量bInsertNode的值不是“真”,则将布尔量bInsertValue的值与值“真”进行比较。
在操作4496,如果布尔量bInsertValue的值为“真”,或布尔量bInsertNode的值为“真”,则使用当前insertChild元素作为父元素执行过程“处理XMT-A BIFS节点”。然后,使用标准XML手段将所得到的mp4-bifs节点元素添加到newCommand元素。处理继续操作4466。
在操作4498,如果布尔量bInsertValue的值不是“真”,则XMT-A文档无效,并报告出错。使用当前insertChild元素作为父元素执行过程“处理XMT-A BIFS节点”。然后,使用标准XML手段将所得到的mp4-bifs节点元素添加到当前mp4-bifs目标元素。处理继续操作4466。
在操作4466,将索引“i”的值递增“1”,并重复numCmdChildren的比较4450。
7.1.7.4  “创建插入路由命令”过程
使用标准XML手段创建新的mp4-bifs插入路由命令元素(“newCommand”)。
将XMT-A父元素的“fromNode”属性的值与BIFS节点ID表(图39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量fromNodeID,并将结果递增“1”。然后,将该结果指派给newCommand元素的“departureNode”属性。
将XMT-A父元素的“formField”属性的值指派给newCommand元素的“departureFieldName”属性。
将XMT-A父元素的“toNode”属性的值与BIFS节点ID表(39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量fromNodeId,并将结果递增“1”。然后,将该结果指派给newCommand元素的“arrivalNode”属性。
将XMT-A父元素的“toField”属性的值指派给newCommand元素的“arrivalFieldName”属性。
如果已对XMT-A父元素的“DEF”属性指定了一个值,则将该属性的值与BIFS路由ID表(图39C)中的各项3976进行比较。将匹配项的“位置”3970的值指派给整型量routeID,并将结果递增“1”。然后,将该结果指派给newCommand元素的“routeId”属性。如果布尔量bUseNames的值为真,则将“DEFS”属性的值指派给newCommand元素的“name”属性。BUseName的值是在处理“替换情景”命令时建立的。
7.1.7.5  “创建插入节点命令”过程
使用标准XML手段创建新的mp4-bifs插入节点命令元素(“newCommand”)。
将量“NodeId”的值与BIFS节点ID表(图39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量atNodeId,并将结果递增“1”。然后,将该结果指派给newCommand元素的“parentID”属性。
如果XMT-A父元素的“位置”属性的值为“BEGIN”,则向newCommand元素的“插入位置”属性指派值“2”。
如果XMT-A父元素的“位置”属性的值为“END”,则向newCommand元素的“插入位置”属性指派值“3”。
如果XMT-A父元素的“位置”属性的值不是“BEGIN”,也不是“END”,则向newCommand元素的“插入位置”属性指派值“0”,并将XMT-A父元素的“位置”属性的值指派给newCommand元素的“位置”属性。
7.1.7.6  处理删除命令
图45中示出了用于处理“删除”命令元素的步骤。该过程中的父元素为XMT-A删除命令元素310。该命令元素可从属于XMT-A“par”元素200,或从属于条件节点元素400的“buffer”属性元素410。如果删除命令元素从属于XMT-A“par”元素200,mp4bifs“目标”元素为在4330中创建的命令帧元素2820、2830。如果删除命令元素从属于条件节点元素400的“buffer”属性元素410,则mp4-bifs“目标”元素为mp4-bifs条件节点元素。
在操作4500,将父元素的“atRoute”属性的值指派给量“RouteId”。
在操作4510,如果已对“atRoute”属性指定了一个值,则使用标准XML手段创建新的mp4-bifs删除路由命令元素(“newCommand”),并将量“RouteId”的值指派给newCommand元素的“routeId”属性。然后,使用标准XML手段将newCommand元素添加到当前mp4-bifs目标元素。
在操作4520,将父元素的“atNode”属性的值指派给量“NodeId”。
在操作4530,如果已对“atNode”属性指定了一个值,则该XMT-A文档无效。
在操作4540,如果已对“atNode”属性指定了一个值,则将父元素的“atField”属性的值指派给量“FieldName”。如果已对“atField”属性指定了一个值,则将量“FieldName”的值与字符串“children”进行比较。
在操作4560,如果已对“atField”指定了一个值,且量“FieldName”的值不是“children”,则使用标准XML手段创建新的mp4-bifs删除索引值命令元素(newCommand)。将量atField的值指派给newCommand元素的“infieldName”属性。
如果XMT-A父元素的“位置”属性的值为“BEGIN”,则向newCommand元素的“删除位置”属性指派值“2”。
如果XMT-A父元素的“位置”属性的值为“END”,则向newCommand元素的“删除位置”属性指派值“3”。
如果XMT-A父元素的“位置”属性的值不为“BEGIN”,也不为“END”,则向newCommand元素的“删除位置”属性指派值“0”,并将XMT-A父元素的“位置”属性的值指派给newCommand元素的“位置”属性。
然后,使用标准XML手段将newCommand元素添加到当前mp4-bifs目标元素。
在操作4580,如果已对“atField”属性指定了一个值,或量“FieldName”的值为“children”,则使用标准XML手段创建新的mp4-bifs删除命令元素(“newCommand”)。
将量“NodeId”的值与BIFS节点ID表(图39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量atNodeId,并将结果递增“1”。然后,将该结果指派给newCommand元素的“nodeId”属性。
然后,使用标准XML手段将newCommand元素添加到当前mp4-bifs目标元素。
7.1.7.7  处理替换命令
图46中示出了用于处理XMT-A“替换”元素的步骤。该过程中的父元素是XMT-A替换命令元素320。该命令元素可从属于XMT-A“par”元素200,或从属于条件节点元素400的“buffer”属性元素410。如果该替换命令元素从属于XMT-A“par”元素200,则mp4bifs“目标”元素是在4330中创建的命令帧元素2820、2830。如果该替换命令元素从属于条件节点元素400的“buffer”属性元素410,则该mp4-bifs“目标”元素是mp4-bifs条件节点元素。
最初,向两个布尔值bReplaceNode和bReplaceValue指派值“假”。
在操作4600,将父元素的“atNode”属性的值指派给量“NodeId”。如果已对“atNode”属性指定了一个值,则该过程继续操作4636。
在操作4604,如果已对“atNode”属性指定了一个值,则将父元素的“atField”属性的值指派给量“FieldName”。
在操作4612,如果已对“atField”属性指定了一个值,则使用标准XML手段创建新的mp4-bifs替换节点命令元素(“newCommand”)。将量“NodeId”的值与BIFS节点ID表(图39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量atNodeId,并将结果递增“1”。然后,将该结果指派给newCommand元素的“nodeId”属性。
使用标准XML手段将newCommand元素添加到mp4-bifs目标元素中。向布尔量“bReplaceNode”指派值“真”,且该过程继续操作4636。
在操作4616,如果已对“atField”属性指定了一个值,则使用标准XML手段创建新的mp4-bifs替换字段命令元素(“newCommand”)。将量“NodeId”的值与BIFS节点ID表(图39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量atNodeId,并将结果递增“1”。然后,将该结果指派给newCommand元素的“nodeId”属性。
将量“FieldName”的值指派给newCommand元素的“inFieldName”属性。然后,使用标准XML手段将newCommand元素添加到当前mp4-bifs目标元素中。
在操作4629,将父元素的“value”属性的值指派给量“value”。
在操作4624,如果已对XMT-A BIFS命令元素的“value”属性指定了一个值,则向新的mp4bifs newCommand元素的“value”属性指派一个值。在大多数情况下,指派给新的mp4bifs newCommand元素的“value”属性的值等于XMT-A BIFS命令元素的“value”属性的值。在下面识别的某些情况(数据格式转换)下,指派给新的mp4bifsnewCommand元素的“value”属性的值是从XMT-A BIFS命令元素的“value”属性的值中导出的。在这种情况下,该过程完成,且处理继续操作4336或对XMT-A条件节点元素4890的处理。
在操作4628,如果已对“value”属性指定了一个值,则向布尔量“bReplaceField”指派值“真”。创建包括直接从属于当前父元素的所有元素的元素名列表的字符串量“childNames”。
在操作4632,将字符串量“childNames”的值指派给该新的mp4-bifs元素“newCommand”的“value”属性。
在操作4636,向索引“i”指派值“0”,其不同于其他部分定义的其他索引值。
在操作4640,将索引“i”的值与量“numCmdChildren”的值进行比较。量numCmdChildren的值指示当前“父”元素所拥有的从属元素的数量。
在操作4644,如果索引“i”的值等于numCmdChildren的值,则该过程完成,且处理继续操作4336或对XMT-A条件节点元素操作4890的处理。
在操作4648,如果索引“i”的值不等于numCmdChildren的值,则使用标准XML手段获得从属于当前父元素的第i个元素,并将所得到的从属元素标识为“replaceChild”元素。该replaceChild元素的元素名由字符串量“childName”所标识。
在操作4652,将字符串量childName的值与字符串“Scene”进行比较。在操作4656,如果字符串量childName的值为“Scene”,则执行过程“创建替换情景命令”。然后,使用标准XML手段将所得到的newCommand元素添加到当前mp4-bifs目标元素中。然后,该过程继续操作4696。
在操作4660,如果字符串量childName的值不是“Scene”,则将字符串量childName的值与字符串“ROUTE”进行比较。在操作4664,如果字符串量childName的值为“ROUTE”,则执行过程“创建替换路由命令”。然后,使用标准XML手段将所得到的newCommand元素添加到当前mp4-bifs目标元素中。然后,该过程继续操作4696。
在操作4668,如果字符串量childName的值不是“ROUTE”,则将布尔量bReplaceNode的值与值“真”进行比较。
在操作4672,如果布尔量bReplaceNode的值为“真”,则使用当前replaceChild元素作为父元素执行过程“处理XMT-A BIFS节点”。然后,使用标准XML手段将所得到的mp4-bifs节点元素添加到当前mp4-bifs目标元素中。处理继续操作4496。
在操作4680,如果布尔量bReplaceNode的值不为“真”,则将布尔量bReplaceField的值与值“真”进行比较。
在操作4684,如果布尔量bReplaceField的值为“真”,则使用当前replaceChild元素作为父元素执行过程“处理XMT-A BIFS节点”。然后,使用标准XML手段将所得到的mp4-bifs节点元素添加到newCommand元素中。处理继续操作4496。
在操作4690,如果布尔量bReplaceNode的值不为“真”,则XMT-A文档无效。使用当前replaceChild元素作为父元素执行过程“处理XMT-A BIFS节点”。然后,使用标准XML手段将所得到的mp4-bifs节点元素添加到当前mp4-bifs目标元素中。处理继续操作4496。
在操作4696,将索引“i”的值递增“1”,并重复操作4640的与numCmdChildren的比较。
7.1.7.8  “创建替换路由命令”过程
使用标准XML手段创建新的mp4-bifs替换路由元素(“newCommand”)。
将XMT-A父元素的“fromNode”属性的值与BIFS节点ID表(参见图39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量“fromNodeId”,并将结果递增“1”。然后,将该结果指派给newCommand元素的“departureNode”属性。
将XMT-A父元素的“fromField”属性的值指派给newCommand元素的“departureFieldName”属性。
将XMT-A父元素的“toNode”属性的值与BIFS节点ID表(参见图39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量fromNodeId,并将结果递增“1”。然后,将该结果指派给newCommand元素的“arrivalNode”属性。
将XMT-A父元素的“toField”属性的值指派给newCommand元素的“arrivalFieldName”属性。
将XMT-A父元素的“atRoute”属性的值与BIFS路由ID表(见图39C)中的各项3976进行比较。将匹配项的“位置”3970的值指派给整型量routeId,并将结果递增“1”。然后,将该结果指派给newCommand元素的“routeId”属性。如果已对XMT-A父元素的atRoute属性指定了一个值,则该XMT-A文档有效。
7.1.7.9  “创建替换情景命令”过程
图47中示出了用于创建mp4-bifs“替换情景”命令元素的步骤。该过程中的XMT-A父元素是XMT-A情景命令元素320。该命令元素通常从属于XMT-A“替换”元素200。
在操作4700,使用标准XML手段创建新的mp4-bifs“替换情景”命令元素2930(newCommand)。使用标准XML手段将该新命令元素添加到当前mp4-bifs目标元素中。该mp4-bifs目标元素必须是mp4-bifs命令帧元素2830或mp4-bifs条件节点元素。向布尔量“bHaveRoutes”指派值“假”。
在操作4710,将XMT-A“情景”元素的“useNames”属性的值指派给布尔量“USENAMES”。
在操作4716,如果已对XMT-A“情景”元素的“useNames”属性指定了一个值,则将布尔量“USENAMES”的值与值“真”进行比较。
在操作4720,如果已对XMT-A“情景”元素的“useNames”属性指定了一个值,或布尔量“USENAMES”的值不为“真”,则向布尔量“bUseNames”指派值“假”。
在操作4726,如果布尔量“USENAMES”的值为“真”,则向布尔量“bUseNames”指派值“真”。
在操作4730,向索引“i”指派值“0”,其不同于其他部分定义的其他索引值。
在操作4740,将索引“i”的值与量“numSceneChildren”的值进行比较。量numSceneChildren的值指示该XMT-A情景元素所拥有的从属元素的数量。
在操作4746,如果索引“i”的值等于numSceneChildren的值,则该过程完成,且处理继续操作4656。
在操作4750,如果索引“i”的值不等于numSceneChildren的值,则使用标准XML手段获得从属于XMT-A情景元素的第i个元素,并将所得到的从属元素标识为“sceneChild”元素。SceneChild元素的元素名由字符串量“childName”所标识。
在操作4760,将字符串量childName的值与字符串“ROUTE”进行比较。
在操作4766,如果字符串量childName的值为“真”,则将布尔量bHaveRoutes的值与值“真”进行比较。
在操作4770,如果布尔量bHaveRoutes的值不为“真”,则使用标准XML手段创建新的mp4-bifs“Routes”元素。使用标准XML手段将所得到的mp4-bifs“Routes”元素添加到newCommand元素中。向布尔量“bHaveRoutes”指派值“真”。
在操作4776,使用标准XML手段创建新的mp4-bifs“Route”元素。使用标准XML手段将所得到的mp4-bifs“Route”元素添加到mp4-bifs“Routes”元素中。
将XMT-A父元素的“fromNode”属性的值与BIFS节点ID表(见图39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量fromNodeId,并将该结果递增“1”。然后,将该结果指派给mp4-bifs Route元素的“fromNode”属性。
将XMT-A父元素的“fromField”属性的值指派给mp4-bifs Route元素的“fromFieldName”属性。
将XMT-A父元素的“toNode”属性的值与BIFS节点ID表(见图39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量fromNodeId,并将结果递增“1”。然后,将该结果指派给mp4-bifsRoute元素的“toNode”属性。
将XMT-A父元素的“toField”属性的值指派给mp4-bifs Route元素的“toFieldName”属性。
如果已对XMT-A父元素的“DEF”属性指定了一个值,则将该属性的值与BIFS路由ID表(见图39C)中的各项3976进行比较。将匹配项的“位置”3970的值指派给整型量routeId,并将结果递增“1”。然后,将该结果指派给mp4-bifs Route元素的“routeId”属性。如果布尔量bUseName的值为真,则将“DEFS”属性的值指派给mp4-bifsRoute元素的“name”属性。
在操作4780,如果字符串量childName的值不为“ROUTE”,则使用当前sceneChild元素作为父元素执行过程“处理XMT-A BIFS节点”。使用标准XML手段将所得到的mp4-bifs节点元素添加到newCommand元素中。处理继续操作4496。
在操作4790,将索引“i”的值递增“1”,并重复操作4740的与numSceneChildren的比较。
7.1.7.10  “处理XMTA BIFS节点”过程
在MPEG-4系统规范中定义了100多种类型的BIFS节点。每一个MPEG-4 BIFS节点具有特定节点名称和一组指定属性字段。每一个指定属性字段具有特定的数据类型,诸如布尔型、整型、浮点型、字符串型、“node”或“buffer”。对于每一种类型的MPEG-4BIFS节点,为XMTA文档和mp4bifs文档定义了相应的同名节点元素。为mp4bifs文档定义的每一个节点元素拥有一组具有匹配相应MPEG-4 BIFS节点的那些属性字段的名称的属性。
如图30所示,每一个具有数据类型“node”或“buffer”的MPEG-4BIFS属性字段还可由mp4bifs节点元素的一个或多个从属元素代表,且mp4bifs节点元素的相应属性包括与该属性字段相关的从属元素的元素名称的列表。这些从属元素可以是节点元素或命令元素。以这种方式,每一个mp4bifs节点元素的结构模拟相应MPEG-4 BIFS节点的结构。
除了为每一个XMT-A节点元素定义的属性仅包括不具有“node”或“buffer”的数据类型的属性之外,为XMT-A文档定义的节点元素与那些为mp4bifs文档定义的节点元素类似。对于具有“node”或“buffer”的数据类型的MPEG-4 BIFS节点的每一个属性,XMTA规范定义了不具有属性的同名从属属性元素,且相应属性字段由从属于这些属性元素的节点元素或命令元素代表。
如图48所示,对于XMTA BIFS节点元素的转换过程开始于4800,将XMT-A节点元素的“USE”属性的值指派给字符串量“nodeRef”。如果已对该XMT-A节点元素的“USE”属性指定了一个值,则在操作4806使用标准XML手段创建新的mp4bifs重用节点元素。使用标准XML手段将该新的重用节点元素插入到当前mp4bifs目标元素中。
在操作4810,将字符串量“nodeRef”的值与BIFS节点ID表(见图39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量nodeId,并将结果递增“1”。然后,将该结果指派给newCommand元素的“nodeRef”属性。在操作4816,对该XMT-A节点元素的处理完成,处理继续对拥有该XMT-A节点元素的XMT-ABIFS命令元素或父XMT-A BIFS节点元素进行处理。
在操作4820,如果已对该XMT-A节点元素的“USE”属性指定了一个值,则使用标准XML手段创建新的mp4bifs NodeName元素,其中“NodeName”代表当前XMT-A BIFS节点元素的名称。使用标准XML手段将该新的“NodeName”元素插入到当前mp4bifs目标元素中。例如,如果当前XMT-A BIFS节点元素的元素名为“Geometry”,则创建新的mp4bifs“Geometry”元素,并将其插入到当前mp4bifs目标元素中。
如果已对XMT-A BIFS节点元素的“DEF”属性指定了一个值,则将“DEF”属性的值与BIFS节点ID表(见图39B)中的各项3966进行比较。将匹配项的“位置”3960的值指派给整型量nodeId,并将结果递增“1”。然后,将该结果指派给mp4bifs“NodeName”元素的“nodeId”属性。如果布尔量“bUseNames”为真,则将XMTA BIFS节点元素的“DEF”属性的值指派给mp4bifs NodeName元素的“name”属性。
使用XMT-A BIFS节点元素的所有其他属性的值向mp4bifsNodeName元素的同名属性指派各值。在大多数情况下,指派给mp4bifs NodeName元素的每一个属性的值等于XMT-A BIFS节点元素的相应属性的值。在下面识别的某些情况(数据格式转换)下,指派给mp4bifs NodeName元素的属性的值是从XMT-A BIFS节点元素的相应属性的值中导出的。
在操作4826,向索引“i”指派值“0”,其不同于其他部分定义的其他索引值。
在操作4830,将索引“i”的值与量“numNodeChildren”的值进行比较。量numNodeChildren的值指示当前XMT-A BIFS节点元素所拥有的从属元素的数量。NumNodeChildren的非0值可能仅用于代表具有“Node”或“Command Buffer”字段数据类型的数据字段的MPEG-4BIFS节点的XMT-A BIFS节点元素。
在操作4836,如果索引“i”的值等于numNodeChildren的值,则该过程完成,且处理继续对拥有该XMT-A节点元素的XMT-A BIFS命令元素或父XMT-A BIFS节点元素的处理。
在操作4840,如果索引“i”的值不等于numNodeChildren的值,则使用标准XML手段获得从属于当前父元素的第i个元素,并将所得到的从属元素标识为“nodeChild”元素。NodeChild元素的元素名由字符串量“childName”所标识。量“childName”的值将与具有“Node”或“Command Buffer”字段数据类型的MPEG-4BIFS节点数据字段的字段名相匹配。
在操作4846,使用标准XML手段获得从属于nodeChild元素的所有元素的元素名。将这些元素名的值以空格隔开,连接成字符串量“NameList”。将所得到的字符串量“NameList”的值指派给当前mp4bifs NodeName元素的childName属性。例如,如果childName的值为“children”,则将从属于XMT-A“children”元素的XMT-A元素的元素名列表指派给当前mp4bifs NodeName元素的“children”属性。
在操作4850,向索引“j”指派值“0”,其不同于其他部分定义的其他索引值。
在操作4856,将索引“j”的值与量“numNodeChildChildren”的值进行比较。量numNodeChildChildren的值指示当前“nodeChild”元素所拥有的从属元素的数量。
在操作4860,如果索引“j”的值等于numNodeChildChildren的值,则将索引“i”的值递增“1”,并重复操作4830的与numNodeChildren的比较。
在操作4866,如果索引“j”的值不等于numNodeChildChildren的值,则使用标准XML手段获得从属于当前nodeId元素的第j个元素,并将所得到的从属元素标识为“attributeChild”元素。AttributeChild元素的元素名由字符串量“attributeChildName”所标识。
在操作4866,将字符串量childName的值与字符串“buffer”进行比较。
在操作4870,如果字符串量childName的值为“buffer”,则执行过程“处理XMT-A命令”。然后,使用标准XML手段将所得到的newCommand元素添加到当前mp4-bifs NodeName元素中。过程“处理XMT-A命令”与图43中所示的过程“处理XMT-A par元素(第2遍)”的操作4360到4386相同,使用attributeChildName的值作为childName的值。这是一个递归的过程,因为当前过程通常从属于过程“处理XMT-A par元素(第2遍)”。然后,该过程继续操作4890。
在操作4880,如果字符串量childName的值不是“buffer”,则递归执行过程“处理XMT-A BIFS节点”。然后,使用标准XML手段将所得到的NodeName元素添加到当前mp4-bifs NodeName元素中。
在操作4890,将索引“j”的值递增“1”,并重复操作4856的与numNodeChildChildren的比较。
7.1.7.11  数据格式转换
将数据格式转换应用于XMTA BIFS节点的下列属性字段属性:这些转换还应用于XMT-A插入命令元素操作4430和XMT-A替换命令元素操作4624的“value”属性的值。在XMT-A插入和替换命令的情况下,数据类型由相应atField属性的值所确定。
1.由六个数字的十六进制串“#RRGGBB”表示具有数据类型“color”的字段属性的每一个XMTA属性值。其被转换为三部分十进制表示“rrr ggg bbb”,其中“rrr”是被256除的十六进制值0xRR的十进制表示,“ggg”是被256除的十六进制值0xGG的十进制表示,而“bbb”是被256除的十六进制值0xBB的十进制表示。
2.将具有数据类型“string”的字段属性的每一个XMTA属性值从为XMTA定义的引用串格式转换为mp4bifs使用的可选格式。该转换包括“引用”符号(\)的移除(除非其前面有反斜杠符号(\))、以其后有两个数字的十六进制码的百分号(%)替换空格和字符串内的其他“特殊”符号、以及以空格分隔多个字符串。上述的“特殊”符号包括空格、引用号、百分号(%)、and符号(&)、大于号(>)、具有小于32的数字值的符号、及具有大于127的数字值的符号。然后,使用空格分隔包括两个或更多字符串的属性字段内的各个字符串。该字符串属性的转换不是本发明所必需的,在本发明的可选实施例中可以将其省略。
3.如果具有数据类型“url”的字段属性的XMTA属性值以“od://”或“odid://”开始,则指派给相应mp4bifs属性的值由“Odid:”给出,其后跟随对象表(见图39A)中的项3900的索引,该项3900具有与XMTA url属性值(“od://”或“odid://”之后)的剩余部分匹配的ObjectDescriptorID 3910。
7.1.8  将命令帧插入到mp4bifs文档中
在完成对XMTA“体”元素120的第二遍操作3130之后,将命令帧元素2830的临时排序的列表的内容插入到mp4bifs文档2800中。丢弃任何空命令帧元素,并将具有相同“time”属性值的多个命令帧元素合并到单个命令帧元素中。
然后,根据最后的命令帧元素2830的时间值,更新mp4file文档的“moov”元素的“duration”属性的值。指派给该属性的值由从最后的命令帧元素获得的以秒计的值与“moov”元素2320的timeScale属性的乘积所确定。以类似方式更新Sdsm数据的“trak”元素2350和2600的“duration”属性、和从属于该“trak”元素2600的“mdia”元素2604的“duration”属性中的每一个。
7.1.9  将OD命令插入到odsm的mdat元素中
如果发现XMTA文档包含任何媒体对象,则使用在对XMTA“体”元素的第一遍操作3120中创建的对象表(见图39A)构建odsm(对象描述符流)的XML描述。如果该表不具有任何项,则该odsm不存在,并跳过该步骤。如果该对象表具有至少一个项目,则使用该表创建分类对象表,如图39E所示。
分类对象表中的每一项(行)3990包括对应于该对象表中ObjectDescriptorId项3920的Odid值3992、时间值3994、和布尔标志(开始)3996。
分类对象表包括对象表中每一项3900的两项3990。OdId列3992中的每一项的值是在对象表中相应项3920中发现的值的副本。时间列3994中的项的值是在对象表中的开始时间列3830或停止时间列3940中的相应项中发现的值的副本。如果在分类对象表的时间列3994中的项是从对象表的开始时间列3930中的相应项获得的,则向分类对象表的开始列3996中的相应项指派值“真”。否则,向分类对象表的开始列3996中的该相应项指派值“假”。
分类对象表中的各项以渐增时间值3994的顺序存储。在分类对象表创建之后,如图49所示,创建odsm的XML表示。
在操作4900,向整型量“numSample”、“odsmSzie”和“sampleSize”指派值“0”。向浮点型量“prevTime”指派一个负值。
在操作4906,使用标准XML手段在odsm的“mdat”元素2310和2400中定位“odsmChunk”元素2470。使用标准XML手段在先前为odsm创建的“trak”元素2350和2600内定位“stts”元素2660、“stsz”元素2668、和“stsc”元素2656。使用标准XML手段定位从属于该“stsc”元素2656的“sampleToChunk”元素。这些元素全部已在先前对XMTA“头”元素3116进行处理时创建。
在操作4910,向索引“i”指派值“0”,其不同于其他部分定义的其他索引值。
在操作4916,将索引“i”的值与量“numEntries”的值进行比较。量numEntries的值指示分类对象标中的行数。
在操作4940,如果索引“i”的值不等于numEntries的值,则将分类对象表中时间列3994中的第i项的值与量prevTime的当前值进行比较。
在操作4946,如果分类对象表中的时间列3994中的第i项的值大于量prevTime的当前值,则使用标准XML手段创建新的mp4fileodsmSample元素。否则,处理继续操作4970。
然后,使用标准XML手段将新的odsmSample元素插入到在操作4906获得的odsmChunk元素中。将量odsmSzie的当前值指派给新odsmSample元素“offset”属性,并将分类对象表中的当前项(“i”)的“时间”列3994的值指派给新odsmSample元素的“时间”属性。
在操作4950,将索引“i”的值与“0”进行比较。
在操作4956,如果索引“i”的值大于0,则使用标准XML手段创建新的mp4file timeToSample元素。否则,处理继续操作4966。
然后,使用标准XML手段将该新timeToSample元素插入到在操作4906获得的stts元素中。将分类对象表中的当前项的时间值3994与量“prevTime”的值之间的差指派给timeToSample元素的“duration”属性。向新的“timeToSample”元素的“numSample”属性指派值“1”。
使用标准XML手段创建新的mp4file sampleSize元素。然后,使用标准XML手段将新的sampleSize元素插入到在操作4906获得的stsz元素中。将量sanpleSize的值指派给新“sampleSize”元素的“size”属性。
在操作4960,将量odsmSize的值递增量sampleSize的值,向量sampleSize的值指派值“0”,并将量numSample的值递增“1”。
在操作4966,将分类对象表中的时间列3994中的第i项的值指派给量“prevTime”。
在操作4970,将分类对象表中的开始列3996中的第i项的值与值“真”进行比较。
在操作4980,如果分类对象表中的开始列3996中的第i项的值具有值“真”,则使用标准XML手段创建新的mp4fileObjectDescriptorUpdate元素2540。然后,使用标准XML手段将新的ObjectDescriptorUpdate元素2540插入到在操作4946创建的odsmSample元素2510中。
使用标准XML手段创建新的mp4file ObjectDescriptor元素2550。然后,使用标准XML手段将新的ObjectDescriptor元素2550插入到新的ObjectDescriptorUpdate元素2540中。将与分类对象表中的当前项相关的量“OdId”3992的值指派给新的ObjectDescriptor元素2950的“OdId”属性。
使用标准XML手段创建新的mp4file EsIdRef元素2560。然后,使用标准XML手段将新的EsIdRef元素2560插入到新的ObjectDescriptor元素2550中。将与匹配分类对象表中当前项的OdId值3993的“OdId”值3920相关的对象表(见图39A)中的操作3950中的“EsId”项的值指派给“EsIdRef”元素2560的“EsId”属性。
在操作4986,将量sanpleSize的值递增“10”。
在操作4990,如果分类对象表中的开始列3996中的第i项的值不具有值“真”,则使用标准XML手段创建新的mp4fileObjectDescriptorRemove元素2570。然后,使用标准XML手段将新的ObjectDescriptorRemove元素2570插入到在操作4946中创建的odsmSample 2510中。将与分类对象表中的当前项相关的量“OdId”3992的值指派给新的ObjectDescriptorRemove元素2950的“OdId”属性。
在操作4996,将量sampleSize的值递增“4”。
在操作4936,将索引“i”的值递增“1”,并重复索引“i”与值numEntries的比较。
在操作4920,如果索引“i”的值等于numEntries的值,则将量“odsmSize”的值递增sampleSize的值,并将量numEntries的值递增“1”。
在操作4926,使用标准XML手段创建新的mp4filetimeToSample元素。然后,使用标准XML手段将新的timeToSample元素插入到在操作4906中获得的stts元素中。将分类对象表中的当前项的时间值3994与量“prevTime”的值之间的差指派给新的timeToSample元素的“duration”属性。向新的“timeToSample”元素的“numSamples”属性指派值“1”。
使用标准XML手段创建新的mp4file sampleSize元素。然后,使用标准XML手段将新的sampleSize元素插入到在操作4906中获得的stsz元素中。将量sampleSize的值指派给新的“sampleSize”元素的“size”属性。
在操作4930,将量“numSamples”的值指派给“sampleToChunk”元素。量odsmSize的值指派给“odsmChunk”元素的“size”属性。
7.1.10  更新mp4-bifs和mp4-file文档的bifsConfig
确定表示BIFS节点Id表(见图39B)中的项数所需的最小位数,并将其指派给量“numNodeIdBits”。这是最小数“n”,使得2增加到其“n”次乘方后大于该表中的项数。将量numNodeIdBits的值指派给步骤2中创建的“bifsConfig”元素(2810)的“nodeIdBits”属性。还将该值指派给包含在步骤4中创建的sdsm(情景描述流)的“trak”元素2350和2600中的“BIFS_DecoderConfig”元素2720的“nodeIdBits”属性。
以相同方式,确定表示BIFS路由ID表(见图39C)中项数所需的最小位数,并将其指派给量“numRouteIdBits”。将量numRouteIdBits的值指派给在步骤2中创建的“bifsConfig”元素2810的routeIdBits属性。还将该值指派给包含在步骤4中创建的sdsm(情景描述流)的“trak”元素2350和2600中的“BIFS_DecoderConfig”元素2720的routeIdBits属性。
该步骤完成mp4-file和mp4-bifs文档的创建。该创建mp4二进制文件的过程继续“3.b根据中间XML文档创建mp4二进制文件”。
7.1.10.1  处理ES描述符
如图34中所示的那样对每一个“ES_Descriptor”元素进行处理。该过程用于处理包含在XMT-A文档100的体元素120内的ES_Descriptor元素630以及包含在XMT-A文档100的头元素110内的ES_Descriptor元素180和190。
每一个“ES_Descriptor”元素拥有称作“ES_ID”和属性,且将该属性的值指派给字符串量“ES_DescriptorId”。
该过程“处理ES_Descriptor”开始于操作3400的过程“处理decConfigDescr元素”。该过程包括下列四个步骤:
1.使用标准XML手段获得从属于ES_Descriptor元素640的decConfigDescr元素646。
2.使用标准XML手段获得从属于decConfigDescr元素646的DecoderConfigDescriptor元素650。
3.使用DecoderConfigDescriptor元素650的“流类型”属性的值建立用于该ES_Descriptor元素所描述的数据流的流类型属性的数字值。“流类型”属性的值可包括数字值或MPEG-4系统规范的表中定义的一组字母数字串中的一个。这些所定义的串包括“ObjectDescriptor”、“SceneDescriptor”、“Visual”、“Audio”等。如果“流类型”属性的值与这些串中的一个匹配,则根据MPEG-4表中的相关项向流类型指派一个数字值。例如,如果“流类型”属性的值为“ObjectDescriptor”,则向iStreamType指派值1。否则,“流类型”的值必须代表一个数字值,并将该数字值指派给该流的流类型属性。
4.使用DecoderConfigDescriptor元素的“objectTypeIndication”属性建立用于该ES_Descriptor元素所描述的数据流的“objectType”属性的数字值。“objectTypeIndication”属性的值可包括一个数字值或MPEG-4系统规范的表中定义的一组字母数字串中的一个。这些所定义的串包括“MPEG4Systems1”、“MPEG4Visual”、“MPEG4Audio”、“Unspecified”等。如果“objectTypeIndication”属性的值与这些串中的一个匹配,则根据MPEG-4表中的相关项向iObjectType指派一个数字值。例如,如果“objectTypeIndication”属性的值为“Unspecified”,则向iObjectType指派值255。否则,“objectTypeIndication”属性的值必须表示一个数字值,并将该数字值指派给该流的objectType属性。
在过程“处理decConfigDescr元素”(3400)之后,过程“处理ES_Descriptor”继续操作3410中的过程“处理slConfigDescr元素”。
该过程包括下列三个步骤:
1.使用标准XML手段获得从属于“ES_Descriptor”元素640的“slConfigDescr”元素660。
2.然后使用标准XML手段获得从属于“slConfigDescr”元素660的“SlConfigDescriptor”元素666。
3.使用“SLConfigDescriptor”666的“timeStampResolution”属性的值向该流的timeScale属性指派一个数字值。如果未对“timeStampResolution”属性指定一个值,则向timeScale指派一个默认值。该默认值对于除MPEG-4视频(iStreamType=4,和iObjectType=32)之外的所有流都是1000,在MPEG-4视频情况下,默认timeScale值是30。
在操作3410的过程“处理slConfigDescr元素”之后,过程“处理ES_Descriptor”继续操作3420中的过程“处理StreamSource元素”。
在包含在XMT-A体元素120中的ES_Descriptor 630的情况下,过程“处理ES_Descriptor”包括下列两个步骤:
1.使用标准XML手段获得从属于“ES_Descriptor”元素的“StreamSource”元素。
2.将该“StreamSource”元素的“url”属性的值指派给称作“mediaFileName”的量。
在包含在XMT-A头元素110的ES_Descriptor 180和190的情况下,将不会存在StreamSource元素,且将量“sdsmFileName”的值指派给量“mediaFileName”。
在操作3420中的过程“处理StreamSource元素”之后,过程“处理ES_Descriptor”继续操作3430中的过程“为指定流创建mdat元素”。如图35所示,过程“为指定流创建mdat元素”包括下列步骤:
1.操作3500:使用标准XML手段创建新的“mdat”元素2310,并将其插入到先前创建的“moov”元素2320之前的mp4file文档2300中。
2.操作3506:将量“nextTrackId”的当前值指派给新mdat元素2320的“mdatId”属性。向该元素的“size”属性指派0值(“0”)。
3a.操作3510:将过程“处理decConfigDescr元素”操作3400所建立的流类型属性与值“1”进行比较。
4a.如果流类型属性的值为“1”,则在操作3516创建新的“odsm”元素2420和2460,并将其插入到新的“mdat”元素2310和2400中,在操作3520将量“nextTrackId”的当前值指派给该新“odsm”元素2420的“trackID”属性,在操作3526创建新的“odsmChunk”元素2470并将其插入到新的“odsm”元素2460中,在操作3530向新的“odsmChunk”元素2470的“offset”属性指派值0。
3b.操作3540:如果流类型属性的值不为“1”,则将流类型属性的值与值“3”进行比较。
4b.如果流类型属性的值为“3”,则在操作3546,创建新的“sdsm”元素2410和2440,并将其插入到“mdat”元素2310和2400中。在操作3550,将量“nextTrackId”的当前值指派给该新的sdsm元素2410的“trackID”属性,并将量“mediaFileName”的值指派给新的sdsm元素2410的“xmlFile”属性。在操作3556,创建新的“chunk”元素2450,并将其插入到新的“sdsm”元素2440中。在操作3560,向新的“chunk”元素2450的“offset”属性指派值0。
4c.操作3566:如果流类型的值不是“1”,也不是“3”,则创建新的“mediaFile”元素2430和2480,并将其插入到新的“mdat”元素2310和2400中。在操作3570,将量“nextTrackId”的当前值指派给新的“mediaFile”元素2430的“trackID”属性。在操作3576,创建新的“chunk”元素2490,并将其插入到新的“mediaFile”元素2480中。在操作3580,向新的“chunk”元素2480的“offset”属性指派值0。
向“offset”属性指派值0的处理即操作3530、3560和3580完成过程“为指定流创建mdat元素”3430。在该过程3430之后,过程“处理ES_Descriptor”继续过程“为指定流创建trak元素”3440。该过程下面在“创建trak元素”标题下描述。该过程3440之后,过程“处理ES_Descriptor”3340继续测试“指定流是sdsm或odsm?”3450。
如果当前流为odsm(流类型的值为1)或sdsm(流类型的值为3),则在操作3460,创建新的“EsIdInc”元素2380,并将其添加到mp4file文档2300中的“mp4fiods”元素2360。然后,将量“nextTrackID”的值指派给新的“EsIdInc”元素2380的“trackID”属性2390。
否则(量“流类型”的值不是“1”或“3”),则在操作3470,将量“nextTrackID”的值添加到odsm的“trak”元素2600中的“tref”元素2636中的“mpod”元素2640的“trackID”元素的值中。还将量“nextTrackID”的值指派给在对该XMT-A“体”元素的第一遍中创建的对象表的“OdId”列3920中的一项。该项对应于其中的“ObjectDescriptorID”项3910与包含该“ES_Descriptor”元素636的“ObjectDescriptor”元素600的“objectDescriptorId”属性606配的行。将量“nextEsId”的值指派给该表的同名同一行中的EsId项3950。然后,将量“nextRsId”的值递增1。
然后,无论在哪种情况下,在操作3480,将量nextTrackID的值递增1,并将量nextTrackID的新值指派给“moov”元素2320的“nextTrackID”属性。
这完成了图34中示出的对“ES_Descriptor”元素的处理。对于在XMT-A文档100的“头”元素110中的“InitialObjectDescriptor”元素130内的“Descr”元素160内发现的每一个“ES_Descriptor”元素180和190执行该过程。还对在XMT-A文档100的“体”元素120内发现的“ObjectDescriptor”元素600内的“Descr”元素610内发现的每一个“ES_Descriptor”元素630执行该过程。
在该过程(处理ES_Descriptor)完成之后,创建mp4file文档2250的过程继续图33中示出的过程“处理esDescr元素”中的操作3350递增索引“i”的值的步骤。
7.1.10.2  创建trak元素
如图36A所示,过程“为指定流创建trak元素”包括下列11个步骤:
1.在操作3600,使用标准XML手段创建新的“trak”元素2350和2600,并将其插入到mp4file文档2300中的“moov”元素2320中。
向新的trak元素2600的下列属性指派值:向“flags”属性指派值“1”。将等于自从1904年1月1日以来的秒数的值指派给“creationTime”和“modifyTime”属性。将量nextTrackId的值指派给trackID属性。向“trackHeight”属性指派值“240”。向“trackWidth”属性指派值“320”。
如果流类型属性的值为“1”或“3”,则向duration属性指派值“0”。这些仅是初始值,其将由后面确定的校正值所替代。否则,使用所附的ObjectDescriptor元素600的objectDescriptorID获得在对XMT-A文档100的体元素120的第一遍操作3120期间构建的表中的相应媒体持续时间值。将该媒体持续时间值(以秒)与从“SLConfigDescriptor”元素666中获得的时窗值相乘,并四舍五入为整数值。
如果流类型属性的值为“1”(对象描述符流),则将trackID属性的值指派给量trackIdForOdsm。如果流类型属性的值为“3”(情景描述流),则将trackID属性的值指派给量trackIdForSdsm。
2.在操作3606,使用标准XML手段创建新的“mdia”元素2604,并将其插入到在步骤1中创建的新“trak”元素2600中。
向该新“mdia”元素2604的下列属性指派值:将等于自从1904年1月1日以来的秒数的值指派给“creationTime”和“modifyTime”属性。这是用于父trak元素2600的相应属性的相同值。将从“SLConfigDescriptor”元素666中获得的时窗值指派给“timeScale”属性。将指派给父trak元素2600的持续时间值指派给持续时间属性。
3.在操作3610,使用标准XML手段创建新的“hdlr”元素2608,并将其插入到在步骤2中创建的新“mdia”元素2604中。
向“hdlr”元素的下列属性指派值:“handlerType”和“name”。指派给“handlerType”属性的值取决于流类型。如果流类型等于1(osdm)、3(sdsm)、4(视频流)、或5(音频流),则将值“odsm”、“sdsm”、“soun”或“vide”指派给“handlerType”属性。否则,将值“none”指派给“handlerType”属性。指派给“name”属性的值是由所附XMT-AES_Descriptor元素180、190或630的ES_ID属性确定的字符串“Es_DescriptorId”的副本。这种对于“name”属性的选择是不必要的,但这种选择使得在该mp4文档和随后的文件中保存和传播ES_ID属性字符串的值成为可能。
4.在操作3616,使用标准XML手段创建新的“minf”元素2612,并将其插入到在步骤2中创建的新“mdia”元素2604中。
5.在操作3620,使用标准XML手段创建新的“dinf”元素2616,并将其插入到在步骤4中创建的新“minf”元素2612中。
6.在操作3626,使用标准XML手段创建新的“dref”元素2620,并将其插入到在步骤5中创建的新“dinf”元素2616中。
7.在操作3630,使用标准XML手段创建新的“urlData”元素2624,并将其插入到在步骤6中创建的新“dref”元素2620中。向“urlData”元素2624的“flags”属性指派值“1”。
8.然后,在操作3636,使用标准XML手段创建新的“stbl”元素2628和2652,并将其插入到在步骤4中创建的“minf”元素2612中。如下面在“创建初始样本表元素”之下描述的那样,创建组成的样本表元素。
9.在操作3640,使用标准XML手段创建新的媒体头元素2632,并将其插入到在步骤4中创建的“minf”元素2612中。该媒体头元素的元素名取决于该流的流类型属性:
如果流类型属性为1(odsm)或3(sdsm),则该媒体头元素为不具有属性的“nmhd”元素。
如果流类型属性为4(视频流),则该媒体头元素为具有值“0”的属性“transferMode”的“vmhd”元素。
如果流类型属性为5(音频流),则该媒体头元素为具有值“0”的属性“balance”的“smhd”元素。
否则,该媒体头元素为具有值“0”的属性“transferMode”和值“0”的属性“balance”的“gmhd”元素。
10.在操作3646,将流类型属性的值与值4和5进行比较,并将量startTime的值与0进行比较。
在音频或视频流的情况下,该操作在过程“处理XMT-A体元素(第2遍)”3130期间执行。在这种情况下,从在过程“处理XMT-A体元素(第1遍)”3120中创建的对象表(见图39A)中获得量“startTime”的值。该值由某一行的开始时间列中的项所确定,其中该行中ObjectDescriptorID列的项与包含该“ES_Descriptor”元素的“ObjectDescriptor”元素的“objectDescriptorId”属性相匹配。
在odsm和sdsm的情况下,在过程“处理XMT-A头元素”3116期间执行该操作。还未对那些流创建用于建立量开始时间的值的对象表。因此,作为单独步骤“创建odsm的编辑列表”3126的一部分,执行对odsm流的开始时间值的相应测试。Sdsm通常开始于时间0。
如果流类型的值为4(视频流)或5(音频流),且该流的量“startTime”的值不为0,则在操作3650,使用标准XML手段创建新的“edts”(编辑列表)元素2644,并将其插入到当前“trak”元素2400。使用标准XML手段创建新的“elst”元素2648,并将其插入到新的“edts”元素2644。然后,创建两个“segment”元素,并将其插入到“elst”元素2648中。
向每一个“segment”元素指派称作“startTime”、“duration”和“rate”的属性。向第一个segment元素的“startTime”属性指派值“-1”。向第二个segment元素的“startTime”属性指派值“0”。向这两个segment元素的“rate”属性指派值“1.0”。向第一个segment的“duration”属性的值指派一个值,该值由该流的startTime值和封装的moov元素的“timeScale”属性的值的乘积所确定。向第二个segment的“duration”属性的值指派一个值,该值由该流的持续时间值和封装moov元素的“timeScale”属性的值的乘积确定。该流的持续时间值由从对象表(见图39A)获得的“stopTime”值和“startTime”值之间的差所确定,其中该对象表是在对XMT-A“体”元素的第一遍操作中创建的。这些值由某一行的相应列中的项所确定,其中该行中的ObjectDescriptorID列的项与包含该“ES_Descriptor”元素的“ObjectDescriptor”元素的“objectDescriptorId”属性相匹配。
11.在操作3656,将流类型属性的值与“1”进行比较。如果流类型为1(odsm),则在操作3660,使用标准XML手段创建新的“tref”元素2636,并将其插入到在步骤1中创建的“trak”元素2600。创建新的“mpod”元素2640,并将其插入到新的“tref”元素2636中。向“mpod”元素2640的“trackID”属性指派值“-1”。这是要由以后获得的数据所替代的临时值。
步骤3656完成过程“为指定流创建trak元素”3440。在该过程之后,过程“处理ES_Descriptor”3340继续测试“指定流是sdsm或odsm?”3450。
7.1.10.3  创建初始样本表元素
最终mp4二进制文件2230中的每一个样本表包含依赖sdsm、odsm和媒体数据文件的二进制形式的信息。确定这些表中的值所需的信息此时是不可获得的。因此,如图36B中所示,创建这些表的初始表示,以指示当创建实际mp4二进制文件2230时最终值将被放置的位置。
在操作3666,使用标准XML手段创建新的“stsc”元素2656,并将其插入到当前trak元素2600的“stbl”元素2628和2652。使用标准XML手段创建新的“sampleToChunk”元素,并将其插入到新的“stsc”元素2656中。向新的“sampleToChunk”元素的“sampleDesc”属性指派值“1”。向新的“sampleToChunk”元素的“firstChunk”属性指派值“1”。如果该流的流类型属性为1或3(odsm、sdsm),则向新的“sampleToChunk”元素的“numSamples”属性指派值“0”。如果该流的objectType属性为108(JPEG图像),则向新的“sampleToChunk”元素的“numSamples”属性指派值“1”。否则,向新的“sampleToChunk”元素的“numSamples”属性指派值“-1”。
在操作3670,使用标准XML手段创建新的“stts”元素2660,并将其插入到当前trak元素2600的“stbl”元素2628和2652中。如果当前流类型属性不为1(odsm),也不为3(sdsm),则使用标准XML手段创建新的“timeToSample”元素,并将其插入到新的“stts”元素2660中。将该“trak”元素中指定的持续时间值指派给“timeToSample”元素的“duration”属性。如果该流的对象类型属性为108(JPEG图像),则向该“timeToSample”元素的“numSamples”属性指派值“1”。否则,向该新的“timeToSample”元素的“numSamples”属性指派值“-1”
在操作3676,使用标准XML手段创建新的“stco”元素2664,并将其插入到当前trak元素2600的“stbl”元素2628和2652中。使用标准XML手段创建新的“chunkOffset”元素,并将其插入到新的“stco”元素2664中。将nextTrackId的当前值指派给该“chunkOffset”元素的“mdatId”属性。向该“chunkOffset”元素的“mdatOffset”属性指派值“0”。向该“chunkOffset”元素的“offset”属性指派值“8”。
在操作3680,使用标准XML手段创建新的“stsz”元素2668,并将其插入到当前trak元素2600的“stbl”元素2628和2652中。如果该流的流类型属性不为1(odsm),也不为3(sdsm),则向该新“stsz”元素2668的“numSamples”属性指派一个值。如果该流的对象类型属性为108(JPEG图像),则向新的“stsz”元素2668的“numSamples”属性指派值“1”。否则,向新的“stsz”元素2668的“numSamples”属性指派值“-1”。
在操作3686,如果流类型属性为1(odsm)或3(sdsm),则使用标准XML手段创建新的“stss”元素(2672),并将其插入到当前trak元素2600的“stbl”元素2628和2652中。如果流类型为1,则向该新“stss”元素2672的“numEntries”属性指派值“1”,并创建新的“syncSample”元素,并将其插入到新“stss”元素2672中。然后,向该“syncSample”元素的“sampleNumber”属性指派值“0”。如果流类型属性为3,则向新的“stss”元素2672的“numEntries”属性指派值“0”。
如果流类型属性为4,且对象类型属性为32(MPEG-4视频),则使用标准XML手段创建新的“stss”元素2672,并将其插入到当前trak元素2600的“stbl”元素2628和2652中,并向新的“stss”元素2672的“numEntries”属性指派值“-1”。
在操作3690,使用标准XML手段创建新的“stsd”元素2676,并将其插入到当前trak元素2600的“stbl”元素2628和2652中。创建该新“stsd”元素2676内的从属元素,如图37中所示的那样。
在操作3700,使用标准XML手段创建新的“esds”元素2684。
在操作3706,将流类型属性的值与“1”和“3”进行比较。
在操作3710,如果流类型属性的值为“1”或“3”,则使用标准XML手段创建新的“mp4s”元素2680,并将其插入到当前“stsd”元素2676中。将该新“esds”元素插入到新的“mp4s”元素2680中,并向该新“mp4s”元素2680的“dataRefIndex”属性指派值“1”。
在操作3716,如果流类型属性的值不为“1”或“3”,则将流类型属性与“4”进行比较。
在操作3720,如果流类型的值为4,则使用标准XML手段创建新的“mp4v”元素2680,并将其插入到当前“srsd”元素2676中。将新的“esds”元素2684插入到新的“mp4v”元素2680中,并向新“mp4v”元素2680的“colorTable”、“dataRefIndex”、“frameCount”、“horizontalRes”、“verticalRes”、“pixelDepth”、“height”和“width”分别指派值“-1”、“1”、“1”、“72.0”、“72.0”、“24”、“240”和“320”。
在操作3726,如果流类型的属性值不为“4”,则将流类型的属性与“5”比较,如果流类型的属性值不为“5”,完成了该过程(操作3690)。
在操作3730,如果流类型的值为5,则使用标准XML手段创建新的“mp4a”元素2680,并将其插入到当前“stsd”元素2676中。将新的“esds”元素2684插入到新的“mp4a”元素2680中,并向新“mp4a”元素2680的“dataRefIndex”、“numchannels”及“sampleSize”分别指派值“1”、“-1”和“1”。
可容易地处理另外的流类型情况,但这些情况(1、3、4、5)仅是当前实现所需的那样情况。如果流类型属性的值为1、3、4或5,则对stsd元素2676不执行其他处理。
在操作3736,如果流类型属性的值为“1”、“3”、“4”或“5”,则使用标准XML手段创建新的“Es_Descr”元素2688,并将其插入到当前“esds”元素2684中。向新“ES_Descr”元素2688的“ES_ID”属性指派值“0”。向新“ES_Descr”元素2688的“优先级”属性指派值“0”。
在操作3740,使用标准XML手段创建新的“DecoderConfigDescriptor”(D-C-D)元素2710,并将其插入到当前“ES_Descr”元素2676中。从该流的XMT-A“DecoderConfigDescriptor”650中获得“bufferSizeDB”、“avgBitrate”和“maxBitrate”属性的值,并将这些属性的值指派给新“DecoderConfigDescriptor”元素2710的“bufferSize”、“avgBitrate”和“maxBitrate”属性。将当前流的流类型、和对象类型属性的值指派给新“DecoderConfigDescriptor”元素2710的“streamType”和“objectType”属性。
在操作3746,使用标准XML手段创建新的“SLCofigDescriptor”(SLC-D)元素2760,并将其插入到当前“ES_Descr”元素2676中。向新的“SLConfigDescriptor”元素2760的“predefined”属性指派值“2”。
根据流类型和对象类型属性的值,可将解码器详细信息元素插入到“DecoderConfigDescriptor”元素2710中。如果流类型属性的值为1(odsm),则无需解码器详细信息元素。
在操作3750,将流类型属性的值与“3”进行比较。
在操作3756,如果流类型属性的值为3(sdsm),则执行过程“处理BIFS配置”。该过程将在下面描述。
在操作3760,将对象类型属性的值与“32”进行比较。
在操作3766,如果对象类型属性的值为32(MPEG-4视频),则使用标准XML手段创建新的“VisualConfig”元素2740,并将其插入到当前“DecoderConfigDescriptor”元素2710中。
在操作3770,将对象类型属性的值与“64”进行比较。
在操作3776,如果对象类型属性的值为64(MPEG-4音频),则使用标准XML手段创建新的“AudiioConfig”元素,并将其插入到当前“DecoderConfigDescriptor”元素2710中。
在操作3780,将对象类型属性的值与“108”进行比较。
在操作3786,如果对象类型属性的值为108(JPEG图像),则使用标准XML手段创建“JPEG_DecoderCofig”元素2730中,并将其插入到当前“DecoderConfigDescriptor”元素2710中。
其他的流类型和对象类型情况可以容易地处理,但是这些情况仅是当前实现所需的那样情况。
除了“BIFS_DecoderConfig”元素2720之外,上面说明的解码器详细信息元素2730、2740、和2750仅是存根或占位符。如果流类型属性的值为3(sdsm),则执行过程“处理BIFS配置”,其将在下面描述。否则,对ES_Descriptor元素640的处理继续过程“创建trak元素”3440的步骤9(操作3640)。
7.1.10.4  处理BIFS配置
图38中示出了过程“处理BIFS配置”。
在操作3800,使用标准XML手段创建新的“BIFS_DecoderConfig”元素2720,并将其插入到“DecoderConfigDescriptor”元素2710中。
在操作3810,使用标准XML手段获得mp4bifs文档2800中的“bifsConfig”元素2810。
在操作3820,使用标准XML手段获得从属于sdsm的“decSpecificInfo”元素656和680。然后,使用标准XML手段获得从属于该“decSpecificInfo”元素680的“BIFSConfig”元素686。
在操作3830,向“BIFS_DecoderConfig”元素2720的“nodeIdBits”属性和“bifsConfig”元素2810的相应属性指派值“0”。向“BIFS_DecoderConfig”元素2720的“routeIdBits”属性和“bifsConfig”元素2810的相应属性指派值“0”。
在操作3840,将对象类型属性的当前值与“2”进行比较。
在操作3846,如果对象类型属性的当前值为“2”,则向BIFS_DecoderConfig元素2720的“protoIdBits”属性和bifsConfig元素2810的相应属性指派值“0”,将BIFSConfig元素686的“use3DmeshCoding”和“usePredictiveMFField”属性所确定的值指派给BIFS_DecoderConfig元素2720和bifsCofig元素2810的同名属性。
在操作3850,使用标准XML手段获得从属于BIFSConfig元素(686)的命令流元素690。
在操作3856,如果BIFSConfig元素686不包含从属命令流元素690,则使用标准XML手段获得从属于BIFSConfig元素686的animMask元素。如果BIFSConfig元素不拥有从属animMask元素,则XMT-A文档无效,并在操作3860报告出错。
在操作3866,如果BIFSConfig元素686拥有从属animMask元素,则向BIFS_DecoderConfig元素2720的命令流属性指派值“假”。
在操作3870,如果BIFSConfig元素686拥有从属命令流元素690,则向BIFS_DecoderConfig元素2720的命令流属性指派值“真”。将命令流元素690的pixelMetric属性的值指派给BIFS_DecoderConfig元素2720的pixelMetric属性。如果已对命令流元素690的pixelMetric属性指定了一个值,则向BIFS DecoderConfig元素2720的pixelMetric属性指派默认值“假”。
然后,在操作3880,使用标准XML手段获得从属于命令流元素690的“size”元素696。
在操作3886,如果命令流元素690不拥有从属size元素696,则向BIFS_DecoderConfig元素2720的“pixelHeight”和“pixelWidth”属性指派值“0”。
在操作3890,如果命令流元素690拥有从属size元素696,则将“size”元素696的“pixelHeight”和“pixelWidth”属性的值指派给BIFS_DecoderConfig元素2720的“pixelHeight”和“pixelwidth”属性。
在这些步骤完成之后,对ES_Descriptor元素640的处理继续过程“创建trak元素”3440的步骤9(操作3640)。
7.2  根据中间XML文档创建mp4二进制文件
在创建中间XML文档2250和2260之后,使用该中间XML文档2250和2260,以及任何相关的媒体数据文件2220创建表示原始XMT-A文档2210中指定的信息的新mp4二进制文件2230。该新mp4文件称作“输出mp4文件”或“mp4文件”。用于创建该新mp4文件的手段包括下列六个步骤:
1.建立输入文档和输出目的文件;
2.创建工作数组;
3.处理“mdat”元素2310;
4.处理“moov”元素2320;
5.处理可选用户数据元素2330;以及
6.更新odsm缓冲区大小。
这些步骤中的每一个将在下面描述。
7.2.1  建立输入文档和输出目的地
这些步骤中的第一个包括获得对表示上面创建的mp4file文档2250和mp4bifs文档2260的XML数据结构的引用。该步骤还包括接收为输出mp4二进制文件2230指定文件名的数据结构。如果所指定的文件名对应于已有文件,则删除此文件。然后,使用所指定的文件名创建新的空输出文件。
在创建空输出文件之后,使用标准XML手段获得mp4file文档的顶级元素。此时还可获得mp4bifs文档的顶级元素,但这到后面才需要。
该新的输出文件(“mp4file”)将包括称作“mp4原子”和“mp4对象结构”的数据结构的分层集合。在当前的实现中,每一个mp4原子包括32位“size”值、32位“原子ID”、和一组属性值。Mp4原子还可包括一个或多个从属mp4原子或mp4对象结构。size值指出包括大小和原子ID的全部mp4原子中的字节数。Mp4对象结构包括1字节对象结构标签、不定大小的size值、一组属性值、和一组零个或多个从属mp4对象结构。在这种情况下,size值指出除对象结构标签和size值之外的对象结构中的字节数。
图50中示出了用于创建每一个原子的一般过程。图51中示出了用于创建对象结构的相应过程。这些过程需要有控制输出mp4文件的“文件位置”的能力。“文件位置”定义为从该文件的开始到下一个字节要被写入处的字节数。因为控制文件位置的需要,必须将该新文件打开为“随机存储”或“读/写”类型的文件。
7.2.1.1  创建mp4原子的过程
创建mp4原子的过程包括下列步骤:
1.在操作5000,向输出文件的当前文件位置指派量“sizePos”。量“sizePos”的值对于每一个mp4原子或对象结构是唯一的。
2.在操作5010,将32位具有零值的整数写入输出文件。
3.在操作5020,将32位原子ID值写入输出文件。例如,在“mdat”原子的情况下,将表示字符“m”、“d”、“a”和“t”的ascii值的四种类型写入输出文件。
4.在操作5030,对当前mp4原子所表示的mp4file元素的属性进行解释。每一个mp4原子所拥有的特定属性集合由原子ID来确定,如MP4文件格式的MPEG-4规范中所指示的那样。为该mp4file文档中未指定的属性提供缺省值。
5.在操作5040,将当前mp4原子的属性的值写入输出文件。在MP4file文档的MPEG-4规范中指出了用于表示每一个属性值的位数。
6.在操作5050,如果当前mp4file元素拥有任何从属元素,则对每一个这样的从属元素进行处理。如果该从属元素对应于mp4file原子元素,则递归重复当前的过程。如果从属元素对应于mp4file对象元素,则执行图51中示出的过程。
7.在操作5060,向当前文件为止指派量“endPos”。
8.在操作5070,将量“endPos”的值与量“sizePos”的值之间的差指派给量“size”。
9.在操作5080,将输出文件的文件位置改为量“sizePos”的值所指定的位置。
10.在操作5090,将表示量“size”的值的32位整数写入输出文件中。
11.在操作5095,将输出文件的文件位置改为量“endPos”的值所指定的位置。
7.2.1.2  创建mp4对象结构的过程
创建mp4对象结构的过程包括以下步骤:
1.在操作5100,将一字节对象结构标签写入输出文件。该对象结构标签的值由该mp4对象结构所表示的mp4file元素的元素名称和MPEG-4规范中提供的表所确定。
2.在操作5110,向输出文件的当前文件位置指派量“sizePos”。量“sizePos”的值对于每一个mp4原子或对象结构是唯一的。
3.在操作5120,根据表示mp4对象结构所需的字节数的估算或上界,向量“numSizeBytes”指派一个值。如果表示mp4对象结构所需的字节数小于128,则向量“numSizeBytes”指派值“1”。在大多数情况下,这是足够的。
4.在操作5130,将一字节值的序列写入输出文件。这些一字节值的数量由量“numSizeBytes”的值所指出。这些一字节量的值是无意义的,因为它们随后将被覆写。值0可用于这些字节中的每一个。
5.在操作5135,对当前mp4对象元素所表示的mp4file元素的属性进行解释。每一个mp4对象元素所拥有的特定属性组由对象标签所确定,如MPEG-4系统规范中所指示的那样。为该mp4file文档中未指定的属性提供默认值。
6.在操作5140,将当前mp4对象结构的属性的值写入输出文件。在MPEG-4系统规范中指出了用于表示每一个属性值的位数。
7.在操作5150,如果当前mp4file元素拥有任何从属元素,则根据图51中示出的过程对每一个这样的从属元素进行处理(递归)。
8.在操作5160,向当前文件位置指派量“endPos”。
9.在操作5165,将量“endPos”的值与量“sizePos”的值之间的差指派给量“size”。
10.在操作5170,从量“size”的值中减去量“numSizeBytes”的值。
11.在操作5180,将输出文件的文件位置改为量“sizePos”的值所指定的位置。
12.在操作5190,将表示量“size”的值的一字节值序列写入输出文件。这些一字节值的数量由量“numSizeBytes”的值指出。这些一字节值的每一个的低七位由量“size”的值的相应七位部分所确定。这些一字节值的每一个的高七位的值除了最后的一字节值之外均为“1”。该序列中的最后的一字节值的高位的值为“0”。
13.在操作5195,将输出文件的文件位置改为量“endPos”的值所指定的位置处。
7.2.2  创建工作数组
上面所标识的第二步包括根据mp4file文档2250和2300中表示的“trak”元素2350的数量、块元素2450和2490的数量、及odsmSample元素2510的数量,创建若干工作数组。
下列手段用于确定量“MaxNumTracks”:
使用标准XML手段识别从属于mp4file文档2300的顶级元素的所有元素2310和2320。这些从属元素中的一个是“moov”元素2320。该“moov”元素2320的“nextTrackID”属性的值提供从属于“moov”元素2320的“trak”元素2350的数量的上界。如果该mp4file文档是按上面指示的那样创建的,则“nextTrackID”属性的值指出从属于“moov”元素2320的“trak”元素2350的数量。将“nextTrackID”属性的值指派给量“MaxNumTracks”。
使用量“MaxNumTracks”的值指定下列九个列表中的每一列表中的项数来创建下列九个列表:
1.MediaSample
2.MediaDataFile(“File”对象的数组)
3.MediaHeaderSize
4.MediaHeader(位置值的数组)
5.EsDescrSize
6.TrackIdForTrack
7.StreamTypeForTrack
8.ObjectTypeForTrack
9.TrackIdfor OdId
这些项中除了MediaDataFile项和MediaHeader项之外的每一列表都是整数数组。
在创建该组的九列表之后,向量TrackNum、MaxNumChunks和MaxNumOdsmSample指派值0。
下列手段用于确定列表TrackIdForTrack、StreamTypeForTrack和ObjectTypeForTrack中的各项:
使用标准XML手段识别所有从属于“moov”元素2320的元素。对于每一个这样的“trak”类型的从属元素2350,将“trackID”属性的值指派给TrackIdForTrack列表中的项TrackNum。使用标准XML手段识别从属于该“trak”元素的“DecoderConfigDescriptor”元素2710(通过九级)。将该元素2710的“流类型”属性的值指派给列表StreamTypeForTrack中的项TrackNum。将该元素2710的“对象类型”属性的值指派给列表ObjectTypeForTrack中的项TrackNum。然后,将量TrackNum的值增加1。
使用下述手段确定量“MaxNumChunks”和“MaxNumOdsmSample”的值。
使用标准XML手段识别从属于mp4file文档2300的顶级元素的所有“mdat”元素2310。使用标准XML手段识别从属于每一个“mdat”元素2310和2400的所有元素。所得到的从属元素可包括“mediaFile”元素2430、“sdsm”元素2410、和“odsm”元素2420。使用标准XML手段识别从属于元素2410、2420和2430中的每一个的每一个“块”元素2450和2490和“odsm块”元素2470,而元素2410、2420和2430从属于每一个“mdat”元素2400。
对于从属于每一个“mdat”元素2400所附属的每一个元素2410、2420和2430的每一个“块”元素2450和2490和每一个“odsm块”元素2470,将量MaxNumChunk的值增加1。
使用标准XML手段识别从属于每一个“odsm块”元素2470和2500的每一个“odsm样本”元素2510。对于从属于每一个“odsmChunk”元素2500的每一个“odsm样本”元素2510,将量MaxNumOdsmSample增加1。
使用量“MaxNumChunks”的值指定下面4个列表的每一个中的项数,来创建这些列表:
1.MdatIdForChunk
2.TrackIdForChunk
3.OffsetForChunk
4.MediaDataSize
这些列表的每一个是整数数组。在这些列表创建之后,向量NumChunks指派值0。
如果量“MaxNumOdsmSample”的值大于0,则使用量“MaxNumOdsmSample”的值指定下列两个列表的每一个中的项数来创建这些列表:
1.OdsmSampleSize
2.OdsmSampleTime
这些列表的每一个都是整数数组。在这些列表创建之后,向量NumOdsmSample指派值0。
7.2.3  处理“mdat”
创建输出mp4文件2230中的第三步包括对每一个包括在mp4file文档2300中的mdat元素2310进行处理。
使用标准XML手段识别从属于如图23A中所示mp4file文档2300的顶级元素的每一个mdat元素2310。然后,使用图52中示出的手段对这些“mdat”元素2310中的每一个进行处理。图52中示出的过程是图50中示出的过程的一个例子。
在操作5200,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5212,将具有值0的32位整数写入该输出mp4文件724。在操作5224,将表示字符“m”、“d”、“a”和“t”的ASCII值的四字节写入输出mp4文件730。将该mdat元素的“mdatId”属性的值指派给量“mdatId”。无属性值写入该输出mp4文件。
在操作5236,向索引“i”指派值0。在操作5242,将索引“i”的值与量“numMdatChildren”的值进行比较,其中量“numMdatChildren”表示当前mdat元素所拥有的从属元素的数量。在操作5248,如果索引“i”的值等于量“numMdatChildren”的值,则将mdat原子724的大小更新,如图50的最后五部分中所表示的那样(操作5060到5095)。
在操作5254,如果索引“i”的值不等于量“numMdatChildrem”的值,则将标准XML手段用于获得每一个从属于当前mdat元素的XML元素。由“mdatChild”来表示从属于当前mdat元素的第i个XML元素,并将元素mdatChild的元素名表示为“childName”。
在操作5260,将XML元素mdatChild的名称与字符串“mediaFile”进行比较。在操作5266,如果XML元素mdatChild的名称与字符串“mediaFile”匹配,则执行过程“插入媒体文件数据”。在执行过程“插入媒体文件数据”之后,将索引“i”的值增加1(5296),并重复索引“i”的值与量“numMdatChildren”的值的比较操作5242。
在操作5272,如果XML元素mdatChild的名称与字符串“mediaFile”不匹配,则将XML元素mdatChild的名称与字符串“odsm”进行比较。在操作5278,如果XML元素mdatChild的名称与字符串“odsm”匹配,则执行过程“插入Odsm数据”。在执行过程“插入Odsm数据”之后,在操作5296将索引“i”的值增加1,并重复索引“i”的值与量“numMdatChildren”的值的比较操作5242。
在操作5284,如果XML元素mdatChild的名称与字符串“odsm”不匹配,则将XML元素mdatChild的名称与字符串“sdsm”进行比较。在操作5290,如果XML元素mdatChild的名称与字符串“sdsm”匹配,则执行过程“插入sdsm数据”。在执行过程“插入sdsm数据”之后,在操作5296将索引“i”的值增加1,并重复索引“i”的值与量“numMdatChidren”的值的比较操作5242。
如果XML元素mdatChild的名称与字符串“sdsm”不匹配,则在操作5296将索引“i”的值增加1,并重复索引“i”的值与量“numMdatChildren”的值的比较操作5242。
7.2.3.1  插入媒体文件数据
图53中示出的过程“插入媒体文件数据”5266用于处理从属于“mdat”元素2400的“媒体文件”元素2430。在操作5300,将“媒体文件”元素2430的“trackId”属性的值指派给量“trackId”。在操作5306,将“媒体文件”元素2430的“名称”属性的值指派给量“mediaFileName”。
在操作5312,量“trackNum”的值由TrackIdForTrack列表中匹配量“trackId”的值的项的索引确定。在操作5318,将列表Track的流类型和列表Track的对象列表中相应项(具有索引trackNum)的值指派给量“streamType”和“objectType”。
在操作5324,为mediaFileName量的值所标识的媒体数据文件创建新的“File”对象。在操作5330,将该对象保存为媒体数据文件列表中具有量trackNum的值所确定的索引的项。在操作5336,获得定义为包括该媒体数据文件的字节数的该媒体数据文件的大小,作为该新File对象的长度属性。将该大小值指派给量“mediaFileSize”。在操作5342,将量“MediaHeaderSize”的值初始化为0。
在操作5348,向索引“i”指派值0。在操作5354,将索引“i”的值与量“numMediaFileChildren”的值进行比较,其中量“numMediaFileChildren”的值由从属于当前mediaFile元素2430的XML元素的数量所确定。
在操作5360,如果索引“i”的值等于量“numMediaFileChildren”的值,则计数媒体数据文件中的样本数。用于计数媒体数据文件中的样本的手段依赖于“streamType”和“objectType”的值,及每一个特定类型的媒体数据文件的详细文件结构规范。这些手段不是本发明所特有的,且这里未呈现。在操作5366,在对媒体数据文件中的样本数进行计数之后,将所得到的样本技术保存为MediaSample列表中具有量trackNum的值所确定的索引的项。
在操作5372,如果量“i”的值不等于量“numMediaFileChildren”的值,则使用标准XML手段获得从属于当前mediaFille元素2480的每一个XML元素。从属于当前mediaFile元素的第i个XML元素由“mediaFileChild”所表示,且元素mediaFileChild的元素名由“childName”所表示。
在操作5384,将XML元素mediaFileChild的名称与字符串“chunk”进行比较。
在操作5390,如果XML元素mdatChild的名称与字符串“chunk”匹配,则执行过程“插入媒体数据块”。在执行过程“插入媒体数据块”之后,在操作5396将索引“i”的值增加1,并重复索引“i”的值与量“numMediaFileChildren”的值的比较操作5354。
如果XML元素mediaFileChild的名称与字符串“chunk”不匹配,则在操作5396将索引“i”的值增加1,并重复索引“i”的值与量“numMediaFileChildren”的值的比较操作5354。
7.2.3.2  插入媒体数据块
过程“插入媒体数据块”5390主要包括将媒体数据文件2220的内容添加到输出mp4文件2230。由量“streamType”和“objecType”的值所确定的某种类型的媒体数据可以初始“头”数据部分开始。这些包括“MPEG-4视频”(流类型=4且对象类型=32)。识别特定类型的媒体数据的头数据部分的适当手段依赖于每一类型的媒体数据文件的详细规范。这些文件规范在本发明的范围之外,且这里未涵盖。参见ISO/IEC文档14496-2(1999,2000年修改)“信息技术-音频-视频对象的编码-第2部分:视频”中对于MPEG-4视频流的描述。
在将媒体数据从媒体数据文件复制到mp4二进制文件之前,执行下列操作:
1.将在操作5230中确定的量“mdatId”的值指派给列表“MdatIdForChunk”中的项“NumChunks”。
2.将在操作5300中确定的量“trackId”的值指派给列表“TrackIdForChunk”中的项“NumChunks”。
3.将输出mp4文件中的当前文件位置的值指派给列表“OffsetForChunk”中的项“NumChunks”。
4.将在操作5336中确定的量“mediaFileSize”的值指派给列表“MediaDataSize”中的项“NumChunks”。
5.向列表“MediaHeaderSize”中的项“trackNum”指派值0。
6.如果量“streamType”和“objectType”的值所指出的媒体文件类型包括初始头数据部分,则将包括此头部分的字节数指派给列表“MediaHeaderSize”中的项“trackNum”。创建该大小的字节数组,并将媒体头部分中的数据从该媒体数据文件复制到该数组。将该字节数组的位置的值指派给列表“MediaHeader”中的项“trackNum”。
7.将媒体数据的剩余部分从(输入)媒体数据文件2220复制到输出mp4二进制文件2230和730。
如果需要,在此阶段,可对数据应用数据格式转换。例如,可将MPEG-2音频数据(流类型=5且对象类型=64)修改为满足MPEG-4音频流的需要。这些修改依赖于MPEG-2高级音频编码(AAC)数据[ISO-IEC文档13818-7(1997)“信息技术-移动图像和相关音频信息的通用编码-第7部分:高级音频编码”]的详细规范。这些规范和相关数据转换在本发明范围之外,且未包括在这里。
8.将量“numChunks”的值增加1。
7.2.3.3  插入odsm数据
使用过程“插入Odsm数据”处理从属于“mdat”元素2400的“odsm”元素2420。该过程将在输出mp4文件中为每一个从属于当前odsm元素2460的“odsmChunk”元素2470产生一个新的块736。
将“odsm”元素2420的“trackId”属性的值指派给量“trackId”。使用标准XML手段获得每一个从属于“odsm”元素2420和2460的“odsmChunk”元素2470。
对于每一个从属于当前“odsm”元素2460的“odsmChunk”元素2470执行下列操作:
1.将在操作5230中确定的量“mdatId”的值指派给列表“MdatIdForChunk”中的项“NumChunks”。
2.将量“trackId”的值指派给列表“TrackIdForChunk”中的项“NumChunks”。
3.将输出mp4文件的当前文件位置的值指派给列表“offsetForChunk”中的项“NumChunks”。
4.将值“-1”指派给列表“MediaDataSize”中的项“NumChunks”。
5.将量“numChunks”的值增加1。
6.使用标准XML手段获得每一个从属于“odsmChunks”元素2500的“odsmSample”元素2510。
对于每一个在步骤6中识别的“odsmSample”元素2510,将当前mp4文件位置指派给量“sampleStart”,将“size”属性的值指派给量“sampleSize”,并将“time”属性的值指派给量“sampleTime”。将量“sampleTime”的值指派给列表“OdsmSampleTime”中的项numOdsmSamples。将“sampleSize”的值作为所得到的二进制odsm样本的估算对待。这将由最终文件位置和“sampleStart”之间的差所确定的准确值来替代。
使用标准XML手段获得每一个从属于“osdmSample”元素2520的XML元素2530。这些从属元素被期望具有名为“ObjectDescrUpdate”2540或“ObjectDescrRemove”2570的元素。对这些情况中的每一种按下面所指示的进行处理。
在完成对所有从属于“odsmSample”元素2520的XML元素2530的处理之后,将所得到的输出mp4文件的文件文件与量“sampleStart”的值之间的差指派给量“sampleSize”(替换从相应属性值中获得的估算)。将该值指派给列表“OdsmSampleSize”中的项“numOdsmSample”。然后,将量“numOdsmSample”的值增加1。
7.2.3.4  ObjectDescrUpdate元素
对于每一个从属于“odsmSample”元素2520的“ObjectDescrUpdata”元素2540,图51中示出的过程用于在输出mp4文件中创建ObjectDescrUpdate对象结构2000。在操作5100,将结构标签“ObjectDescrUpdateTag”(值=1)作为8位整数写入输出mp4文件中。在操作5110,将输出mp4文件的当前文件位置指派给量“sizePos”,并将“sizePos”的值指派给量“filePos1”。在操作5120,向量“numSizeBytes”指派值“1”。在操作5130,将值0作为初始大小值2020写入输出mp4文件。
“ObjectDescrUpdate”元素2540不具有属性,因此在操作5135和5140不进行任何处理。
使用标准XML手段获得从属于“ObjectDescrUpdate”元素2540的每一个XML元素2550。这些从属元素被期望具有名为“ObjectDescriptor”2550的元素。在如下面在操作5150中所述的对每一个从属“ObjectDescriptor”元素2550进行处理之后,如图51中所指示(操作5160到5195)的那样对ObjectDescrUpdate结构2020的大小进行更新。
对于每一个从属于“ObjectDescrUpdate”元素2540的“ObjectDescrUpdate”元素2550,使用图51中示出的过程在输出mp4文件中创建ObjectDescriptor对象结构2030和2100。在操作5100,将结构标签“MP4_OD_TAG”(值=17)2108作为8位整数写入输出mp4文件。在操作5110,将输出mp4文件的当前文件位置指派给量“sizePos”,并将“sizePos”的值指派给量“filePos2”。在操作5120,向量“numSizeBytes”指派值“1”。在操作5130,将值0作为初始大小值2116写入输出mp4文件。
将“ObjectDescriptor”元素2550的“OdId”属性的值指派给量“OdId”。将量“OdId”的数字值乘以64(左移6位),并将结果与值“31”相加,以确定量“OdId”的更改值。值“31”代表ObjectDescriptor对象结构2100内的保留字段2140。
如果指定了“ObjectDescriptor”元素2550的“url”属性,则将值“32”与更改的“OdId”值相加。将所得到的值作为16位整数写入mp4文件。然后,将表示“url”属性的值中的字符数的一个字节写入该mp4文件。然后,将“url”属性的值作为字符序列写入该mp4文件。
如果未指定“ObjectDescriptor”元素2550的“url”属性,则将更改的“OdId”值作为16位整数2124、2132和2140写入mp4文件。
然后,使用标准XML手段获得每一个从属于“ObjectDescriptor”元素2550的XML元素2560。这些从属元素被期望具有名为“EsIdRef”2560的元素。
对于每一个从属于当前“ObjectDescriptor”元素2550的“EsIdRef”元素2560的,使用图51中示出的过程在输出mp4文件中创建EsIdRef对象结构2148和2160。在操作5100,将结构标签“EsIdRefTag”(值=15)2170作为8位整数写入输出mp4文件。在操作5110,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5120,向量“numSizeBytes”指派值“1”。在操作5130,将值0作为初始大小值2180写入输出mp4文件。
在操作5135,将“EsIdRef”元素2560的“EsId”属性的值指派给量“EsId”。然后,在操作5140,将量“EsId”的数字值作为16位整数2190写入输出mp4文件。EsIdRef元素2560不具有从属元素5150。
在对“EdId”值2190处理之后,如图51中所指示的那样对EsIdRef对象结构的大小2180进行更新(操作5160到5195)。
在操作2550对“ObjectDescriptor”元素进行处理之后,将filePos2的值指派给量“sizePos”,并如图51中所示的那样对MP4_OD对象结构2100的大小2116进行更新(操作5160到5195)。
在操作2540对“ObjectDescriptor”元素进行处理之后,将filePos1的值指派给量“sizePos”,且如图51中所示的那样对ObjectDescrUpdate对象结构2000的大小2020进行更新(操作5160到5195)。
7.2.3.5  ObjectDescrRemove元素
对于每一个从属于当前“odsmSample”元素2520的“ObjectDescrRemove”元素2570,使用图51中所示的过程在输出mp4文件中创建ObjectDescrRemove对象结构2040。在操作5100,将结构标签“ObjectDescrRemoveTag”(值=2)2050作为8位整数写入输出mp4文件。在操作5110,将输出mp4文件的当前文件位置指派给量“sizePos”,并将“sizePos”的值指派给量“filePos1”。在操作5120,向量“numSizeBytes”指派值“1”。在操作5130,将值0作为初始大小值2060写入输出mp4文件。
将“ObjectDescrRemove”元素2570的“OdId”属性的值指派给量“OdIdList”。
量“OdIdList”包括表示一个或多个以“白空间”(空格或其他非数字字符)格开的整数的字符串。将“OdIdList”内的每一个数字字符序列解释为整数,并将所得到的值作为10位objectDescriptorId值2070写入mp4文件。写入mp4文件中的连续objectDescriptorId值2070不是字节对齐的。如果由objectDescriptorId值序列2070所占用的全部位数(n位)不是8的倍数,则将nPad 0位2080写入mp4文件,其中nPad的值由nBits模型8给出。
在处理“OdIdList”量之后,如图51中所示的那样对ObjectDescrRemove对象结构2040进行更新(操作5160到5195)。
7.2.3.6  插入sdsm数据
过程“插入sdsm数据”用于对从属于“mdat”元素2400的“sdsm”元素2410进行处理。将“sdsm”元素2410和2440的“trackId”属性的值指派给量“trackId”。可能存在可选属性“xml File”。该属性可用于指出表示mp4bifs文档2800的输入XML文件的名称。可选地,mp4bifs文档2800可从另一个过程(诸如上述用于根据XMT-A文档创建mp4file和mp4bifs文档的过程)的结果中获得。然后,使用标准XML手段获得mp4bifs文档2800的顶级元素。
如图28A中所示,mp4bifs文档2800包括具有单个从属“bifsConfig”元素2810和一个或多个从属“commandFrame”元素2820的顶级于元素。每一个“commandFrame”元素2820表示情景描述流(sdsm)的“样本”。在准备对mp4bifs文档2800进行解释中,通过对从属于mp4bifs顶级元素2800的“commandFrame”元素2820的数量进行计数,来确定sdsm样本的数量。将所得到的值指派给量“MaxNumSdsmSample”,并创建每一个具有MaxNumSdsmSample项的两个列表。这些表中的一个“SdsmSampleTime”是整数值的列表。第二个列表“SdsmSample”是浮点值优选为双精度浮点值(每项64位)的列表。向量“NumSample”指派值0。
使用标准XML手段获得从属于“sdsm”元素2440的每一个“块”元素2450。对于每一个“sdsm”元素2440,最多期望具有一个从属“块”元素2440。对“块”元素2440执行下列操作:
1.将在操作5230确定的量“mdatId”的值指派给列表“MdatIdForChunk”中的项“NumChunks”。
2.将量“trackId”的值指派给列表“TrackIdChunk”中的项“NumChunks”。
3.将当前文件位置的值指派给列表“OffsetForChunk”中的项“NumChunks”。
4.向列表“MediaDataSize”中的项“NumChunks”指派值“-1”。
5.将量“numChunks”的值增加1。
然后,按如下所述对mp4bifs文档2800进行解释。在该文档被解释时,将数据值写入输出mp4文件700,并将各值输入到列表“SdsmSampleSize”和“SdsmSampleTime”。在面向对象的实现中,这通过创建新的SdsmEncoder对象、并调用对于该对象的方法“encodeSdsm”来实现。该方法将返回完整列表“SdsmSampleSize”和“SdsmSampleTime”以及将表示sdsm的二进制编码的数据添加到输出mp4文件700中。
使用标准XML手段获得从属于mp4bifs顶级元素2800的“bifsConig”元素2810。将该元素的“routeIdBits”属性的值指派给量“RouteIdBits”。将该元素的“nodeIdBits”属性的值指派给量“NodeIdBits”。将数字2提高到乘方“NodeIdBits”次乘方后的值(或左移NodeIdBits位的“1”)指派给量MaxUpdateableNodes。创建两个新的整数列表“UpdateableNodeId”和“UpdateableNodeNumber”。这些列表的每一个中的项数由“MaxUpdateableNodes”的值确定。向量“NumUpdateableNodes”指派值0。向布尔量“bUseNames”指派值“假”。
然后,使用标准XML手段获得从属于mp4bifs顶级元素2800的每一个“commandFrame”元素2820。下面的手段用于对每一个这样的“commandFrame”元素2820进行处理:
1.将输出mp4文件的当前文件位置的值指派给量“FilePointerAtStart”。
2.将“commandFrame”元素2820的“time”属性的值指派给量“Time”。将量“Time”的值指派给列表“SdsmSampleTime”中的项“NumSample”。
3.使用标准XML手段获得从属于“commandFrame”元素2830的每一个bifsCommand元素2840。每一个这样的从属元素处理如下。
4.将输出mp4文件的当前文件位置的值指派给量“FilePointerAtEnd”,并将量“FilePointerAtEnd”的值与量“FilePointerAtStart”的值之间的差指派给列表“SdsmSampleSize”中的项“NumSamples”。
5.将量“NumSamples”的值增加1。
如图28B中所示,每一个“commandFrame”元素2830包含一个或多个从属bifsCommand元素2840。每一个bifsCommand元素2910表示11个可能以sdsm数据编码的可能BIFS命令中的一个。这些包括三个插入命令(“插入节点”、“插入路由”和“插入索引值”)、三个删除命令(“删除节点”、“删除路由”和“删除索引值”)、和五个替换命令(“替换节点”、“替换路由”、“替换索引值”、“替换字段”和“替换情景”)。如图29A中所示,一个BIFS命令元素2910可能具有表示BIFS节点2920的从属元素。如图29B中所示,表示替换情景命令的bifsCommand元素2930还包含单个从速Routes元素2950,其包含一个或多个Route元素2960。
在生成从属于特定“commandFrame”元素2830的bifsCommand元素2840的二进制表示之前,对每一个从属bifsCommand元素2910进行“扫描”,以识别对其已为“NodeId”属性3010指定了一个值的所有从属Node元素2920和3000。该“扫描”操作通过是使用标准XML手段获得每一个从属于当前“commandFrame”元素2830的bifsCommand元素2840来实现。该操作仅应用于6个可能包括一个或多个从属BIFS节点元素2920和2940的bifsCommand元素(“插入节点”、“插入索引值”、“替换节点”、“替换索引值”、“替换字段”和“替换情景”)2910。
用于实现该“扫描”操作的过程除了对输出mp4文件什么都不做之外,与下面描述的用于随后BIFS命令解释的过程那些过程相同,且除了“nodeId”属性、和具有字段数据类型“node”或“command buffer”的属性之外忽略所有属性。对于每一个为其指定了“NodeId”属性的节点,将“NodeId”属性的值指派给列表“UpdateableNodeId”中的项“numUpdateableNodes”。将该节点的“节点数”属性的值指派给“UpdateableNodeNumber”列表中的相应项。特定节点的“节点数”属性由节点名表中与该节点元素的元素名匹配的项的索引所确定。节点名表定义于MPEG-4系统规范文档中。然后,将量“NumUpdateableNode”的值增加1。
在对从属bifsCommand元素2840扫描之后,再次使用标准XML手段获得每一个从属于当前“commandFrame”元素2830的XML元素2840。如图11B中所示,每一个BIFS命令1120之后有“continue”位1130和1140。在对从属于除了第一个命令之外的“commandFrame”元素2830的每一个bifsCommand元素2840进行处理之前,将具有值“1”的单个位写入输出mp4文件,以指定“continue=1”1130。然后,按下面所述对每一个从属bifsCommand元素2840进行处理。在所有从属元素均已处理之后,将具有值“0”的单个位写入输出mp4文件,已指出“continue=0”(命令帧结束)1140。如果用于以二进制形式表示该命令帧的总位数不是8的倍数,则以0填充最后字节1150,以使总位数达到8的倍数。
然后,使用下面的手段将二进制BIFS命令数据结构添加到每一个从属于当前commandFrame元素2830的bifsCommand元素2840的输出mp4文件。
如果bifsCommand元素2840表示三个插入命令中的一个,则将两位插入码(二进制值=00)1206写入输出mp4文件。如果BIFS命令元素2840表示三个删除命令中的一个,则将两位删除码(二进制值=01)1220写入输出mp4文件。如果BIFS命令元素2840表示四个替换命令(除替换情景之外)中的一个,则将两位替换码(二进制值=10)1240写入输出mp4文件。如果BIFS命令元素2840表示替换情景命令,则将两位情景替换码(二进制值=11)1280写入输出mp4文件。
7.2.3.7  节点插入BIFS命令
在“插入节点”bifsCommand元素2840和2910的情况下,将如图13A中所示的节点插入BIFS命令1300添加到输出mp4文件。将“节点”的两位参数类型码(二进制值=00)1308写入输出mp4文件的插入码1304之后。将插入节点元素的“parented”属性的值指派给量“nodeID”,并将该量1312的整数值写入mp4文件。用于对量“nodeID”的值进行编码的位数由量“nodeIdBits”的值指定。插入节点元素的“parentID”属性的值必须与UpdatealeNodeId列表中的某一项匹配。UpdateableNodeId列表中的相应项指出从属节点元素的父节点的“节点数”属性的值。
将插入节点元素的“插入位置”属性的值指派给量“insertionPosition”,并将表示该量1316的整数值的两位写入mp4文件。如果量“insertionPosition”的值为0,则将插入节点元素的“位置”属性的值指派给量“position”,并将表示该量1320的整数值达到8位写入mp4文件。
每一个插入节点元素包含从属节点元素2920。将该节点元素1324的二进制SFNode表示添加到表示插入位置1316和1320的数据之后的输出mp4文件中。SFNode结构的格式显示于图17中。用于创建该SFNode结构的过程在下面描述。
7.2.3.8  索引值插入BIFS命令
在“插入索引值”bifsCommand元素2840和2910的情况下,将如图13B中所示的索引值插入BIFS命令1328添加到输出mp4文件。将“索引值”的两位参数类型码(二进制值=10)1336写入mp4文件的插入码1332之后。将插入索引值元素的“nodeId”属性的值指派给量“nodeID”,并将该量1340的整数值写入mp4文件。用于对量“nodeID”的值进行编码的位数由量“nodeIdBits”的值指定。
插入索引值元素的“nodeId”属性的值必须与UpdatealeNodeId列表中的某一项匹配。UpdateableNodeNumber列表中的相应项指出要由与该BIFS命令相关的字段值修改的BIFS节点的“节点号”属性的值。
该BIFS命令的“字段索引”属性的值由该节点号的字段名列表中具有匹配插入索引值元素的“inFieldName”属性的值匹配的值的项的索引确定。字段名列表定义于MPEG-4系统规范中。该字段的inFiledID属性的值由节点号的值、字段索引的值、和MPEG-4系统规范中定义的一组表所确定。量“numBits”的值由节点号的值、inFiledID的值、和MPEG-4系统规范中定义的表所确定。然后,使用numBits位1344将量inFiledID的整数值写入mp4文件。
将插入索引值元素的“插入位置”属性的值指派给量“insertionPosition”,并将表示该量1316的整数值的两位写入mp4文件1348。如果量“insertionPosition”的值为0,则将插入索引值元素的“位置”属性的值指派给量“position”,并将表示该量的整数值的16位写入mp4文件1352。
每一个插入索引值元素包括“value”属性。对该value属性的解释依赖于插入索引值元素的inFieldName属性所标识的属性字段的“字段数据类型”属性。该字段数据类型属性由节点号的值、字段索引的值、和MPEG-4系统规范中定义的一组表所确定。如果字段数据类型属性为“SFNode”,则“value”属性的值指出从属节点元素的名称。否则,“value”属性的值直接指出“字段值”的值。在每一种情况下,下面在“SFField结构”之下描述的手段用于解释该value属性、创建由value属性指出的字段值的二进制表示、并将结果添加到输出mp4文件1356中。
7.2.3.9  路由插入BIFS命令
在“插入路由”bifsCommand元素2840和2910的情况下,将如图13C中所示的路由插入BIFS命令1360添加到输出mp4文件中。将“路由”的两位参数类型码(二进制值=11)1368写入mp4文件的插入码1364之后。如果已对插入路由元素的“routeId”属性指定了一个值,则将具有值“0”的单个位作为“isUpdateable”值1372写入输出mp4文件。否则,将值“1”作为“isUpdateable”值1372写入输出mp4文件,其后有由该插入路由元素的“routeId”属性所指出的值1376。用于表示该整数值的位数由量RouteIdBits的值所指出。
将插入路由元素的“出发节点”属性的值指派给量“departureNodeID”,并将该值写入mp4文件1380。用于表示量“departureNodeID”的整数值的位数由量“NodeIdBits”的值指定。
插入路由元素的“出发节点”属性的值必须与UpdatealeNodeId列表中的某一项匹配。UpdateableNodeNumber列表中的相应项指出“出发节点”的“节点号”属性的值。
该出发节点的“字段索引”属性的值由该节点号的字段名列表中具有匹配插入路由元素的“出发字段名”属性的值匹配的值的项的索引所确定。字段名列表定义于MPEG-4系统规范中。该字段的出发字段ID属性的值由出发节点的节点号的值、出发节点的字段索引的值、和MPEG-4系统规范中定义的一组表所确定。量“numBits”的值由出发节点的节点号的值、出发字段ID的值、和MPEG-4系统规范中定义的表所确定。然后,使用numBits位1384将量出发字段ID的值写入mp4文件。
将插入路由元素的“到达节点”属性的值指派给量“arrivalNodeID”,并将该值写入mp4文件1388。将用于表示量“arrivalNodeID”的整数值的位数由量“NodeIdBits”的值所指出。
插入路由元素的“到达节点”属性的值必须与UpdateableNodeId列表中的某一项匹配。UpdateableNodeId列表中的相应项指出“到达节点”的“节点号”属性的值。
到达节点的“字段索引”属性的值由该节点号的字段名列表中具有与该插入路由元素的“到达字段名”属性的值匹配的值的项的索引所确定。字段名列表定义于MPEG-4系统规范中。该字段的到达字段ID属性的值由到达节点的节点号的值、到达节点的字段索引的值、和MPEG-4系统规范中定义的一组表所确定。量“numBits”的值由到达节点的节点号的值、到达字段ID的值、和MPEG-4系统规范中定义的表所确定。然后,使用numBits位1392将量到达字段ID的整数值写入mp4文件。
7.2.3.10  节点删除命令
在“删除节点”bifsCommand元素2840和2910的情况下,将如图14A中所示的节点删除BIFS命令1400添加到输出mp4文件中。在该情况下,将“节点”的两位参数类型码(二进制值=00)1412写入mp4文件的删除码1406之后。将“nodeId”属性的值指派给量“nodeID”,并将该值的整数表示写入mp4文件1418。用于表示量“nodeID”的整数值的位数由量“NodeIdBits”的值指出。
7.2.3.11  索引值删除BIFS命令
在“删除索引值”bifsCommand元素2840和2910的情况下,将如图14B中所示的索引值删除BIFS命令1424添加到输出mp4文件。将“索引值”的两位参数类型码(二进制值=10)1436写入mp4文件的删除码1430之后。将“nodeId”属性的值指派给量“nodeID”,并将该值写入mp4文件1442。用于表示量“nodeID”的整数值的位数由量“nodeIdBits”的值指定。
删除索引值元素的“nodeId”属性的值必须与UpdatealeNodeId列表中的某一项匹配。UpdateableNodeNumber列表中的相应项指出与该BIFS命令相关的BIFS节点的“节点号”属性的值。
该BIFS命令的“字段索引”属性的值由该节点号的字段名列表中具有匹配删除索引值元素的“inFieldName”属性的值匹配的值的项的索引确定。字段名列表定义于MPEG-4系统规范中。该字段的inFiledID属性的值由节点号的值、字段索引的值、和MPEG-4系统规范中定义的一组表所确定。量“numBits”的值由节点号的值、inFiledID的值、和MPEG-4系统规范中定义的表所确定。然后,使用numBits位1448将量inFiledID的整数值写入mp4文件。
将删除索引值元素的“删除位置”属性的值指派给量“deletionPosition”,并将表示该量的整数值的两位写入mp4文件1454。如果量“deletionPosition”的值为0,则将删除索引值元素的“位置”属性的值指派给量“position”,并将表示该量的整数值的16位写入mp4文件1460。
7.2.3.12  路由删除BIFS命令
在“删除路由”bifsCommand元素2840和2910的情况下,将如图14C中所示的路由删除BIFS命令1466添加到输出mp4文件中。将“路由”的两位参数类型码(二进制值=11)1478写入mp4文件的删除码1472之后。将删除路由元素的“routeId”属性的值指派给量“routeID”,并将该值的整数表示写入mp4文件1484。用于表示量“routeID”的整数值的位数由量“RouteIdBits”的值指出。
7.2.3.13  节点替换BIFS命令
在“替换节点”bifsCommand元素2840和2910的情况下,将如图15A中所示的节点替换BIFS命令1500添加到输出mp4文件中。将“节点”的两位参数类型码(二进制值=00)1508写入mp4文件的替换码1504之后。将替换节点元素的“nodeId”属性的值指派给量“nodeID”,并将该值的整数表示写入mp4文件1510。用于表示量“nodeID”的整数值的位数由量“NodeIdBits”的值指出。
每一个替换节点元素包含从属节点元素2920。将该节点元素1514的二进制SFNode表示添加到输出mp4文件的表示nodeID值1510的数据之后。图17中示出了SFNode结构的格式。用于创建该SFNode结构的过程在下面描述。
7.2.3.14  字段替换BIFS命令
在“替换字段”bifsCommand元素2840和2910的情况下,将如图15B中所示的字段替换BIFS命令1520添加到输出mp4文件中。将“字段”的两位参数类型码(二进制值=01)1528写入mp4文件的替换码1524之后。将替换字段元素的“nodeId”属性的值指派给量“nodeID”,并将该值写入mp4文件1530。用于表示量“nodeID”的整数值的位数由量“NodeIdBits”的值指出。
替换字段元素的“nodeId”属性的值必须与UpdateableNodeId列表中的某一项匹配。UpdateableNodeNumber列表中的相应项指出要由与该BIFS命令相关的字段值所更改的BIFS节点的“节点号”属性的值。
该BIFS命令的“字段索引”属性的值由该节点号的字段名列表中具有与该替换字段元素的“inFieldName”属性的值匹配的值的项的索引所确定。字段名列表定义于MPEG-4系统规范中。该字段的inFieldID属性的值由节点号的值、字段索引的值、和MPEG-4系统规范中定义的一组表所确定。量“numBits”的值由节点号的值、inFiledID的值、和MPEG-4系统规范中定义的表所确定。然后,使用numBits位1534将量inFieldID的值写入mp4文件中。
每一个替换字段元素包括“value”属性。对该值属性的解释依赖于由该替换字段元素的inFieldName属性所标识的属性字段的“字段数据类型”属性。字段数据类型属性由节点号的值、字段索引、和MPEG-4系统规范中定义的一组表所确定。如果字段数据类型属性为“SFNode”,则“value”属性的值指出从属节点元素的名称。否则,“value”属性的值直接指出“字段值”的值。在每一种情况下,下面在“SFField结构”之下描述的手段用于解释value属性、创建由value属性所指出的字段值的二进制表示、并将结果添加到输出mp4文件1538中。
7.2.3.15  索引值替换BIFS命令
在“替换索引值”bifsCommand元素2840和2910的情况下,将如图15C中所示的索引值替换BIFS命令1540添加到输出mp4文件中。将“索引值”的两位参数类型码(二进制值=10)1548写入mp4文件的替换码1544之后。将“nodeId”属性的值指派给量“nodeID”,并将该值写入mp4文件1550。用于表示量“nodeID”的整数值的位数由量“NodeIdBits”的值指出。
替换索引值元素的“nodeId”属性的值必须与UpdateableNodeId列表中的某一项匹配。UpdateableNodeNumber列表中的相应项指出要由与该BIFS命令相关的字段值所更改的BIFS节点的“节点号”属性的值。
该BIFS命令的“字段索引”属性的值由该节点号的字段名列表中具有与该替换索引值元素的“inFieldName”属性的值匹配的值的项的索引所确定。字段名列表定义于MPEG-4系统规范中。该字段的inFieldID属性的值由节点号的值、字段索引的值、和MPEG-4系统规范中定义的一组表所确定。量“numBits”的值由节点号的值、inFiledID的值、和MPEG-4系统规范中定义的表所确定。然后,使用numBits位1554将量inFieldID的值写入mp4文件中。
将插入索引值元素的“替换位置”属性的值指派给量“replacementPosition”,并将表示该量的值的两位写入mp4文件1558。如果量“replacementPosition”的值为0,则将替换索引值元素的“位置”属性的值指派给量“position”,并将表示该量的整数值的16位写入mp4文件1560。
每一个替换索引值元素包括“value”属性。对该值属性的解释依赖于由该替换索引值元素的inFieldName属性所标识的属性字段的“字段数据类型”属性。字段数据类型属性由节点号的值、字段索引、和MPEG-4系统规范中定义的一组表所确定。如果字段数据类型属性为“SFNode”,则“value”属性的值指出从属节点元素的名称。否则,“value”属性的值直接指出“字段值”的值。在每一种情况下,下面在“SFField结构”之下描述的手段用于解释value属性、创建由value属性所指出的字段值的二进制表示、并将结果添加到输出mp4文件1564中。
7.2.3.16  路由替换BIFS命令
在“替换路由”bifsCommand元素2840和2910的情况下,将如图15D中所示的路由替换BIFS命令1570添加到输出mp4文件中。将“路由”的两位参数类型码(二进制值=11)1578写入mp4文件的替换码1574之后。将该替换路由元素的“routeld”属性的值指派给量“routeID”,并将该值的整数表示写入mp4文件1580。用于表示量“routeID”的整数值的位数由量“RouteIdBits”的值指出。
将替换路由元素的“出发节点”属性的值指派给量“departureNodeID”,并将该值写入mp4文件1584。用于表示量“departureNodeID”的整数值的位数由量“NodeIdBits”的值指定。
该替换路由元素的“出发节点”属性的值必须与UpdatealeNodeId列表中的某一项匹配。UpdateableNodeNumber列表中的相应项指出“出发节点”的“节点号”属性的值。
该出发节点的“字段索引”属性的值由该节点号的字段名列表中具有匹配该替换路由元素的“出发字段名”属性的值匹配的值的项的索引所确定。字段名列表定义于MPEG-4系统规范中。该字段的出发字段ID属性的值由出发节点的节点号的值、出发节点的字段索引的值、和MPEG-4系统规范中定义的一组表所确定。量“numBits”的值由出发节点的节点号的值、出发字段ID的值、和MPEG-4系统规范中定义的表所确定。然后,使用numBits位1588将量出发字段ID的值写入mp4文件。
将该替换路由元素的“到达节点”属性的值指派给量“arrivalNodeID”,并将该值写入mp4文件1590。将用于表示量“arrivalNodeID”的整数值的位数由量“NodeIdBits”的值所指出。
该插入路由元素的“到达节点”属性的值必须与UpdateableNodeId列表中的某一项匹配。UpdateableNodeId列表中的相应项指出“到达节点”的“节点号”属性的值。
到达节点的“字段索引”属性的值由该节点号的字段名列表中具有与该替换路由元素的“到达字段名”属性的值匹配的值的项的索引所确定。字段名列表定义于MPEG-4系统规范中。该字段的到达字段ID属性的值由到达节点的节点号的值、到达节点的字段索引的值、和MPEG-4系统规范中定义的一组表所确定。量“numBits”的值由到达节点的节点号的值、到达字段ID的值、和MPEG-4系统规范中定义的表所确定。然后,使用numBits位1594将量到达字段ID的整数值写入mp4文件。
7.2.3.17  情景替换BIFS命令
在“替换情景”bifsCommand元素2930的情况下,将情景替换BIFS命令1290添加到输出mp4文件。如图12D中所示,情景替换BIFS命令1290包括两位情景替换码(二进制值=11)1280,其后有BIFScene数据结构1290和1600。图16中示出了BIFSScene结构1600的成分。
在写入两位情景替换码1280之后,将6位0值(“保留”)1610写入输出mp4文件。
替换情景元素的“USENAMES”属性的值用于确定布尔量bUseNames的值。如果“USENAMES”属性的值为“真”,则向“bUseNames”指派值“真”,并将单个“1”位写入mp4文件1620。否则,向bUsenames指派值“假”,并将单个“0”位写入mp4文件1620。接着,将单个“0”位写入mp4文件,以指示在该mp4文件1630中不会存在“protoList”。
ProtoList位1630之后有“SFNode”结构。这除了只允许在MPEG-4系统规范中定义的节点的子集的成员之外,与下面描述的“SFNode”结构相同。SFTopNode结构的描述由从属于替换情景命令元素2930的mp4bifs节点元素2940所指出。
除了所需的从属节点元素之外,mp4bifs替换情景元素2930还具有单个从属“Routes”元素2950。如果替换情景元素2930不具有从属“Routes”元素2950,则将单个“0”位作为“hasRoutes”位1650写入mp4文件,从而指出BIFS情景替换命令1270的结束。如果替换情景命令元素2930具有从属“Routes”元素2950,则将单个“1”位作为“hasRoutes”位1650写入mp4文件,其后有图18中描述的Routes结构1660。
Routes结构1660可具有两种形式中的一种,图18A中示出的列表形式1800或图18B中示出的向量形式1830。这些由第一位的值来区别,该第一位对于列表形式为“1”1805,对于向量形式为“0”1835。在本发明的一个实施例中,常常选取列表形式。因此,如果“hasRoutes”位被设为“1”,则下一位1805也被设为“1”。列表形式对向量形式的选取是不重要的,本发明可同样应用Routes结构的向量形式1830。
Mp4bifs“Routes”元素2950可具有一个或多个从属“Route”元素2960。对于每一个从属于“Routes”元素2950的“Route”元素2960,将单个“1”位1805和1815写入输出mp4文件,其后有Route元素2960的二进制描述1810和1860。将单个“0”位1820写入输出mp4文件的最后一个从属于“Routes”元素2950的“Route”元素2960的描述之后。在第一个从属“Route”元素2960的二进制描述1810之前的“1”位1805指出二进制Routes数据结构2960的“列表形式”1800正使用。随后的“1”位1815指出“moreRoutes=真”。最后的“0”位1820指出“moreRoutes=假”并指示Routes结构1800和2960的结束。
每一个Route元素的二进制描述1860的结构示于图18C中。用于创建每一个Route元素的二进制描述1860的手段在下面“Route结构”之下描述。
7.2.3.18  Route结构
对于每一个从属于Route元素2950(从属于替换情景元素2930)的Route元素2960,将二进制Route结构1860添加到输出mp4文件。如果已对Route元素2960的“routeId”属性指定了一个值,则将具有值“0”的单个位作为“isUpdateable”值1865写入输出mp4文件。否则,将值“1”作为“isUpdateable”值1865写入输出mp4文件,其后有Route元素2960的“routeId”属性所指出的值1870。用于表示routeId属性的整数值的位数由量RouteIdBits的指出。
如果已对Route元素2960的“routeId”属性指定了一个值,则相应的替换情景元素2930的USENAMES属性的值为“真”,然后将Route元素2960的“name”属性的值作为已空结尾的字符串1875添加到输出mp4文件。Route元素2960的“name”属性的值是相应XMT-A Route元素390的DEF属性的副本。
将Route元素的“toNode”属性的值指派给量“outNodeID”,并将该值写入mp4文件1880。用于表示量“outNodeID”的整数值的位数由量“NodeIdBits”的值指出。
Route元素的“outNodeID”属性的值必须与UpdateableNodeId列表中的某一项匹配。UpdateableNodeNumber列表中的相应项指出“出发节点”的“节点号”属性的值。
该出发节点的“字段索引”属性的值由该相应节点号的字段名列表中具有与该Route元素的“toFieldName”属性的值匹配的值的项的索引所确定。字段名列表定义于MPEG-4系统规范中。该字段的outFieldRef属性的值由出发节点的节点号的值、出发节点的字段索引的值、和MPEG-4系统规范中定义的一组表所确定。量“numBits”的值由出发节点的节点号的值、outFiledRef属性的值、和MPEG-4系统规范中定义的表所确定。然后,使用numBits位1885将量outFieldRef的值写入mp4文件中。
将Route元素2960的“fromNode”属性的值指派给量“inNodeID”,并将该值写入mp4文件1890。用于表示量“inNodeID”的整数值由量“NodeIdBits”的值指出。
Route元素2960的“inNodeID”属性的值必须与UpdateableNodeId列表中的某一项匹配。UpdateableNodeNumber列表中的相应项指出“到达节点”的“节点号”属性的值。
该到达节点的“字段索引”属性的值由该节点号的字段名列表中具有与该Route元素的“fromFieldName”属性的值匹配的值的项的索引所确定。字段名列表定义于MPEG-4系统规范中。该字段的inFieldRef属性的值由到达节点的节点号的值、到达节点的字段索引的值、和MPEG-4系统规范中定义的一组表所确定。量“numBits”的值由到达节点的节点号的值、inFiledRef属性的值、和MPEG-4系统规范中定义的表所确定。然后,使用numBits位1895将量inFieldRef的整数值写入mp4文件中。
7.2.3.19  SFNode结构
mp4bifs节点元素3000、3040、和3080可呈现为从属于插入节点元素、替换节点元素、替换情景元素或另一个mp4bifs节点元素3000的元素。每一个mp4bifs节点元素3000、3040和3080具有图30A、30B或30C中示出的结构。存在100多种类型的mp4bifs节点元素。这些中的每一个对应于MPEG-4系统规范中定义的一个BIFS节点。每一个BIFS节点具有指定的节点名(字符串)和属性字段的有序集合。每一个属性字段具有指定名称(字符串)和其他特性。每一类型的BIFS节点由同名mp4bifs节点元素表示,BIFS节点的每一个属性字段由相应mp4bifs节点元素的同名属性表示。
对于大多数BIFS节点属性字段数据类型(包括布尔、整数、浮点、颜色和字符串),相关数据值由mp4bifs节点元素的相应属性的值表示。存在两个例外:字段数据类型“node”和“buffer”。在字段数据类型“node”和“buffer”的情况下,相关数据值由从属mp4bifs元素3030和3070表示,且相应属性包含相关从属元素的名称有序列表。这些名称有序列表可在不只一个属性具有node或buffer字段数据类型的情况下用于确定与mp4bifs节点元素的每一个属性相关的特定从属元素。
除了对于每一类型的BIFS节点的属性字段之外,每一个BIFS节点具有通用属性的集合。这些包括重用状态、可更新状态和掩蔽访问状态。图7中示出了所得到的属性字段和通用属性的组合。
下面的手段用于创建由mp4bifs节点元素表示的二进制SFNode结构。
第一步是检查mp4bifs节点元素的可选“nodeRef”属性。如果已对该属性指定了一个值,则将该属性的值指派给量“nodeIDRef”。在此情况下,将该节点分类为“重用”节点,且所得到的BIFS节点具有图17A中示出的结构。在此情况下,将具有值“1”1704的单个位写入mp4文件。该位指出条件“isReused=真”。该位之后有量“nodeIDref”1708的值。用于表示量“nodeIDref”的值的位数由量“NodeIdBits”的值给出。在此情况下,不允许从属元素或其他属性。
如果已对mp4bifs节点元素的“nodeRef”属性指定了一个值,则将单个“0”位1712和1730写入mp4文件。该位指出条件“isReused=假”。所得到的BIFS SFNode具有图17B(掩蔽节点)1710或图17C(列表节点)1730中示出的结构。本发明的当前实施例通常选取掩蔽节点形式1710。选择掩蔽节点而不是列表节点是不重要的,本发明可同样使用SFNode的列表节点形式1730来实现。
接着,在操作3000,将mp4bifs节点元素的元素名(NodeName)与MPEG-4系统规范中定义的BIFS节点名表中的项进行比较,以确定相应BIFS节点的“节点号”的值。该“节点号”的值、BIFS节点的“节点数据类型”、MPEG-4系统规范中定义的一组表用于确定该BIFS节点的“本地节点类型”的值和用于标识该值的位数。然后,使用指定位数1714将该“本地节点类型”写入mp4文件。
如果一个mp4bifs节点元素从属于替换情景bifsCommand元素,则将相应BIFS节点的“节点数据类型”定义为“SFWorldNode”。否则,BIFS节点的“节点数据类型”由“父节点”的节点号、父节点的相关属性字段的字段索引、和MPEG-4系统规范中定义的一组表所确定。如果一个mp4bifs节点元素从属于另一个mp4bifs节点元素,则“父节点”由其从属于的mp4bifs节点元素所确定。如果一个mp4bifs节点元素从属于一个mp4bifs bifsCommand元素,则“父节点”由其从属于的mp4bifs bifsCommand元素的“NodeId”或“parentId”属性所确定。
接着,在操作3010,检查该mp4bifs节点元素的可选“NodeId”属性的存在。如果已对该节点元素的“NodeId”属性指定了一个值,则将单个“0”位写入mp4文件,以指示条件“isUpdateable=假”1716。否则(即已对该节点元素的NodeId属性指定了一个值),则在操作3010将NodeId属性的值指派给两“nodeID”,将该节点分类为“可更新”节点,并将单个“1”位写入mp4文件1716。这之后有两“nodeID”1718的值。用于表示量“nodeID”的整数值的位数由量“NodeIdBits”的值指出。如果布尔量“bUseNames”的值为“真”,则在操作3016,将该节点元素的“name”属性的值逐个字符地复制到mp4文件,其后有空字节(8位0)1720。
接着,将单个“1”位写入mp4文件,以指示已选择的BIFS节点1722的“掩蔽节点”形式。这之后有掩蔽位序列1726和可能的属性字段值1728。每一个掩蔽位1726对应于由该mp4bifs节点元素的元素名指定的BIFS节点的类型的“无掩蔽”属性字段。该无掩蔽属性字段由MPEG-4系统规范中的表所定义。指定BIFS节点的属性字段的有序集合的每一个成员被认为处于该序列中。对于每一个对应于无掩蔽属性字段中的一个、且在mp4bifs节点元素中已为其指定了一个属性值的属性字段,将具有值“1”的掩蔽位写入mp4文件。其后有相关属性值的二进制表示。用于表示每一个这样的属性值的手段在下面描述。对于每一个对应于无掩蔽属性字段中的一个、且在mp4bifs节点元素中已为其指定了一个值的属性字段,将具有值“0”的掩蔽位写入mp4文件。
除了指定属性字段名和指定属性字段数据类型之外,每一类型的BIFS节点的每一个属性字段具有指定特性,其确定该属性字段是包括指定数据类型的单个值(SFField属性)还是指定数据类型的多个值(MFField属性字段)。每一个MFField属性字段包括0或多个SFField结构,如图17D(1760)和图17E(1780)中所示。在本发明的当前实施例中,通常选择图17D(1760)中所示的列表形式。对于列表形式还是向量形式的选取是不重要的,且本发明可同样使用MFField结构1780的向量形式来实现。
7.2.3.20  SFField结构
每一个SFField数据结构表示指定数据类型。所支持的数据类型包括“简单数据类型”,诸如布尔型、整型、浮点型、字符串型、和颜色,及“复杂数据类型”。复杂数据类型包括“node”和“buffer”数据类型。每一个具有简单数据类型的属性字段的二进制表示由mp4bifs节点元素的同名属性的值所确定。例如,“布尔型”属性字段由单个位表示。“整型”属性字段由32位整数值表示等。用于表示每一类型的属性字段的位数定义于MPEG-4系统规范中。
在“node”类型的属性字段的情况下,该属性字段的值由从属mp4bifs节点元素表示。与该属性字段相关的属性的值包括从属mp4bifs节点元素的元素名列表。通过递归应用上面对于mp4bifs节点元素(SFNode结构)所描述的过程来创建每一个这样的从属节点元素的二进制表示。
在“buffer”类型的属性字段的情况下,从属元素包括mp4bifsbifsCommand元素。与该属性字段相关的属性的值包括从属mp4bifsbifsCommand元素的元素名列表。递归应用上面对于mp4bifscommandFrame元素所描述的相同过程创建每一个这样的从属bifsCommand元素的二进制表示。
7.2.4  处理“moov”元素
创建输出mp4文件2230中的第四步骤包括对包含在mp4file文档2300中的单个moov元素2320进行处理。
使用标准XML手段获得从属于图23A中示出的mp4file文档2300的顶级元素的单个“moov”元素2320。图50中示出的过程用于在输出mp4文件中创建具有原子ID“moov”712和754的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值760。在操作5020,将原子ID“moov”766写入输出mp4文件。将“sizePos”的值指派给量“moovSizePos”。
为mp4bifs“moov”元素定义下面的属性:版本、标志、创建时间、修改时间、时窗、持续时间、和nextTrackID。将为这些属性中的每一个指定的值指派给同名量(“属性值”)。将这些属性值中的每一个直到创建了“mvhd”原子772时才写入输出mp4文件。
图50中示出的过程用于在输出mp4文件中创建具有原子ID“mvhd”的原子772。在操作5000,将输出mp4文件的当前文件指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“mvhd”写入输出mp4文件。将“sizePos”的值指派给量“mvhdSizePos”。
在操作5040,将从“moov”元素的属性获得的下列属性值写入输出mp4文件:
1.版本(8位整数)
2.标志(24位整数)
3.创建时间(32位整数)
4.修改时间(32位整数)
5.时窗(32位整数)
6.持续时间(32位整数)
7.保留(76字节)
8.NextTrackID(32位整数)
“保留”数据值是除了具有值“1”的字节1、4、17和33和具有值“4”的字节48之外的全0。
Mvhd原子772不具有从属原子5050。
在写入了mvhd原子772的属性字段之后,将mp4文件中的mvhd原子772的原子大小的值更新为图50中所指示的那样(操作5060到5095)。
在完成了mvhd原子772之后,将量“trackNum”的值设为0。然后,使用标准XML手段获得从属于“moov”元素2320的每一个mp4file元素。如图23中所示,这些从属元素可包括单个“mp4fiods”元素2330、可选“udta”(用户数据)元素2340、和一个或多个“trak”元素2350。对这些从属元素中的每一个按下面操作5050所述的那样进行处理。
在完成了对所有从属于“moov”元素2320的mp4file元素的处理之后,将量“moovSizePos”的值指派给“sizePos”,并将moov原子754的原子大小760的值更新为图50中所示的那样(操作5060到5095)。
7.24.1  处理mp4fiods元素
使用标准XML手段获得从属于图23A中示出的“moov”元素2320的“mp4fiods”元素2330。图50中示出的过程用于在输出mp4文件中创建具有原子ID“iods”778和800的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值804。在操作5020,将原子ID“iods”808写入输出mp4文件。将“sizePos”的值指派给量“iodsSizePos”。
为“mp4iods”元素定义下面的属性:版本、objectDescriptorID2370、url、includeInlineProfilesFlag、ODProfileLevelIndication、sceneProfileLevelIndication、audioProfileLevelIndication、visualProfileLevelIndication、graphicsProfileLevelIndication。将为这些属性中的每一个指定的值指派给同名量(属性值)。
将量“version”的值作为32位整数812和816写入mp4文件。该值表示iods原子的“版本”812和“标志”816。
图51中示出的过程用于在输出mp4文件中创建Mp4fInitObjectDescr对象结构824。在操作5100,将结构标签“MP4_IOD_Tag”(值=16)828作为8位整数写入输出mp4文件。在操作5110,将输出mp4文件的当前文件指派给量“sizePos”,并将“sizePos”的值指派给量“mp4fiodPos”。在操作5120,将值“1”指派给量“numSizeBytes”。在操作5130,将值零作为初始大小值832写入输出mp4文件。
将量“objectDescriptorID”的值作为10位整数836写入mp4文件。如果已对“url”属性指定了一个值,则将单个“1”写入mp4文件840。否则,将单个“0”位写入mp4文件840。如果量“includeInlineProfilesFlag”的值为真,则将单个“1”位写入mp4文件844。否则,将单个“0”位写入mp4文件844。将值“15”作为4位整数(二进制值=1111)848写入mp4文件。
如果已对“url”属性指定了一个值,则将量“url”的值作为“Pascal串”(用于其后有特定数量的字符字节的字符数的一个字节)写入mp4文件。否则,在操作5140,将量ODProfileLevelIndication 852、sceneProfileLevelIndication 856、audioProfileLevelIndication 960、visualProfileLevelIndication 864、和graphicsProfileLevelIndication868的值其每一个作为8位整数写入mp4文件。
然后,在操作5050,使用标准XML手段获得从属于“mp4fiods”元素的每一个元素。如图23B中所示,“mp4fiods”元素2360被期望具有一个或多个从属“EsIdInc”元素2390,且每一个“EsIdInc”元素2390具有“trackID”属性。
对于每一个从属于“mp4fiods”元素2360的“EsIdInc”元素2390,将包括下列属性的ES_ID_Inc对象结构876添加到输出mp4文件:
1.表示“ES_ID_IncTag”的值(值=14)的一个字节880,
2.表示值“4”(“numBytes”)的一个字节884,和
3.表示作为32位整数(“ES_ID”)的“trackID”属性的值四个字节888。
在操作5050完成对所有从属于“mp4fiods”元素2360的“EsIdInc”元素2390的处理之后,将MP4_IOD大小832的值更新为如图51中所示的那样(操作5160到5195)。然后,将量“iodsSizePos”的值指派给量“sizePos”,并将iods原子800的原子大小804更新为如图50中所示(操作5060到5095)。
7.2.4.2  处理每一个trak元素
使用标准XML手段获得从属于图23A中示出的“moov”元素2320的每一个“trak”元素2350。图50中示出的过程用于在输出mp4文件中创建具有原子ID“trak”790和900的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值903。在操作5020,将原子ID“trak”906写入输出mp4文件。将“sizePos”的值指派给量“trakSizePos”。
为“trak”元素定义下面的属性:版本、标志、创建时间、修改时间、trackID和持续时间。将为这些属性中的每一个指定的值指派给同名量(属性值)。将这些属性值中的每一个直到创建了“tkhd”原子910时才写入输出mp4文件。
图50中示出的过程用于在输出mp4文件中创建具有原子ID“tkhd”910的原子。在操作5000,将输出mp4文件的当前文件指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“tkhd”写入输出mp4文件。将“sizePos”的值指派给量“tkhdSizePos”。
在操作5040,将下列量的值写入mp4文件:
1.版本(8位整数)
2.标志(24位整数)
3.创建时间(32位整数)
4.修改时间(32位整数)
5.TrackID(32位整数)
6.保留1(32位,0),然后将文件位置保存为“durationPos”,
7.持续时间(32位整数)
8.保留2(56字节),
9.保留3(32位,值=0x01400000)
10.保留4(32位,值=0x00f00000)。
“保留2”数据值是除了具有值“1”的字节17和33及具有值“4”的字节48之外的全0。
tkhd原子910不具有从属原子。在操作5040写入了tkhd原子910的属性字段之后,将mp4二进制文件中的tkhd原子910的原子大小的值更新为图50中所指示的那样(操作5060到5195)。
在完成了tkhd原子910之后,使用标准XML手段获得从属于“trak”元素2600的每一个mp4file元素。如图26中所示,这些从属元素可包括单个“mdia”元素2604、可能的“tref”(trak引用)元素2636、和可能的“edts”元素2644。对这些从属元素中的每一个按下面操作5050所述的那样进行处理。
在完成了对所有从属于“trak”元素2600的mp4file元素的处理之后,将量“trakSizePos”的值指派给“sizePos”,并将trak原子900的原子大小903的值更新为图50中所示的那样(操作5060到5095)。将量“trackNum”的值增加1。
7.2.4.3  处理mdia元素
使用标准XML手段获得从属于图26A中示出的“trak”元素2600的单个“mdia”元素2604。图50中示出的过程用于在输出mp4文件中创建具有原子ID“mdia”912的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“mdia”写入输出mp4文件。将“sizePos”的值指派给量“mdiaSizePos”。
为“mdia”元素定义下面的属性:版本、标志、创建时间、修改时间、时窗、持续时间、语言和质量。将为这些属性中的每一个指定的值指派给同名量(属性值)。将这些属性值中的每一个直到创建了“mdhd”原子915时才写入输出mp4文件。
图50中示出的过程用于在输出mp4文件中创建具有原子ID“mdhd”915的原子。在操作5000,将输出mp4文件的当前文件指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5040,将下列量的值写入mp4文件:
1.版本(8位整数)
2.标志(24位整数)
3.创建时间(32位整数)
4.修改时间(32位整数)
5.时窗(32位整数)
6.持续时间(32位整数)
7.语言(16位整数)
8.质量(16位整数)
mdhd原子915不具有从属原子。在操作5040写入了mdhd原子915的属性字段之后,将mp4文件中的mdhd原子915的原子大小的值更新为图50中所指示的那样(操作5060到5095)。
然后,检查媒体数据2220,以确定每一个“样本”(也称作“访问单元”)的大小和持续时间。将在列表StreamTypeForTrack中的量trackNum的值所指定的项的值指派给量streamType。将在列表ObjectTypeForTrack中的量trackNum的值所指定的项的值指派给量objectType。
如果量streamType的值为“4”,则创建三个列表,称作sampleSize、sampleTime和syncSample。每一个列表中的项数由列表MediaSample中的量trackNum的值所指定的项的值所确定。然后,以依赖于媒体的方式检查媒体数据文件中的数据,以确定每一个样本的大小和持续时间。将结果指派给列表sampleSize和sampleTime中的项。将确定为“随机访问样本”的每一个样本的索引指派给列表“syncSample”中的项。
如果量streamType的值为“5”,则创建两个列表,称为sampleSize和sampleTime。每一个列表中的项数由列表MediaSample中量trackNum的值所指定的项的值所确定。然后,以依赖于媒体的方式检查媒体数据文件中的数据,以确定每一个样本的大小和持续时间。将结果指派给列表sampleSize和sampleTime中的项。
在其他情况(流类型不为“4”或“5”)下,整个媒体数据流定义为一个大样本。
然后,使用标准XML手段获得从属于“mdia”元素2604的每一个元素。如图26A中所示,这些从属元素可包括单个“hdlr”(处理器)元素2608、单个“minf”(媒体信息)元素2612、单个“sthl”(样本表)元素2628、和媒体头(“*mhd”)元素2632。对这些从属元素中的每一个按下面操作5050所述的那样进行处理。
在完成了对所有从属于“mdia”元素2604的mp4file元素的处理之后,将量“mdiaSizePos”的值指派给“sizePos”,并将mdia原子912的原子大小的值更新为图50中所示的那样(操作5060到5095)。
7.2.4.4  处理hdlr元素
使用标准XML手段获得从属于图26A中所示的“media”元素2604的单个“hdlr”元素2608。使用图50中所示的过程在输出mp4文件中创建具有原子ID“hdlr”918的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值0写入输出mp4文件,替代原子大小值。在操作5020,将原子ID“hdlr”写入输出mp4文件。
为“hdlr”元素2608定义下列属性:版本、标志、处理器类型和名称。将这些属性中的每一个指定的值指派给同名量。接着在操作5040,将下列量的值写入mp4文件:
1、版本(8位整数),
2、标志(24位整数),
3、处理器类型(32位整数),
4、保留(12位,都为0)
5、名称(以空结尾的字符串)
hdlr元素2608没有从属元素5050。在已写入hdlr原子918的属性字段之后,将hdlr原子918的原子大小值更新为图50中显示的那样(操作5060至5095)。
7.2.4.5  处理minf元素
使用标准XML手段获得从属于“media”元素2604的单个“minf”元素2612,如图26A中所示。使用图50中所示的过程在输出mp4文件中创建具有原子ID“minf”918的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值0写入输出mp4文件,替代原子大小值。在操作5020,将原子ID“minf”写入输出mp4文件。将“sizePos”的值指派给量“minfSizePos”。
“minf”元素2612不具有属性和没有用作minf原子920的属性字段(见操作5030至5040)。
接着,在操作5050,使用标准XML手段获得从属于“minf”元素2612的所有元素。如图26A中所示,这些从属元素可包括“dinf”元素2616、“stbl”元素2628和媒体头(*mhd)元素2632。用于处理“stbl”元素2628和媒体头(*mhd)元素2632的手段在下面描述。
在“dinf”元素2628的情况下,使用图50所示的过程在输出mp4文件中创建具有原子ID“dinf”924的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值0写入输出mp4文件,替代原子大小值。在操作5020,将原子ID“dinf”写入输出mp4文件。将“sizePos”值指派给量“dinfSizePos”。
“dinf”元素2616不具有属性,且没有用作dinf原子924的属性字段(见操作5030)。
接着,在操作5040,使用标准XML手段获得从属于“dinf”元素2616的所有元素。如图26A中所示,这些从属元素可包括“dref”元素2620。
如果“dinf”元素2616具有从属“dref”元素2620,则使用图50中所示的过程在输出mp4文件中创建具有原子ID“dref”927的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010将值0写入输出mp4文件替代原子大小值。在操作5020将原子ID“dref”写入输出mp4文件。将“sizePos”值指派给量“drefSizePos”。“dref”元素不具有属性,且dref原子不具有属性字段。
接着,使用标准XML手段获得从属于“dref”元素2620的所有元素。如图26A中所示,这些从属元素可包括“urlData”元素2624。
如果“dref”元素2620具有从属“urlData”元素2624,则使用图50中所示的过程在输出mp4文件中创建具有原子ID“url”930的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值0写入输出mp4文件,替代原子大小值。在操作5020,将四字符原子ID“url”(u-r-l-space)写入输出mp4文件。
在操作5030,将“urlData”元素的“版本”、“标志”和“位置”属性的值指派给同名量:
在操作5040,将下列值写入输出mp4文件:
1、表示量“version”的值的8位整数;
2、表示量“flags”的值的24位整数;
3、表示量“location”的值的以空结尾的字符串。
“urlData”元素2624没有从属元素(见操作5050)。在将这些属性值写入输出mp4文件后,将“url”原子930的原子大小值更新为图50中显示的(操作5060至5095)。
接着将量“drefSizePos”的值指派给“sizePos”且将dref原子927的原子大小值更新为图50中显示的(操作5060至5095)。
接着将量“dinfSizePos”的值指派给“sizePos”且将dinf原子924的原子大小值更新为图50显示的那样(操作5060至5095)。
在完成对从属于“minf”元素2612的所有mp4文件元素的处理后,将量“minfSizePos”的值指派给量“sizePos”,且将minf原子920的原子大小值更新为图50显示的那样(操作5060至5095)。
7.2.4.6  处理stbl元素
使用标准XML手段获得从属于如图26A中所示的“minf”元素2612的单个“stbl”元素2628。使用图50中所示的过程在输出mp4文件中创建具有原子ID“stbl”933、950的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值0写入输出mp4文件,替代原子大小954的值。在操作5020,将原子ID“stbl”957写入输出mp4文件。将“sizePos”值指派给量“stblSizePos”。
“stbl”元素2628不具有属性,且stbl原子不具有属性字段(见操作5030至5040)。
接着,使用标准XML手段获得从属于“stbl”元素2652的所有元素。如图26B中所示,这些从属元素可包括“stsc”元素2656、“stts”元素2660、“stco”元素2664、“sts在”元素2668、“stss”元素2672和“stsc”元素2676。这些元素的每一个除了对于其单个实例是可选的“stss”元素2672以外的都是所需的。以下在操作5050描述用于处理这些元素中的每一个的手段。
在完成对从属于“stbl”元素2652的所有mp4文件元素的处理后,将量“stblSizePos”的值指派给“sizePos”,且将stbl原子950的原子大小954的值更新为图50显示的那样(操作5060至5095)。
7.2.4.7  处理stsc元素
使用标准XML手段获得从属于如图26B中所示的“stbl”元素2652的单个“stcs”元素2656。使用图50中所示的过程在输出mp4文件中创建具有原子ID“stcs”960的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值0写入输出mp4文件,替代原子大小值。在操作5020,将原子ID“stcs”写入输出mp4文件。
“stcs”元素2656具有“版本”和“标志”属性。在操作5030,将这些属性中的每一个值指派给同名量。接着在操作5040,将量“version”的值作为8位整数写入mp4文件及将量“version”的值作为24位整数写入mp4文件。
将mp4文件的文件位置指派给量“numEntriesPos”,将32位0值写入mp4文件,且将0值指派给量“numEntries”。
接着在操作5050,使用标准XML手段获得从属于“stcs”元素2656的所有元素。这些从属元素将由一个或多个“样本-块”元素组成。每个“样本-块”元素具有属性“firstChunk”、“numsample”和“sampleDesc”。
对于从属于“stsc”元素2656的每个“样本-块”元素执行下列操作:
(1)将“firstChunk”属性的值作为32位整数写入mp4文件。
(2)将“numsample”属性的值作为32位整数写入mp4文件。
(3)将“sampleDesc”属性的值作为32位整数写入mp4文件。
(4)量“numEntries”的值增加1。
在完成对从属于“stcs”元素2656的所有元素的处理后,在操作5060,将mp4文件的文件位置指派给量“endPos”。将mp4文件的文件位置改变为由量“numEntriesPos”指定的值,且将量“numEntries”的值作为32位整数写入mp4文件。接着将stsc原子960的原子大小值更新为图50中显示的那样(操作5070至5095)。
7.2.4.8  处理stsc元素
使用标准XML手段获得从属于如图26B中所示的“stbl”元素2652的单个“stts”元素2660。使用图50中所示的过程在输出mp4文件中创建具有原子ID“stts”963的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值0写入输出mp4文件,替代原子大小值。在操作5020,将原子ID“stts”写入输出mp4文件。
“stts”元素2656具有“版本”和“标志”属性。在操作5030,将这些属性中的每一个值指派给同名量。接着在操作5040,将量“version”的值作为8位整数写入mp4文件及将量“version”的值作为24位整数写入mp4文件。
将mp4文件的文件位置指派给量“numEntriesPos”,将32位0值写入mp4文件,且将0值指派给量“numEntries”。
将列表StreamTypeForTrack中项“trackNum”的值指派给量“streamType”。将列表ObjectTypeForTrack中项“trackNum”的值指派给量“objectType”。量“trackNum”的值作为“处理trak元素”部分过程被确定。
如果量“streamType”的值是“1”,将在odsm数据被输入到odsm的mdat原子中时创建的odsm样本时间值(OdsmSampleTime)表用于确定每一个odsm样本的持续时间值。每个odsm样本的持续时间由该列表中连续项值之间的差所确定。这些值在跟踪时间单元中指定。
如果量“streamType”的值是“3”,将在sdsm数据被输入到sdsm的mdat原子中时创建的sdsm样本时间值(SdsmSampleTime)表用于确定每一个sdsm样本的持续时间值。每个sdsm样本的持续时间由该列表中连续项值之间的差所确定。结果持续时间值在短时间内乘以包含该“stts”元素的“track”元素的“timescale”属性值以在跟踪时间单元中确定持续时间值。
如果量“streamType”的值是“4”或量“streamType”的值是“5”且量“objectType”的值是“64”或“107”,将在相应媒体数据被输入到mdat原子中时创建的媒体样本时间值列表(SampleTime)用于确定每一个媒体样本的持续时间值。每个媒体样本的持续时间由该列表中相应项而确定。这些值在根据时间单元中指定。
前述三种中的每种情况,将具有相同持续时间的连续样本数目指派到量“numSample”。每个时刻样本的持续时间值不同于前述样本持续时间值,将“numSample”的值作为32位整数写入mp4文件,前述样本持续时间值作为32位整数写入mp4文件,将值1指派给“numSample”值,且量“numEntries”的值增加1。
另外,使用标准XML手段获得从属于如图26B中所示的“stts”元素2660的所有元素。这些从属元素将包括一个或多个“timeToSample”元素。每个“timeToSample”元素具有属性“numSample”和“duration”。
为从属于“stts”元素2660的每个“timeToSample”元素重复下列操作:
(1)将“numSample”属性的值作为32位整数写入mp4文件。
(2)将“duration”属性的值作为32位整数写入mp4文件。
(3)将量“numEntries”的值增加1。
在完成对从属于“stts”元素2660所有元素的处理后,在操作5060将mp4文件的文件位置指派给量“endPos”。将mp4文件的文件位置改变为由量“numEntriesPos”指定的值,且将量“numEntries”的值作为32位整数写入mp4文件。接着将stts原子963的原子大小值更新为图50中显示的那样(操作5070至5095)。
7.2.4.9  处理stco元素
使用标准XML手段获得从属于如图26B中所示的“stbl”元素2652的单个“stco”元素2664。使用图50中所示的过程在输出mp4文件中创建具有原子ID“stco”966的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值0写入输出mp4文件替代原子大小值。在操作5020将原子ID“stco”写入输出mp4文件。
“stco”元素2664具有“版本”和“标志”属性。在操作5030,将这些属性中的每一个值指派给同名量。接着在操作5040,将量“version”的值作为8位整数写入mp4文件及将量“version”的值作为24位整数写入mp4文件。
将mp4文件的文件位置指派给量“numEntriesPos”,将32位0值写入mp4文件,且将0值指派给量“numEntries”。
在操作5050,使用标准XML手段获得从属于“stco”元素2664的所有元素。这些从属元素将由一个或多个“chunkOffset”元素。将下列两个属性为“chunkOffset”元素:“mdatId”和“mdatOffset”。
为从属于“stco”元素2664的每个“chunkOffset”元素重复下列操作:
(1)将定义为“mdatId”和“mdatOffset”属性的值指派给同名量。
(2)通过下列三个条件确定量“chunk”的值:
a、列表mdatIdForChunk中相应项匹配量mdatId的值,
b、列表mdatIdForChunk中相应项匹配量trackId的值,及
c、“numEntries”的值匹配满足前述两条件的多个项。
(3)将列表offsetForChunk中项“chunk”的值指派到量“chunkOffset”。
(4)将量“chunkOffset”的值作为32位整数写入mp4文件。
(5)项“numEntries”的值增加1。
在完成对从属于“stco”元素2664所有元素的处理后,在操作5060将mp4文件的文件位置指派给量“endPos”。将mp4文件的文件位置改变为由量“numEntriesPos”指定的值,且将量“numEntries”的值作为32位整数写入mp4文件。接着将stco原子966的原子大小值更新为图50中显示的那样(操作5070至5095)。
7.2.4.10  处理stsz元素
使用标准XML手段获得从属于如图26B中所示的“stbl”元素2652的单个“stsz”元素2668。使用图50中所示的过程在输出mp4文件中创建具有原子ID“stsz”970的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值0写入输出mp4文件替代原子大小值。在操作5020,将原子ID“stsz”写入输出mp4文件。
“stsz”元素2668具有“版本”、“标志”、“sizeForAll”和“numSample”属性。在操作5030将这些属性中的每一个值指派给同名量。接着在操作5040,将量“version”的值作为8位整数写入mp4文件及将量“version”的值作为24位整数写入mp4文件。
将列表StreamTypeForTrack中项“TrackNum”的值指派给量“streamType”。将列表ObjectTypeForTrack中项“TrackNum”的值指派给量“objectType”。量“trackNum”的值作为“处理trak元素”的部分过程被确定。
如果量“streamType”的值是“1”且量“numOdsmSample”的值是“1”,那么将值“1”指派给量“numSample”且将列表OdsmSampleSize中的第一项的值指派给量“sizeForAll”。
如果量“streamType”的值是“3”且列表SdsmSampleSize中的第二项是否定的,那么将值“1”指派给量“numSample”且将列表SdsmSampleSize中的第一项的值指派给量“sizeForAll”。列表SdsmSampleSize中的否定项显示该列表结束。
如果量“streamType”的值是“5”量“objectType”的值是“193”且量“sizeForAll”的值小于1,那么将值“24”指派到量“numSample”且将列表SdsmSampleSize中的第一项的值指派给量“sizeForAll”,对象类型“193”定义的音频流中每个样本的大小是24位。
将mp4文件的文件位置指派给量“sizeForAllPos”,且将量“sizeForAllPos”的值作为32位整数写入mp4文件。将mp4文件的文件位置指派到量“numEntriesPos”,且将量“numSample”的值作为32位整数写入mp4文件。将值0指派给量“numEntries”。
“stsz”元素2668可具有从属“Samplesize”元素,但忽视这些,因为包含进这些元素的数据值不必与当前媒体数据流一致。替代地,当已(为odsm和sdsm)创建了流时,或当创建mdia原子(音频和视频流)时,已重新计算了所有的样本大小值。已将结果样本大小值输入到列表OdsmSampleSize、SdsmSampleSize或SampleSize中的一个。如果媒体数据具有统一的样本大小,由量“sizeForAll”指定每个样本的值。
如果量“streamtype”的值是“1”(odsm)且量“numOdsmSample”的值大于“1”,则将量“numOdsmSample”的值指派到量“numEntries”。量“numOdsmSample”的值显示了列表OdsmSampleSize中项的数量。将列表OdsmSampleSize中的每个项作为32位整数写入mp4文件。如果量“numOdsmSample”的值和量“numSample”的值不同,则将mp4文件的文件位置指派到量“mp4FilePos”,将文件位置改变为由量“numEntriesPos”指定的值,将量“numOdsmSample”的值作为32位整数写入mp4文件,且将文件位置恢复为量“mp4FilePos”指定的值。
如果量“streamtype”的值是“3”(sdsm)且列表SdsmSampleSize中第二项不为负,则将列表SdsmSampleSize中每个项的值作为32位整数写入mp4文件,直到找到负项。对于列表SdsmSampleSize中每个非负项量“numEntries”的值增加1。该列表中最后的负值不写入mp4文件。如果量“numEntries”的值与量“numSample”不同,将mp4文件的文件位置指派到量mp4FilePos,将文件位置改变为量“numEntriesPos”指定的值,将量“numEntries”的值作为32位整数写入mp4文件,且将文件位置恢复为量“mp4FilePos”指定的值。
如果量“streamtype”的值不是“1”和“3”,则量“sizeForAll”的值不为正,且量“numSample”的值为负,量“numMediaSamples”的值被指派到量“numSamples”。这种情况包括大多数视频媒体数据和具有变化样本尺寸的音频媒体数据。量“numMediaSamples”指定了创建的列表“sampleSize”中的项数,然后创建mdia原子。在列表sampleSize中的每一项的值被作为32位整数写到mp4文件中。mp4文件的文件位置被指派到量“mp4FilePos”文件位置被改变到量“numEntriesPos”指定的值,量“numMediaSamples”的值被作为32位整数写入到mp4文件,且文件位置被恢复为量“mp4FilePos”指定的值。
如果量“streamType”的值不是“1”,也不是“3”,则量“sizeForAll”的值为负,且量“numSamples”的值为0,通过将该track的媒体数据的大小被量“sizeForAll”的值除,而确定量“numSamples”的值。这种情况包括某些具有均匀样本大小的音频媒体数据。将Mp4文件的文件位置指派给量“mp4FilePos”,将文件位置改为由量“numEntriesPos”指定的值,将量“numSamples”的值作为32位整数写入mp4文件,并将文件位置恢复到由量“mp4FilePos”所指定的值。
如果量“streamType”的值不是“1”,也不是“3”,则量“sizeForAll”的值为0,且量“numSamples”的值为正,通过将该track的媒体数据的大小被量“numSamples”的值除,而确定量“sizeForAll”的值。这种情况包括某一具有均匀样本大小和已知样本计数(通常为“1”)的媒体数据,诸如表示单个图像的媒体数据。将Mp4文件的文件位置指派给量“mp4FilePos”,将文件位置改为由量“sizeForAllPos”指定的值,将量“sizeForAll”的值作为32位整数写入mp4文件,并将文件位置恢复到由量“mp4FilePos”所指定的值。
在所有的情况下,通过将stsz原子970的原子大小的值更新为图50中所示出的那样而完成对“stsz”元素2668的处理(操作5060到5095)。
7.2.4.11  处理stss元素
“stss”元素2672(如果存在的话)包含“同步样本表”。该表对于某一类型的媒体数据流(诸如MPEG-4视频流)是所需的。“stbl”元素2652仅当需要时才包含从属“stss”元素2672。使用标准XML手段确定从属“stss”元素2672是否存在于“stbl”元素2652内。
如果从属“stss”元素2672存在,使用标准XML手段获得该元素。图50中示出的过程用于在输出mp4文件中创建具有原子ID“stss”974的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“stss”写入输出mp4文件。
“stss”元素2672具有属性“版本”、“标志”和“numEntries”。在操作5030,将这些属性的每一个的值指派给同名量。在操作5040,将量“version”的值作为8位整数写入mp4文件,将量“标志”的值作为24位整数写入mp4文件。
将mp4文件的文件位置指派给量“numEntriesPos”,并将32位0值写入mp4文件。
然后,使用图54中示出的手段在输出mp4文件中构建同步样本表。根据该过程,在操作5400,将列表“MediaSample”中的项“trakNum”指派给量“iMediaSamples”的值。该量指示表示与当前trak原子790和900相关的媒体数据流的样本(或“访问单元”)数。该量的值还提供列表“同步样本”中的项数的上界。列表“iSynSample”包括单调递增的样本索引值集合,其中媒体数据流中的第一个样本由样本索引值“1”表示。如果该列表中的项数小于iMediaSamples的值,则该流中的最后一个样本索引值之后有具有值0的项。
在操作5410,将值0指派给量“iSyncSample”和“numSyncSamples”的值。
在操作5420,将numSyncSample的值与iMediaSample的值进行比较。
如果量“numSyncSamples”的值小于量“iMediaSample”的值,则在操作5430该过程完成。
否则,即量“numSyncSamples”的值小于量“iMediaSample”的值,则在操作5440将量“iSyncSample”的值指派给量“previousSample”的值。在操作5450,将项“numSyncSamples”的值指派给量“iSyncSample”,在操作5460,将所得到的量“iSyncSample”的值与量“iSyncSample”的值进行比较。
如果量“iSyncSample”的值不大于量“iSyncSample”的值,则该过程在操作5470完成。否则,即量“iSyncSample”的值大于量“iSyncSample”的值,则在操作5480将量“iSyncSample”的值作为32位整数写入输出mp4文件。在操作5490,将量“numSyncSamples”的值增加1,并重复操作5420的量“numSyncSamples”的值与量“iMediaSamples”的值的比较。
在完成图54中所示的过程之后,在操作5060,将mp4文件的文件位置指派给量“endPos”。将mp4文件的文件位置改为量“numEntriesPos”指定的值,并将量“numSyncSamples”的值作为32位整数写入mp4文件。然后,将stss原子974的原子大小的值更新为图50中所示的那样(操作5070到5095)。
7.2.4.12  处理stsd元素
使用标准XML手段获得从属于图26B中所示的“stbl”2652元素的单个“stsd”元素2676。图50中示出的过程用于在输出mp4文件中创建具有原子ID“stsd”978的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“stsd”写入输出mp4文件。
“stsd”元素2676具有属性“版本”和“标志”。在操作5030,将这些属性的每一个的值指派给同名量。然后,在操作5040,将量“version”的值作为8位整数写mp4文件,并将量“flags”的值作为24位整数写mp4文件。
将mp4文件的文件位置指派给量“numEntriesPos”,将32位0值写入mp4文件,并将值0指派给量“numEntries”。将量“sizePos”的值指派给量“stsdSizePos”。
然后,在操作5050,使用标准XML手段获得从属于“stsd”元素2676的所有元素。这种从属元素的集合被期望包括类型“mp4s”、“mp4a”或“mp4v”的单个元素。这些元素类型在图26B中统一描述为“mp4*”2680。这些从属元素的每一个表示“样本描述表”中项,并将每一个这样的从属元素的量“numEntries”的值增加1。
这些类型的元素中的每一个(“mp4s”、“mp4a”或“mp4v”)具有称作“dataRefIndex”的单个属性。
对于每一个类型“mp4s”类型的元素,图50中示出的过程用于在输出mp4文件中创建具有原子ID“mp4s”982的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”,并将量“sizePos”的值指派给量“mp4xSizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“mp4s”写入输出mp4文件。
向量“dataRefIndex”指派值0。如果对于mp4s元素的“dataRefIndex”属性指定了一个值,则在操作5030将该属性的值指派给量“dataRefIndex”。然后,在操作5040,将下列值写mp4文件:
1.具有值0的6字节
2.表示量“dataRefIndex”的值的16位整数
对于每一个“mp4a”类型的从属元素,使用图50中示出的过程在输出mp4文件中创建具有原子ID“mp4a”982的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”,并将量“sizePos”的值指派给量“mp4xSizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“mp4a”写入输出mp4文件。
向量“dataRefIndex”指派值0。如果对mp4a元素的“dataRefIndex”属性指定了一个值,则在操作5030,将该属性的值指派给量“dataRefIndex”。然后,在操作5040,将下列值写mp4文件:
1.具有值0的6字节
2.表示量“dataRefIndex”的值的16位整数
3.具有值0的两个32位整数
4.表示值“2”的16位整数
5.表示值“16”的16位整数
6.具有值0的32位整数
7.表示从“mdia”元素2604的相应属性获得的量“timeScale”的值的16位整数
8.具有值0的16位整数
对于每一个“mp4v”类型的从属元素,使用图50中示出的过程在输出mp4文件中创建具有原子ID“mp4v”982的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”,并将量“sizePos”的值指派给量“mp4xSizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“mp4v”写入输出mp4文件。
向量“dataRefIndex”指派值0。如果对mp4v元素的“dataRefIndex”属性指定了一个值,则在操作5030,将该属性的值指派给量“dataRefIndex”。然后,在操作5040,将下列值写mp4文件:
1.具有值0的6字节
2.表示量“dataRefIndex”的值的16位整数
3.具有值0的两个32位整数
4.具有值“320”的16位整数
5.具有值“240”的16位整数
6.具有值“72”的16位整数
7.具有值0的16位整数
8.具有值“72”的16整数
9.具有值0的16位整数
10.具有值0的32位整数
11.具有值“1”的16整数
12.具有值0的32字节
13.具有值“24”的16位整数
14.具有值“-1”的16位整数
每一个“mp4s”、“mp4a”或“mp4v”类型的元素2680被期望具有类型“esds”的单个从属元素2684,如图26B所示。对于每一个“esds”类型的从属元素,使用图50中示出的过程在输出mp4文件中创建具有原子ID“esds”986的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”,并将量“sizePos”的值指派给量“mp4xSizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“esds”写入输出mp4文件。
“stsd”类型的元素具有属性“版本”和“标志”。在操作5030,将这些属性的每一个的值指派给同名量。然后,在操作5040,将量“version”的值作为8位整数写入mp4文件,并将量“flags”的值作为24位整数写入mp4文件。
每一个“esds”类型的元素被期望具有类型“ES_Descr”类型的单个从属元素2688,如图26B中所示。使用下面在操作5050描述的手段对该从属“ES_Descr”元素进行处理。
在完成对从属于“esds”元素2684的“ES_Descr”元素2688的处理之后,在操作5060,将mp4文件的文件位置指派给量“endPos”。将量“esdsSizePos”的值指派给量“sizePos”,并将esds原子986的原子大小的值更新为图50所示的那样(操作5070到5095)。
将量“mp4xSizePos”的值指派给量“sizePos”,并将“mp4s”、“mp4a”或“mp4v”的原子大小的值更新为图50中所示的那样(操作5070到5095)。
将mp4文件的文件位置改为量“numEntriesPos”所指定的值,并将量“numEntries”的值作为32位整数写入mp4文件。将量“stsdSizePos”的值指派给“sizePos”。然后,将sdsm原子978的原子大小的值更新为图50中所示的那样(操作5070到5095)。
7.2.4.13  处理ES Descr元素
对于从属于“esds”元素2684的每一个“ES_Descr”元素2688和2700,图51中示出的过程用于在输出mp4文件中创建ES_Descr对象结构900和1000。在操作5100,将结构标签“ES_DescrTag”(值=3)1004作为8位整数写入输出mp4文件中。在操作5110,将输出mp4文件的当前文件位置指派给量“sizePos”,并将“sizePos”的值指派给量“filePos1”。在操作5120,向量“numSizeBytes”指派值“1”。在操作5130,将值0作为初步大小值1008写入输出mp4文件。
为“ES_Descr”元素定义下列属性:“ES_ID”和“优先级”。向称作“ES_ID”和“优先级”的量指派值0。如果对于这两个属性的任一个指定了值,则在操作5135,将所指定的值指派给同名量。
在操作5140,将下述值写入mp4文件:
1.表示量“ES_ID”的值的16位整数
2.具有值0的三位整数
3.表示量“优先级”的值的5位整数
然后,使用标准XML手段获得从属于“ES_Descr”元素2688和2700的每一个XML元素。这些从属元素被期望包括具有元素名“DecoderConfigDescriptor”的一个元素2710、和具有元素名“SLConfigDescriptor”的一个元素2760,如图27中所示的那样。
对于从属于“ES_Descr”元素2700的每一个“DecoderConfigDescriptor”元素2710,图51中示出的过程用于在输出mp4文件中创建DecoderConfigDescriptor对象结构1024和1032。在操作5100,将结构标签“DecoderConfigDescrTag”(值=4)1036作为8位整数写入输出mp4文件中。在操作5110,将输出mp4文件的当前文件位置指派给量“sizePos”,并将“sizePos”的值指派给量“filePos2”。在操作5120,向量“numSizeBytes”指派值“1”。在操作5130,将值0作为初步大小值1040写入输出mp4文件。
为“DecoderConfigDescriptor”元素2710定义下列属性:“对象类型”、“流类型”、“upStream”、“maxBitrate”和“avgBitrate”。如果对这些属性中的任何一个指定了值,则在操作5135,将每一个指定的值指派给同名量。
量“bufferSize”的值由相应媒体数据流中最大样本的大小确定。如果量“streamType”的值为“1”,则将列表“OdsmSampleSize”中的最大项的值指派给量“bufferSize”。如果量“streamType”的值为“3”,则将列表“SdsmSampleSize”中的最大项的值指派给量“bufferSize”。如果量“streamType”的值为“4”且量“objectType”的值为“32”、或量“streamType”的值为“5”且量“objectType”的值为“64”、或量“streamType”的值为“5”且量“objectType”的值为“107”,则将列表“sampleSize”中的最大项的值指派给量“bufferSize”。如果“streamType”的值为“4”且量“objectType”的值为“193”,则向量“bufferSize”指派值“2400”。否则,媒体数据的值由列表mediaDataSize中的项的和所确定,其中列表trackIdChunk中的相应项与当前track的量“trackId”的值匹配。
在操作5140,将下列值写入mp4文件:
1.表示量“objectType”1044的整数值的一字节
2.表示量“streamType”1048的整数值的6位
3.表示量“upStream”1052(如果真则为“1”,否则为“0”)的布尔值的一位
4.具有值“1”的一位(作为“保留”)1056
5.表示量“bufferSize”1060的整数值的三字节(作为“bufferSizeDB”)
6.表示量“maxBitrate”1064的值32位整数
7.表示量“avgBitrate”1068的值的32位整数
然后,使用标准XML手段获得从属于“DecoderConfigDescriptor”元素2710的任何元素。这可包括下列类型元素中的一个:“BIFS_DecoderConfig”2720、“JPEG_DecoderConfig”2730、“VisualConfig”2740、或“AudioConfig”2750,如图27所示的那样。如果发现了这些从属元素的任何一个,则使用图51中所示的过程在输出mp4文件中创建DecoderSpecificInfo对象结构1072和1076。在操作5100,将结构标签“DecoderSpecificInfoTag”(值=5)1080作为8位整数写入输出mp4文件中。在操作5110,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5120,向量“numSizeBytes”指派值“1”。在操作5130,将值0作为初步大小值1084写入输出mp4文件。
每一类型的解码器详细信息元素的属性在下面描述。在这些属性已在操作5150处理之后,将DecoderSpecificInfo对象结构1076的大小值(numBytes)1084更新为图51中所示的那样(操作5160到5195)。将量“filePos2”的值指派给量“sizePos”,并将DecoderConfigDescriptor对象结构1032的大小值(numBytes)1040更新为图51中所示的那样(操作5160到5195)。
对于从属于“ES_Descr”元素2700的每一个“SLConfigDescriptor”元素2760,图51中示出的过程用于在输出mp4文件中创建SLConfigDescriptor对象结构1028和1088。为“SLConfigDescriptor”元素2760定义下列属性:“predefined”。如果对属性“predefined”指定了值,则将该属性的值指派给“predefined”量。否则,向量“predefined”指派值“2”。
将下列值写入mp4文件:
1.具有“SLConfigDescrTag”的值(值=6)的一字节
2.具有值“1”(numBytes)的一字节1094
3.表示量“predefined”的值的一字节1098
在对这些从属元素中的每一个进行处理之后,将量“filePos1”的值指派给量“sizePos”,并将ES_Descr结构1000的大小值(numBytes)1008更新为图51中所示的那样(操作5160到5195)。
7.2.4.14  处理BIFS DecoderConfig元素
“BIFS_DecoderConfig”元素2720可具有“版本1”或“版本2”属性,这取决于量“objectType”的值。如果量“objectType”的值不为“2”,则为“BIFS_DecoderConfig”元素(版本1)定义下列属性:“nodeIdBits”、“routeIdBits”、“pixelMrtric”、“pixelWidth”和“pixelHeight”。
在操作5135,将为这些属性指定的值指派给同名量。然后,在操作5140,将下列值写入mp4文件:
1.表示量“nodeIdBits”的整数值的5位
2.表示量“routeIdBits”的整数值的5位
3.具有值“1”的1位
4.由量“pixelMetric”的布尔值(1为“真”,否则为“0”)所确定的1位
5.具有值“1”的1位
6.具有量“pixelWidth”的整数值的16位整数
7.具有量“pixelHeight”的整数值的16位整数
8.具有值0的3位
如果量“objectType”的值为“2”,则为“BIFS_DecoderConfig”元素(版本2)定义下列属性:“nodeIdBits”、“routeIdBits”、“protoIdBits”、“use3DMeshCoding”、“usePredictiveMFField”、“pixelMetric”、“pixelWidth”和“pixelHeight”。
在操作5135,将为这些属性中的每一个指定的值指派给同名量。然后,在操作5140,将下列值写入mp4文件:
1.由量“use3DMeshCoding”的布尔值(1为“真”,否则为“0”)确定的1位
2.由量“usePredictiveMFField”的布尔值(1为“真”,否则为“0”)确定的1位
3.表示量“nodeIdBits”的整数值的5位
4.表示量“routeIdBits”的整数值的5位
5.表示量“protoIdBits”的整数值的5位
6.具有值“1”的1位
7.由量“pixelMetric”的布尔值(1为“真”,否则为“0”)确定的1位
8.具有值“1”的1位
9.具有量“pixelWidth”的整数值的16位
10.具有量“pixelHeight”的整数值的16位
11.具有值0的4位
7.2.4.15  处理JPEG DecoderConfig元素
为“JPEG_DecoderConfig”元素定义下列属性:“headerLength”、“Xdensity”和“Ydensity”。
向同名量指派缺省值0、1和1。在操作5135,将为这些属性指定的值指派给同名量。
根据与该track相关的媒体数据的内容,向量“numComponents”指派值“1”或“3”。如果相关媒体数据表示灰度级图像,则在操作5135,向量“numComponents”指派值“1”,否则,向量“numComponents”指派值“3”。
然后,在操作5140,将下列值写入mp4文件:
1.表示量“headerLength”的值的16位整数
2.表示量“Xdensity”的值的16位整数
3.表示量“Ydensity”的值的16位整数
4.表示量“numComponents”的整数值的1字节
7.2.4.16  处理VisualConfig元素
为“VisualConfig”元素定义下列属性:“profile_and_level_indication”。
向同名量指派缺省值1。如果为该属性指定了一个值,在操作5135,将指定的值指派给同名量。
对特定于该类型的解码器的信息的进一步处理依赖于当该track的mdat原子创建时从相应媒体数据中提取出的“mediaHeader”数据。
如果媒体头数据对该track可用,则测试该媒体数据“可视对象序列起始码”(0x000001b0)和“可视对象序列结束码”(0x000001b1)的存在。
如果媒体头数据对于该track可用,但该媒体数据不包括“可视对象序列起始码”,或如果没有媒体头数据对于该track可用,则在操作5140,将下列值写入mp4文件:
1.具有值0x000001b0(可视对象序列起始码)的32位整数
2.表示量“profile_and_level_indication”的值的一字节
3.表示值0x000001bs(可视对象起始码)的32位整数
4.具有值“9”的一字节
如果没有媒体头数据对于该track可用,则在操作5140将下列值写入mp4文件:
5.具有值0x00000100(可视对象起始码)的32位整数
如果媒体头数据对于该track可用,则该媒体头数据的最后四字节不是“可视对象序列结束码”,则在操作5140将该媒体头数据的剩余部分复制到mp4文件中。
如果媒体头数据对于该track可用,但该媒体头数据的最后四字节包括“可视对象序列结束码”,则在操作5140,将该媒体头数据的剩余部分除了最后四字节之外复制到mp4文件。
7.2.4.17  处理AudioConfig元素
在操作5135,不为“AudioConfig”元素指定属性。从该track的媒体数据中提取出的媒体头数据中提取出要写入mp4文件的所有数据值。
将媒体头数据的第一字节指派给量“audioObjectType”。将媒体头数据的第二个字节指派给量“sampleRateIndex”。将该媒体头数据的第三字节指派给量“channelConfig”。然后,在操作5140,将下列值写入mp4文件:
1.表示量“audioObjectType”的整数值的5位
2.表示量“sampleRateIndex”的整数值的4位
3.表示量“channelConfig”的整数值的4位
4.具有值0的3位
如果量“channelConfig”的值为0,则将“程序配置元素”(PCE)添加到解码器详细信息中。PCE的结构定义于对于编码音频数据的MPEG-4规范中。创建PCE所需的数据包含在媒体头数据数组中。该数据当相应mdat原子被创建时存储于该数据中。
7.2.4.18  处理媒体头元素
使用标准XML手段获得从属于“mdia”元素2604的单个媒体头元素(“*mhd”)2632,如图26A中所示。媒体头元素2632可以是“nmhd”元素(用于sdsm或odsm)、“smhd”元素(用于音频流)、或“vmhd”元素(用于视频流)。
如果媒体头元素2632为“nmhd”元素,则将图50中示出的过程用于在输出mp4文件中创建具有原子ID“nmhd”936的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“nmhd”写入输出mp4文件。
“nmhd”元素具有属性“version”和“flags”。在操作5030,这些属性中每一个属性值被指派给同名量。
然后,在操作5040,将下列量的值写入输出mp4文件:
1.表示量“version”的值的8位整数
2.表示量“flags”的值的24位整数
如果媒体头元素2632为“smhd”元素,则将图50中示出的过程用于在输出mp4文件中创建具有原子ID“smhd”936的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“smhd”写入输出mp4文件。
“smhd”元素具有属性“version”、“标志”和“balance”。在操作5030,将这些属性的每一个的值指派给同名量。
在操作5040,将下列量的值写入输出mp4文件:
1.表示量“version”的值的8位整数
2.表示量“flags”的值的24位整数
3.表示量“balance”的值的16位整数
4.具有值0的16位整数
如果媒体头元素2632为“vmhd”元素,则将图50中示出的过程用于在输出mp4文件中创建具有原子ID“vmhd”936的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“vmhd”写入输出mp4文件。
“vmhd”元素具有属性“版本”、“标志”、“transferMode”、“opColorRed”、“opColorGreen”、和“opColorBlue”。在操作5030,将这些属性的每一个的值指派给同名量。
在操作5040,将下列量的值写入输出mp文件:
1.表示量“version”的值的8位整数
2.表示量“flags”的值的24位整数
3.表示量“transferMode”的值的16位整数
4.表示量“opColorRed”的值的16位整数
5.表示量“opColorGreen”的值的16位整数
6.表示量“opColorBlue”的值的16位整数
在操作5050,媒体头元素2632不具有从属元素。在写入了媒体头原子的属性值之后,将该媒体头原子936的原子大小的值更新为图50中所示的那样(操作5060到5095)。
7.2.4.19  处理tref元素
使用标准XML手段获得可能从属于“trak”元素2600的单个“tref”元素2636,如图26A所示。将图50中示出的过程用于在输出mp4文件中创建具有原子ID“tref”940的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“tref”写入输出mp4文件。将量“sizePos”的值指派给量“trefSizePos”。
在操作5030和5040,“tref”元素不具有属性。
使用标准XML手段获得从属于“tref”元素2636的每一个元素。如图26A中所示,这些可以包括“mpod”元素2640。其他类型的包括“dpnd”元素和/或“sync”元素的元素可能还作为“tref”元素2636的从属元素。
对于每一个从属于“tref”元素2636的“mpod”、“dpnd”或“sync”元素2640,将图50中示出的过程用于在输出mp4文件中创建具有同值原子ID942的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“mpod”、“dpnd”或“sync”写入输出mp4文件。
每一个“mpod”、“dpnd”或“sync”元素具有一个属性,称作“trackID”。在操作5030,该属性包括trackID值的列表。在操作5040,将该列表中的每一个trackID值作为32位整数写入输出mp4文件。在“mpod”元素的情况下,还将每一个trackID值指派给列表“TrackIdForOdId”中的一项。
在操作5050,“mpod”、“dpnd”或“sync”元素不具有从属元素。在对该元素的trackID属性进行了处理之后,将mp4文件中相应原子942的原子大小的值更新为图50中所示的那样(操作5060到5095)。
在完成对从属于“tref”元素2036的所有元素2640的处理之后,将量“trefSizePos”的值指派给“sizePos”,并将tref原子940的原子大小的值更新为图50中所示的那样(操作5060到5095)。
7.2.4.20  处理edts元素
使用标准XML手段获得可能从属于“trak”元素2600的单个“edts”元素2644,如图26A所示。将图50中示出的过程用于在输出mp4文件中创建具有原子ID“edts”945的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“edts”写入输出mp4文件。将量“sizePos”的值指派给量“edtsSizePos”。
在操作5030和5040,“edts”元素不具有属性。
使用标准XML手段获得从属于“edts”元素2644的单个“elst”元素2648,如图26A中所示。将图50中示出的过程用于在输出mp4文件中创建具有原子ID“elst”948的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“elst”写入输出mp4文件。
“elst”元素具有属性“版本”和“标志”。在操作5030,将这些属性的中的每一个的值指派给同名量。
在操作5040,将下列量的值写入输出mp4文件:
1.表示量“version”的值的8位整数,及
2.表示量“flags”的值的24位整数。
使用标准XML手段获得从属于“elst”元素2648的每一个元素。从属于“elst”元素2648的元素集合被期望包括两个“segment”元素。每一个“segment”元素具有三个属性“duration”、“startTime”和“rate”。
对从属于“elst”元素2648的每个片段元素执行下列操作:
1.将每个属性“duration”、“startTime”和“rate”的值指派给同名量,
2.将量“duration”的值作为32位整数写入输出mp4文件,
3.将量“startTime”的值作为32位整数写入输出mp4文件,及
4.量“rate”的浮点值乘以256*256,转换为整数,且将该结果作为32位整数写入mp4文件。
处理完从属于“elst”元素2648的所有片段元素后,将elst原子948的原子大小的值更新为图50中所示的那样(操作5060到5095)。
将量“edtsSizePos”的值指派给“sizePos”,并将edts原子945的原子大小的值更新为图50中所示的那样(操作5060到5095)。
7.2.5  处理可选用户数据元素
创建输出mp4文件2230中的第四步骤包括对包含在moov元素2320中的任何可选“user data”(udta)元素2340进行处理。使用标准XML手段获得从属于图23A中示出的mp4file文档2300的“moov”元素2320的任何“udta”元素2340。使用下列方法处理每种“udta”元素:
图50中示出的过程用于在输出mp4文件中创建具有原子ID“udta”的原子784。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值760。在操作5020,将原子ID“udta”写入输出mp4文件。将“sizePos”的值指派给量“udta SizePos”。
在操作5030和5040,“udta”元素不具有属性。
每个“udta”元素可以具有诸如可用于在mp4文件中嵌入版权消息的“cprt”元素的从属元素。可能忽略任何未识别的从属元素。
如果发现“udta”元素具有从属“cprt”元素,则使用图50中示出的过程在输出mp4文件中创建具有原子ID“cprt”的原子。在操作5000,将输出mp4文件的当前文件位置指派给量“sizePos”。在操作5010,将值零写入输出mp4文件,替换原子大小值。在操作5020,将原子ID“cprt”写入输出mp4文件。
“cprt”元素可具有名称为“version”、“flags”和“language”的属性。在操作5030,这些属性中的每一个值指派给同名量。在操作5040,“cprt”元素也将具有包含了表示消息的文本字符串的从属“textnode”。
在操作5040,将下列量写入输出mp4文件中:
a)表示量“version”值的8位整数,
b)表示量“flags”值的24位整数,
c)表示量“language”值的16位整数,及
d)表示从属文本节点值的序列字段,随后为空字节。
完成“cprt”元素的属性后,将cprt原子的原子大小的值更新为图50中所示的那样(操作5060到5095)。
完成对从属于“udta”元素2340的所有mp4文件元素进行处理后,将量“udtaSizePos”的值指派给“sizePos”,并将相应的udta原子784的原子大小的值更新为图50中所示的那样(操作5060到5095)。
7.2.6  更新odsm缓存大小
创建输出mp4文件2230中的最后步骤包括对odsm缓存大小进行更新。
输出mp4文件2320包括用于每个媒介流的trak原子790。如图9中所示,每个trak原子900包括ES-Descr对象结构990。ES-Descr对象结构990和1000包含DecoderConfigDescriptor对象结构1024和1032。如图10中所示,每个DecoderConfigDescriptor对象结构包括属性“bufferSizeDE”1060。在大部分情况下,在相关媒介数据流中由最大样本的大小来确定该属性值。在odsm1900的情况中,每个样本1920和1940可包括关于Es-Descr结构1000的EsIdRef结构2170,及odsm样本缓存必须具有足够的大小以允许相应Es-Descr结构1000来取代每个嵌入EsIdRef2160结构。构成Es-Descr结构1000的字节数一般大于相应的EsIdRef结构2160的字节数。因此,必须增加odsm的最小最小缓存大小以允许相应Es-Descr结构1000来取代嵌入EsIdRef结构2160。由下述方法实现。
执行这些操作前,如上述已构建每个track原子900。odsm的track原子包含用于bufferSizeDB属性的预备值。在将该预备值写入输出mp4文件之前,将mp4文件位置的值指派给量“OdsmbufferSizeDB”。另外,如上述的部分操作,已将每个odsm样本大小指派给列表“OdsmbufferSize”中的项,已将用于每个track原子的Es-Descr结构的大小指派给列表“EsDescrSizeForTrack”中的项,已将用于每个track原子的“trackID”属性的大小指派给列表“TrackIdForTrack”中的项,及已将联系到每个对象的TrackId的大小指派到列表“TrackIdForOdId”中的项。
在完成上述前面的步骤的处理之后,使用下列标准手段修订odsm的属性bufferSizeDB的值:
1.使用标准XML手段获得mp4file文档2300中的每一个“mdat”元素2310
2.使用标准XML手段获得从属于每一个“mdat”元素2310和2400的每一个“odsm”元素2420
3.使用标准XML手段获得从属于每一个“odsm”元素2420和2460的每一个“odsmChunk”元素2470
4.使用标准XML手段获得从属于每一个“odsmChunk”元素2470和2500的每一个“odsmSample”元素(2510)
5.列举具有量“ithOdsmSample”的每一个“odsmSample”元素2510
6.使用标准XML手段获得从属于每一个“odsmSample”元素2520和2510的每一个“ObjectDescrUpdate”odsm命令元素2530和2540
7.使用标准XML手段获得从属于每一个“ObjectDescrUpdate”元素2540的每一个“ObjectDescriptor”元素2550
8.将“ObjectDescriptor”元素2550的“ODID”属性的值指派给量“OdId”
9.将列表“TrackIdForOdId”中的项OdId-1的值指派给量“trackID”
10.使用列表“TrackIdForTrack”确定“trackID”的值的“track”索引
11.将列表“EsDescrSizeForTrack”中的项“track”的值指派给量“EsDescrSize”的值
12.将量“EsDescrSize”的值添加到列表“OdsmSampleSize”中的项“IthOdsmSample”
13.确定列表“OdsmSampleSize”中的最大项,并将结果指派给量OdsmBufferSize
14.将当前mp4文件位置指派给量“mp4FilePos”
15.将当前文件位置改为量“OdsmBufferSizePos”所指出的值
16.将表示量OdsmBufferSize的值的三字节作为24位整数写入输出mp4文件
17.将mp4文件位置恢复到量“mp4FilePos”所指出的值
量OdsmBufferSize的值可能将对odsm缓冲区大小需要的值估计过高了,但这是可以接受的。这些手段完成了输出mp4文件的创建。
已为了示例和说明的目的,呈现了本发明的上述说明。其不是要穷举本发明或将本发明限制为所公开的确切形式,根据上面的教导其他的修改和变换都是可能的。例如,XMT-A文件的精确定义可以随时间而变化或发展。同样,MPEG-4中间格式的确切定义可以随时间而变化或发展。这里所描述的本发明不限于上面所述文档中指出的特定定义。因此,本发明的原理可应用于其他不相关的数据结构。SFNode数据结构的其他期望形式也可定义于MPEG-4系统规范中。如在以下实施例中所述的扩展本发明以涵盖这种情况的手段对于本领域的技术人员来说是显而易见的。因此,所公开的实施例是为了更好地解释本发明的原理和其实际应用而选出的,从而使本领域的其他技术人员能够更好地以适于所设想的特定使用的各种实现和各种变体来应用本发明。所附权利要求旨在被认为包括除了在先有技术所限制的范围之外的本发明的其他可选实施例。

Claims (32)

1.一种用于将可扩展MPEG-4文本(XMT)文档转换为二进制MPEG-4(mp4)文件的方法,该XMT文档具有0或多个相关媒体数据文件,该方法包括:
生成表示mp4文件的中间文档;以及
根据上述中间文档和相关媒体数据文件创建mp4文件。
2.权利要求1的方法,其中生成中间文档进一步包括生成一个或多个表示mp4文件的特定部分的附加中间文档。
3.权利要求2的方法,其中生成附加中间文档进一步包括生成表示情景描述流的mp4-bifs文档。
4.权利要求3的方法,其中上述mp4-bifs文档是与表示该mp4文件的中间文档分开的不同文档。
5.权利要求2的方法,其中生成附加中间文档进一步包括生成表示对象描述符流的文档。
6.权利要求5的方法,其中上述表示对象描述符流的文档是与表示上述mp4文件的中间文档分开的不同文档。
7.权利要求1的方法,其中创建mp4文件包括确定表示每一个相关媒体数据文件中的每一个时间元素的字节数。
8.权利要求1的方法,其中创建mp4文件包括确定每一个相关媒体数据文件的每一个时间元素的持续时间。
9.一种用于将可扩展MPEG-4文本(XMT)文档转换为二进制MPEG-4(mp4)文件的系统,该XMT文档具有0或多个相关媒体文件,该系统包括:
第一转换器,其配置成输入XMT文档,并生成至少一个表示mp4文件的结构的中间文档;以及
第二转换器,其配置成输入上述中间文档和任何相关的媒体文件,该第二转换器进一步配置为生成mp4文件。
10.权利要求9的系统,其中上述中间文档包括表示mp4文件的特定部分的附加中间文档。
11.权利要求10的系统,其中上述附加中间文档包括表示情景描述流的mp4-bifs文档。
12.权利要求10的系统,其中上述附加中间文档包括表示对象描述符流的文档。
13.权利要求12的系统,其中上述表示对象描述符流的文档包含在上述表示mp4文件的中间文档内。
14.权利要求12的系统,其中上述表示对象描述符流的文档是与上述表示mp4文件的中间文档分开的不同文档。
15.权利要求14的系统,其中上述表示mp4文件的中间文档引用表示对象描述符流的文档。
16.一种实现于有形介质中的计算机程序产品,包括:
结合到该有形介质、用于将可扩展MPEG-4文本(XMT)文档转换为二进制MPEG-4(mp4)文件的计算机可读程序代码,该XMT文档具有0或多个相关媒体数据文件,该计算机可读程序代码配置为使该程序:
生成表示mp4文件的中间文档;以及
根据上述中间文档和相关媒体数据文件创建mp4文件。
17.权利要求16的计算机程序产品,其中上述中间文档是可扩展标记语言(XML)文档。
18.权利要求16的计算机程序产品,其中上述配置成生成中间文档的计算机可读程序代码进一步包括配置成生成一个或多个表示mp4文件的特定部分的附加中间文档的计算机可读程序代码。
19.权利要求18的计算机程序产品,其中上述附加中间文档是可扩展标记语言(XML)文档。
20.权利要求18的计算机程序产品,其中上述配置成生成一个或多个附加中间文档的计算机可读程序代码进一步包括配置成生成表示情景描述流的mp4-bifs文档的可读程序代码。
21.权利要求20的计算机程序产品,其中上述mp4-bifs文档包含在上述表示mp4文件的中间文档之内。
22.权利要求20的计算机程序产品,其中上述mp4-bifs文档是与表示mp4文件的中间文档分开的不同文档。
23.权利要求22的计算机程序产品,其中上述表示mp4文件的中间文档引用上述mp4-bifs文档。
24.权利要求18的计算机程序产品,其中上述配置成生成一个或多个附加中间文档的计算机可读程序代码进一步包括配置成生成表示对象描述符流的文档的可读程序代码。
25.权利要求24的计算机程序产品,其中上述表示对象描述符流的文档包含在表示mp4文件的中间文档之内。
26.权利要求24的计算机程序产品,其中上述表示对象描述符流的文档是与上述表示mp4文件的中间文档分开的不同文档。
27.权利要求26的计算机程序产品,其中上述表示mp4文件的中间文档引用表示对象描述符流的文档。
28.权利要求16的计算机程序产品,其中上述配置成创建mp4文件的计算机可读程序代码包括配置成确定表示每一个相关媒体数据文件的每一个时间元素的字节数的计算机可读程序代码。
29.权利要求16的计算机程序产品,其中上述配置成创建mp4文件的计算机可读程序代码包括配置成确定每一个相关媒体数据文件的每一个时间元素的持续时间的计算机可读程序代码。
30.权利要求16的计算机程序产品,其中上述相关媒体数据文件包括一个或多个音频数据文件。
31.权利要求16的计算机程序产品,其中上述相关媒体数据文件包括一个或多个图像数据文件。
32.权利要求16的计算机程序产品,其中上述相关媒体数据文件包括一个或多个视频数据文件。
CNB200380104998XA 2002-12-04 2003-11-29 用于从mpeg-4文本表示创建mpeg-4中间格式的方法及系统 Expired - Fee Related CN100470535C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/309,537 US20040111677A1 (en) 2002-12-04 2002-12-04 Efficient means for creating MPEG-4 intermedia format from MPEG-4 textual representation
US10/309,537 2002-12-04

Publications (2)

Publication Number Publication Date
CN1720523A true CN1720523A (zh) 2006-01-11
CN100470535C CN100470535C (zh) 2009-03-18

Family

ID=32467881

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB200380104998XA Expired - Fee Related CN100470535C (zh) 2002-12-04 2003-11-29 用于从mpeg-4文本表示创建mpeg-4中间格式的方法及系统

Country Status (7)

Country Link
US (1) US20040111677A1 (zh)
EP (1) EP1567943A4 (zh)
JP (1) JP2006514354A (zh)
CN (1) CN100470535C (zh)
AU (1) AU2003298773A1 (zh)
TW (1) TWI245999B (zh)
WO (1) WO2004051423A2 (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100478934B1 (ko) * 2002-10-22 2005-03-28 한국전자통신연구원 객체기반 엠팩-4 컨텐츠 편집/저작과 검색 장치 및 방법
EP1427252A1 (en) * 2002-12-02 2004-06-09 Deutsche Thomson-Brandt Gmbh Method and apparatus for processing audio signals from a bitstream
KR100513736B1 (ko) * 2002-12-05 2005-09-08 삼성전자주식회사 그래픽 데이터 압축에 관한 메타표현을 이용한 입력파일생성 방법 및 시스템
DE10309336B4 (de) * 2003-03-04 2005-11-24 Siemens Ag Verfahren zur Codierung eines strukturierten Dokuments
KR100695126B1 (ko) * 2003-12-02 2007-03-14 삼성전자주식회사 그래픽 데이터 압축에 관한 메타표현을 이용한 입력파일생성 방법 및 시스템과, afx부호화 방법 및 장치
FR2890815B1 (fr) * 2005-09-14 2007-11-23 Streamezzo Sa Procede de transmission d'un contenu multimedia vers un terminal de radiocommunication, programme d'ordinateur, signal, terminal de radiocommunication et serveur de diffusion correspondants
US7962933B2 (en) * 2006-04-06 2011-06-14 Velti USA, Inc. Mid-roll insertion of digital media
EP3220281A1 (en) * 2009-11-04 2017-09-20 Amotech Co., Ltd. System and method for media content streaming
US9262511B2 (en) * 2012-07-30 2016-02-16 Red Lambda, Inc. System and method for indexing streams containing unstructured text data
US9936266B2 (en) * 2013-05-17 2018-04-03 Tencent Technology (Shenzhen) Company Limited Video encoding method and apparatus
US9858349B2 (en) 2015-02-10 2018-01-02 Researchgate Gmbh Online publication system and method
EP3096277A1 (en) 2015-05-19 2016-11-23 ResearchGate GmbH Enhanced online user-interaction tracking
US10560726B2 (en) * 2017-07-26 2020-02-11 CodeShop BV System and method for delivery and caching of personalized media streaming content
US11392347B2 (en) * 2020-06-17 2022-07-19 Twitter, Inc. Audio messaging interface on messaging platform

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6751623B1 (en) * 1998-01-26 2004-06-15 At&T Corp. Flexible interchange of coded multimedia facilitating access and streaming
JP4159673B2 (ja) * 1998-10-09 2008-10-01 松下電器産業株式会社 オーディオ−ビジュアル・オブジェクトのシーン記述におけるデータ型キャスティングおよび代数処理のための方法
AUPQ867700A0 (en) * 2000-07-10 2000-08-03 Canon Kabushiki Kaisha Delivering multimedia descriptions
US7203692B2 (en) * 2001-07-16 2007-04-10 Sony Corporation Transcoding between content data and description data
US20030110297A1 (en) * 2001-12-12 2003-06-12 Tabatabai Ali J. Transforming multimedia data for delivery to multiple heterogeneous devices

Also Published As

Publication number Publication date
EP1567943A2 (en) 2005-08-31
TW200416561A (en) 2004-09-01
EP1567943A4 (en) 2009-06-24
WO2004051423A2 (en) 2004-06-17
US20040111677A1 (en) 2004-06-10
JP2006514354A (ja) 2006-04-27
AU2003298773A1 (en) 2004-06-23
CN100470535C (zh) 2009-03-18
WO2004051423A3 (en) 2005-02-17
TWI245999B (en) 2005-12-21
AU2003298773A8 (en) 2004-06-23

Similar Documents

Publication Publication Date Title
CN1190081C (zh) 发送和接收动态图像数据的方法及其设备
CN1168033C (zh) 数据结构编辑装置及其编辑方法
CN1720523A (zh) 用于从mpeg-4文本表示创建mpeg-4中间格式的有效手段
CN1170240C (zh) 结构化文档检索显示方法和装置
CN1264342C (zh) 用于处理用参考信息模型配置的内容相关信息的电子节目指南
CN1244062C (zh) Xml编码方案
CN1193607C (zh) 信息处理设备和方法
CN1166143C (zh) 用于媒体数据传输的方法和装置
CN1823330A (zh) 模块化文档格式
CN1141844C (zh) 移动图像合成系统
CN1833240A (zh) 维护包内部件之间的关系的方法和装置
CN1781089A (zh) 构建包含预编页码文档的包的方法和系统
CN1809825A (zh) 定义具有可选择和/或可定序部件的文档的方法和系统
CN1799046A (zh) 用于文档处理的方法和装置
CN1509573A (zh) 数据参考系统
CN1666195A (zh) 支持媒体文件中的高级编码格式
CN1433546A (zh) 数据适合化装置、数据适合化方法、存储媒体及程序
CN1437750A (zh) 数据记录设备
CN1856036A (zh) 字幕产生设备和方法
CN1383677A (zh) 信息处理设备和方法、程序和记录介质
CN1156780C (zh) 电子邮件准备装置、终端装置、信息发送系统和程序记录媒体
CN1774712A (zh) 在数据表中管理递归可缩放模板实例中的插入操作的系统和方法
CN1332935A (zh) 能够使数字电视接收机以提取的格式存取系统信息的应用程序编程接口
CN1528091A (zh) 压缩层次树的方法、相应的信号以及解码信号的方法
CN1826566A (zh) Dv元数据提取

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20090318

Termination date: 20091229