WMV格式浅析
WMV,全称Windows Media Video,是微软为其开发的若干音视频编解码器推出的视频压缩文件格式。WMV,也是一种编解码器,最早 设计用于互联网流媒体应用,主要针对的竞争对手就是RealVideo。
· WMV已经是开放标准
2003年,微软基于其WMV9 codec编写了一份视频编解码规格书,并提交给SMPTE(美国影视技术人员协会)申请为标准。2006年3月份,该标准正式通过,正式标准名 为SMPTE 421M,其非正式名VC-1。自此,VC-1成为了支持BD-ROM和HD DVD-ROM的三大视频编解码标准之一。
· 容器格式
很多人搞不清楚ASF和WMV有什么区别。在大多数情况下,WMV文件都是用ASF容器格式来封装的。ASF,全称是AdvancedSystem Format,也是微软专门针对流媒体开发的容器格式。使用.wmv扩展名的文件,代表这是一个使用WMV编解码器的ASF格式文件。一般来说,与WMV视频交织在一起的音频编码都是WMA(Windows Media Audio)。当然也有例外,偶尔会使用ACELP.net音频编码。微软建议,如果ASF格式文件中包含了非微软的编解码 器,最好使用.asf扩展名。
虽然WMV一般都是用ASF格式来封装,但是其也可以放入AVI和Matroska(MKV)格式中,文件扩展名也相对应为.avi和.mkv。
· 视频质量
微软声称,WMV 9的压缩比超过MPEG-4的2倍,MPEG-2的3倍。微软还声称,WMV 9的压缩效率相对WMV 8提高了15-50%。不过,2005年1月份的一份测试报告表明WMV 9的压缩效率比WMV 8要差。
· WMV相关软件
很多软件都能播放WMV文件,比如Windows Media Player,PowerDVD,RealPlayer,MPlayer,VLCMedia Player,Zoom Player和MediaPlayer Classic。能够对WMV进行编码的软件包括WindowsMovie Maker,Windows Media Encoder,Microsoft Expression Encoder,以及AdobePremiere Pro。如果你有别的格式的文件,希望转换成WMV格式的视频文件,在PC或Zune上播放,那就去下载一个支持WMV转换的Video Converter,有支持所有格式转换的Total VideoConverter,也有专门针对WMV的WMV Converter或Video to ZuneConverter,到Google上搜索或者到download.com上查找,有很多。
下面来介绍ASF文件格式
什么是ASF
ASF 是 advance streaming format的缩写。是微软为windows98所开发的串流多媒体文件格式。也是windows media的核心。
ASF是一种数据格式,音频,视频,图像以及控制命令脚本等多媒体信息通过这种格式,以网络数据包的形式传输,实现流式多媒体内容发布。
ASF优势
体积小,适合网络传输。
数据组合形式灵活,可以将图形,声音和动画数据组合成一个ASF格式文件。也可以将其他格式的视频和音频转为ASF 格式等。
在ASF视频中可以带有命令代码,用户指定在到达视频或音频的某个时间后执行某个事件或操作。
ASF特点
可扩展的媒体类型- ASF文件允许制作者很容易地定义新的媒体类型。ASF格式提供了非常有效的灵活地定义符合ASF文件格式定义的新的媒体流类型。任一存储的媒体流逻辑上都是独立于其他媒体流的,除非在文件头部分明显地定义了其与另一媒体流的关系。
部件下载-特定的有关播放部件的信息(如,解压缩算法和播放器)能够存储在ASF 文件头部分,这些信息能够为客户机用来找到合适的所需的播放部件的版本---如果它们没有在客户机上安装。
可伸缩的媒体类型- ASF是 设计用来表示可伸缩的媒体类型的\"带宽\"之间的依赖关系。ASF存 储各个带宽就像一个单独的媒体流。媒 体流之间的依赖关系存储在文件头部分,为客户机以一个独立于压缩的方式解释可伸缩的选项提供了丰富的信息流的优先级化- 现代的多媒体传输系统能够动态地调整以适应网络资源紧张的情况(如,带宽不足)。多媒体内容的制作者要能够根据流的优先级表达他们的参考信息,如最低保证音频流的传输。随着可伸缩媒体类型的出现,流的优先级的安排变得复杂起来,因为在制作的时候很难决定各媒体流的顺序。ASF允许内容制作者有效地表达他们的意见(有关媒体的优先级),甚至在可伸缩的媒体类型出现的情况下也可以.
多语言- ASF设计为支持多语言。媒体流能 够可选地指示所含媒体的语言。这个功能常用于音频和文本流。一个多语言ASF文件指的是包含不同语言版本的同一内容的一系列媒体流,其允许 客户机在播放的过程中选择最合适的版本。
目录信息- ASF提供可继续扩展的目录信息的功能,该功能的扩展性和灵活性都非常好。所有的目录信息都以无格式编码的 形式存储在文件头部分,并且支持多语言,如果需要,目录信息既可预先定义(如,作者和标题),也可 以是制作者自定义。目录信息功能既可 以用于整个文件也可以用于单个媒体流。
ASF结构
ASF 由三个主要部分组成。Header Object ,DataObject ,Index Object。
Headerobject:主要描述了数据的一些信息。例如作者,曲目信息,用户加入的命令信息,码流的码率等信息。Headerobject里包含很多其他的子object。每个object相当于一个信息描述符。这些object由GUID来区分。
Data object:存储数据。
Index object:存放时间索引。有两种方式:simple index object和index object。
Header Object
? Header object的作用主要体现在 以下个方面:
l 在ASF文件开始提供了一个全局的GUID。
l 包含所有在data object中需要说明的信息。
l 在ASF的三层结构中,只有header object可以携带其他ASF objects。
? File properties object:包含全局文件信息。
? Stream properties object:定义了一个数字媒体码流和他的特征。
? Header extension object:支持为一个ASF文件添加新功能,以便向后兼容。
? Content Description Object:包含一些目录信息。
? Script command object: 包含一些用户的指令。这些指令可以在playback时候被执行。
? Marker object:提供在一个文件 内的指定的跳跃点。(jump points)
注意:1)在header object中的objects可以以任何的顺序排列。
2)在一个header object中必须包含一个file properties object,一个header extension object 和至少一个streamproperties object。
Header Object 结构
? Object ID:16字节。值为:30 26 B2 75 8E 66 CF 11 A6 D9 00 AA00 62 CE 6C
? Object size: 8字节,描述了object总长度,包含16字节的ID和8字节的size。至少是30字节。
? Number of header objects:描述了header object中包含的objects的个数。不包含本身,同时,header extension object只能算作一个object,这里的计数不包含header extension object中的subobjects。
? Reserved1:忽略,固定值为0x1
? Reserved2:忽略,固定值为0x2
Header Object 之 Fileproperties object
?
? Object ID:16字节唯一标识。A1 DC AB 8C 47 A9 CF 11 8E E4 00 C00C 20 53 65
注意:所有的ASF对象和语法(包含data packet headers) 都是以little-endian字节序。但是ASF文件的data packet中包含的数字媒体流数据的字节序可以随意。
ASF Data Object
? Data object:由ASF datapacket组 成。Data packet是一个定长的数据包。每一个数据包携带一个或多个数字媒体流。Data packet在data object中按照发送 时间顺序保存。也就是一个data packet可能包含来自不同的码流的中的数据。Data packet通过entry objects来组织 管理来自不同码流的数据。
? Data packet:dataobject的组成单 位。包含信息
l 一个data packet中一个或多 个有效负载类型
l Data packet长度
l 时钟信息
l 附加的采样信息,例如时戳信息
Data Object structure
? Object ID:16字节。36 26 B2 75 8E 66 CF 11 A6 D9 00 AA 0062 CE 6C
? File ID:在一个ASF文件中唯一。当ASF文件修改时,这个值也会改变。这个值和Header Object中的一个File ID相同。
? Total Data Packets:在一个DataObject中的ASF data packet 的 个数。必须和File Properties object中的Data packet count的值相等。
? Reserved:保留,值为0x0101
ASF Data Packet Structure
Error correction data structure
? Error correction data length:当Error correction length type的值为00时有效,其值表示Error correction data的大小(字节),值为0010。 如果Error correction length type的值不为00,这个值设置为0000
? Opaque Data Present:如果设置1,表示Error Correction Data后是opaque data。这个值应 该设为0.
? Error correction length type:用于编码error correction data的大小。这个值应设置为0.
? Error correction present:为1时,表示有error correction 信息。
? Error correction data
ASF Payload parsing information