Microsoft公司的Windows Media的核心是ASF(Advanced Stream Format)。微软将ASF 定义为同步媒体的统一容器文件格式。ASF是一种数据格式,音频、视频、图像以及控制命令脚本等多媒体信息通过这种格式,以网络数据包的形式传输,实现流式多媒体内容发布。 ASF最大优点就是体积小,因此适合网络传输,使用微软公司的最新媒体播放器(Microsoft Windows Media Player)可以直接播放该格式的文件。用户可以将图形、声音和动画数据组合成一个ASF格式的文件,当然也可以将其他格式的视频和音频转换为ASF格式,而且用户还可以通过声卡和视频捕获卡将诸如麦克风、录像机等等外设的数据保存为ASF格式。另外,ASF格式的视频中可以带有命令代码,用户指定在到达视频或音频的某个时间后触发某个事件或操作。 ASF的特征 可扩展的媒体类型- ASF文件允许制作者很容易地定义新的媒体类型。ASF格式提供了非常有效的灵活地定义符合ASF文件格式定义的新的媒体流类型。任一存储的媒体流逻辑上都是独立于其他媒体流的,除非在文件头部分明显地定义了其与另一媒体流的关系。 部件下载-特定的有关播放部件的信息(如,解压缩算法和播放器)能够存储在ASF 文件头部分,这些信息能够为客户机用来找到合适的所需的播放部件的版本---如果它们没有在客户机上安装。 可伸缩的媒体类型- ASF是设计用来表示可伸缩的媒体类型的"带宽"之间的依赖关系。ASF存储各个带宽就像一个单独的媒体流。媒体流之间的依赖关系存储在文件头部分,为客户机以一个独立于压缩的方式解释可伸缩的选项提供了丰富的信息 流的优先级化- 现代的多媒体传输系统能够动态地调整以适应网络资源紧张的情况(如,带宽不足)。多媒体内容的制作者要能够根据流的优先级表达他们的参考信息,如最低保证音频流的传输。随着可伸缩媒体类型的出现,流的优先级的安排变得复杂起来,因为在制作的时候很难决定各媒体流的顺序。ASF允许内容制作者有效地表达他们的意见(有关媒体的优先级),甚至在可伸缩的媒体类型出现的情况下也可以。 多语言- ASF设计为支持多语言。媒体流能够可选地指示所含媒体的语言。这个功能常用于音频臀谋玖鳌R桓龆嘤镅訟SF文件指的是包含不同语言版本的同一内容的一系列媒体流,其允许客户机在播放的过程中选择最合适的版本。 目录信息- ASF提供可继续扩展的目录信息的功能,该功能的扩展性和灵活性都非常好。所有的目录信息都以无格式编码的形式存储在文件头部分,并且支持多语言,如果需要,目录信息既可预先定义(如,作者和标题),也可以是制作者自定义。目录信息功能既可以用于整个文件也可以用于单个媒体流。 ASF文件格式 ASF 对象定义 ASF文件基本的组织单元叫做ASF 对象,它是由一个128位的全球唯一的对象标识符(Object ID),一个64位整数的对象大小(Object Size)和一个可变长的对象数据(Object Data)组成。对象大小域的值是由对象数据的大小加上24比特之和。
图11.8 ASF对象 这个文件组织单元有点类似于RIFF(Resource Interchange File Format)字节片。RIFF字节片时AVI和WAV文件的基本单位。ASF对象在两个方面改进了RIFF的设计。首先,无需一个权威机构来管理对象标识符系统,因为计算机网卡能够产生一个有效的唯一的GUID。其次,对象大小字段已定义得足够处理高带宽多媒体内容的大文件。 高层文件结构 ASF文件逻辑上是由三个高层对象组成:头对象(Header Object)、数据对象(Data Object)和索引对象(Index Object).。头对象是必需的并且必须放在每一个ASF文件的开头部分,数据对象也是必需的,且一般情况下紧跟在头对象之后。索引对象是可选的,但是一般推荐使用。
图11.9 高层ASF文件结构 在具体实现过程中可能会出现一些文件包含无序的(Out-Of-Order)的对象,ASF也支持,但在特定情况下,将导致ASF 文件不能使用,如从特定的文件源如HTTP服务器读取该类ASF文件。同样地,额外的高层对象也可能被运用并加入到ASF文件中。一般推荐这些另加的对象跟在索引对象之后。 ASF数据对象能够被解释的一个前提条件是头对象已被客户机接收到。ASF没有声明头对象信息是如何到达客户端的,"到达机制"是一个"本地实现问题",显然已超过了ASF 的定义范围。头对象先于数据对象到达有三种方式: 包含头对象的信息作为"会话声明"的一部分。 利用一个与数据对象不同的"通道"发送头对象。 在发送ASF 数据对象之前发送头对象。 ASF 头对象 在ASF的三个高层对象中,头对象是唯一包含其他ASF 对象的对象。头对象可能包含一下对象: 文件属性对象(File Properties Object)----全局文件属性。 流属性对象(Stream Properties Object)----定义一个媒体流和其属性。 内容描述对象(Content Description Object)----包含所有目录信息。 部件下载对象(Component Download Object)----提供播放部件信息。 流组织对象(Stream Groups Object)----逻辑上把多个媒体流组织在一起。 可伸缩对象(Scalable Object)----定义媒体流之间的可伸缩的关系。 优先级对象(Prioritization Object)----定义相关流的优先级。 相互排斥对象(Mutual Exclusion Object)----定义排斥关系如语言选择。 媒体相互依赖对象(Inter-Media Dependency Object)----定义混合媒体流之间的相互依赖关系。 级别对象(Rating Object)----根据W3C PICS定义文件的级别。 索引参数对象(Index Parameters Object)----提供必要的信息以重建ASF文件的索引。
图11.10 ASF 头对象 头对象的作用是在ASF文件的开始部分提供一个众所周知的比特序列,并且包含所有其它头对象信息。头对象提供了存储在数据对象中的多媒体数据的全局的信息。 ASF数据对象 数据对象包含一个ASF 文件的所有多媒体数据。多媒体数据以ASF数据单元的形式存储,每一个ASF数据单元都是可变长的,且包含的数据必须是同一种媒体流。数据单元在当它们开始传输的时候在数据对象中自动地排序,这种排序来自于交叉存储的文件格式。 ASF索引对象 ASF索引对象包含一个嵌入ASF文件的多媒体数据的基于时间的索引。每以索引进入表现的时间间隔是在制作时设置的,并且存储在索引对象中。由于没有必要为一个文件的每一个媒体流建立一个索引,因此,通常利用一个时间间隔列表来索引一系列的媒体流。
文章引用自:http://blog.video.com.cn/liumeiti/archives/2005/1974.shtml#