没有合适的资源?快使用搜索试试~ 我知道了~
利用VC++实现avi文件的合成与分解
5星 · 超过95%的资源 需积分: 9 68 下载量 10 浏览量
2011-08-02
10:08:59
上传
评论
收藏 175KB DOC 举报
温馨提示
试读
21页
首先系统介绍了avi格式,然后详细介绍了怎么样用VC++实现avi文件的合成与分解
资源推荐
资源详情
资源评论
.从(-)为一个 文件的信息区部分。
它是文件的第一个 块。在它的内部记录着整个文件的系统构成,如告诉播放软件
“我是一个 文件”“在我的体内有几个数据流”“每个数据流包含着什么数据类型——图
像、声音或其他”“如果是图像数据流,那么它的大小、颜色、压缩方式、播放速度等,
等是怎样规定的”“如果是声音数据流,那么它的压缩方式、播放效果等等又将有何规
定”在信息区中还有多个附属的 块,也就是我们前面提到的“子块”,它们用来
记录每个数据流的全部信息。而这些附间 块与数据流之间保持着—一对应的关系
即
第一个附属 块对应于 号数据流第二个附属 块对应于 号数据流要
想解释数据流,我们必须先了解 文件中数据块是什么。在 文件中,数据块是
被放置在数据区中的一个有起始标志(由“数据流识别码”和“数据块存储方式识别码组
成请参见对数据区部分的说明并指明大小和数据内容的数据段那么数据流就是那些
相互之间具有联系的同种数据类型的数据块集合 多媒体文件
识别码
文件大小( 字节)- 字节
! 文件识别码
第一个 块识别码
第一个 块的大小(" 字节)
#$ 部分识别码,以下数据记录着此文件的格式
!#$ 部分所包含的 %& 块识别码,此模块记录着本文件的初
始化信息
%& 块大小( 字节)
'' 每帧画面显示所维持多少个百万分之一秒,本例为 "!,
即 """" 百万分之一秒,约 秒。所以在播放此文件时,你看到的画面约每秒 (
帧
小知识:AVI 文件格式----摘自《DirectShow 实务精选》 作者:陆其明
)
(*+,+#$+%&+ 的缩写)是一种 (+*#-+,+#-%.+
$+#/%, 的缩写)文件格式,多用于音视频捕捉、编辑、回放等应用程序中。通常情
况下,一个 文件可以包含多个不同类型的媒体流(典型的情况下有一个音频流和一个
视频流),不过含有单一音频流或单一视频流的 文件也是合法的。 可以算是
操作系统上最基本的、也是最常用的一种媒体文件格式。
先来介绍 文件格式。 文件使用四字符码 01(2*#-%#%-,+#-+)来
表征数据类型,比如‘3、‘3、‘3等。注意, 操作系统使用的字节顺序
是 $,,$++%,因此一个四字符码‘%4-3实际的 0 值应为 5"""'"。另外,
四字符码中像‘3一样含有空格也是合法的。
文件首先含有一个如图 的文件头结构。
)
图 文件结构
)
最开始的 个字节是一个四字符码‘3,表示这是一个 文件;紧跟着后面用
个字节表示此 文件的大小;然后又是一个四字符码说明文件的具体类型(比如
、 等);最后就是实际的数据。注意文件大小值的计算方法为:实际数据长度
6(文件类型域的大小);也就是说,文件大小的值不包括‘3域和“文件大小”域本身
的大小。
文件的实际数据中,通常还使用了列表(,)和块(*7)的形式来组织。列表
可 以 嵌 套 子 列 表 和 块 。 其 中 , 列 表 的 结 构 为 : ‘ 3$,8+$,9:+$,%,%
;;<3是一个四字符码,表示这是一个列表;$,8+ 占用 字节,记录了整个列表的
大小;$,9:+ 也是一个四字符码,表示本列表的具体类型;$,%,% 就是实际的列表数
据。注意 $,8+ 值的计算方法为:实际的列表数据长度 6($,9:+ 域的大小);也
就是说 $,8+ 值不包括‘ 3域和 $,8+ 域本身的大小。再来看块的结构: -7
-78+-7%,%;;-7 是一个表示块类型的四字符码;-78+ 占用 字节,记录了整
个块的大小;-7%,% 为实际的块数据。注意 -78+ 值指的是实际的块数据长度,而不包
括 -7 域和 -78+ 域本身的大小。(注意:在下面的内容中,将以 =$,9:+
=$,%,%的形式来表示一个列表,以 -7=-7%,%的形式来表示一个块,如
>:,%$+$+/+,?中括号中的元素表示为可选项。)
接下来介绍 文件格式。 文件类型用一个四字符码‘3来表示。整个 文件的结
构为:一个 头 6两个列表(一个用于描述媒体流格式、一个用于保存媒体流数据)
6一个可选的索引块。 文件的展开结构大致如下:
)
=<3
)))))=<#$3
)))))))))))<%&3=主 信息头数据
)))))))))))=<,#$3
)))))))))))))))))<,#3=流的头信息数据
)))))))))))))))))<,#23=流的格式信息数据
)))))))))))))))))><,#3=可选的额外的头信息数据?
)))))))))))))))))><,#3=可选的流的名字?
)))))))))))))))))
))))))))))))))))
))))))))))))
))))))))))
)))))=</&3
)))))))))))@*4*7A=<#+-3
)))))))))))))))))))))))))))))*4*7
)))))))))))))))))))))))))))))*4*7'
)))))))))))))))))))))))))))))
))))))))))))))))))))))))))))
))))))))))))))
)))))))))))B
)))))))))))
))))))))))
)))))><53=可选的 索引块数据?
))))
)
首先,=<3C表征了 文件类型。然后就是 文件必需的第一个列表—
—‘#$3列表,用于描述 文件中各个流的格式信息( 文件中的每一路媒体数据都称
为一个流)。‘#$3列表嵌套了一系列块和子列表——首先是一个‘%&3块,用于记录
文 件 的 全 局 信 息 , 比 如 流 的 数 量 、 视 频 图 像 的 宽 和 高 等 , 可 以 使 用 一 个
DEF 数据结构来操作:
)
,9:++2,#*-,G%&/%+%+#@
)))012--H))II必须为‘%&3
)))0)-4H)))II本数据结构的大小,不包括最初的 个字节(2-- 和 -4 两个域)
)))0)D-#+-J+##%/+H))II视频帧间隔时间(以毫秒为单位)
)))0)D%5!9,+J+#+-H))))II这个 文件的最大数据率
)))0)J%.K#%*$%#,9HII数据填充的粒度
)))0)$%.H))))))))II 文件的全局标记,比如是否含有索引块等
)))0),%$#%/+H))II总帧数
)))0),%$#%/+HII为交互格式指定初始帧数(非交互格式应该指定为 )
)))0),#+%/H))))))II本文件包含的流的个数
)))0)*..+,+!*L+#8+HII建议读取本文件的缓存大小(应能容纳最大的
块)
)))0),H))))))))II视频图像的宽(以像素为单位)
)))0)F+.,H)))))))II视频图像的高(以像素为单位)
)))0)++#&+>?H))II保留
BDEFH
)
然后,就是一个或多个‘,#$3子列表。(文件中有多少个流,这里就对应有多少个‘,#$3
子列表。)每个‘,#$3子列表至少包含一个‘,#3块和一个‘,#23块,而‘,#3块(保存编解码
器需要的一些配置信息)和‘,#3块(保存流的名字)是可选的。首先是‘,#3块,用于说
明这个流的头信息,可以使用一个 DF 数据结构来操作:
)
,9:++2,#*-,G%&,#+%/+%+#@
))))012--H)II必须为‘,#3
))))0)-4H))II本数据结构的大小,不包括最初的 个字节(2-- 和 -4 两个域)
012--9:+H)))II流的类型:‘%*3(音频流)、‘&3(视频流)、
))))))))))))))))))II</3(D 流)、‘,5,3(文字流)
))))012--F%$+#HII指定流的处理者,对于音视频来说就是解码器
))))0)$%.H)))II标记:是否允许这个流输出?调色板是否变化?
))))0))J##,9H)II流的优先级(当有多个相同类型的流时优先级最高的为默认
流)
))))0))%.*%.+H
))))0),%$#%/+HII为交互格式指定初始帧数
))))0)-%$+H))II这个流使用的时间尺度
))))0)%,+H
))))0),%#,H))II流的开始时间
))))0)+.,H)II流的长度(单位与 -%$+ 和 %,+ 的定义有关)
))))0)*..+,+!*L+#8+HII读取这个流数据建议使用的缓存大小
))))0)M*%$,9H)))II流数据的质量指标(N)
))))0)%/:$+8+HII%/:$+ 的大小
)))),#*-,@
))))))))#,,$+2,H
))))))))#,,,:H
))))))))#,,#.,H
))))))))#,,4,,/H
B)#-#%/+H)II指定这个流(视频流或文字流)在视频主窗口中的显示位置
))))))))))))II视频主窗口由 DEF 结构中的 , 和 F+., 决定
BDFH
)
然后是‘,#23块,用于说明流的具体格式。如果是视频流,则使用一个 !DJE0 数
据结构来描述;如果是音频流,则使用一个 0DO 数据结构来描述。
当 文件中的所有流都使用一个‘,#$3子列表说明了以后(注意:‘,#$3子列表出现的顺序
与媒体流的编号是对应的,比如第一个‘ ,#$3子列表说明的是第一个流(,#+%/),第
二个‘,#$3子列表说明的是第二个流(,#+%/),以此类推),‘#$3列表的任务也就完
成了,随后跟着的就是 文件必需的第二个列表——‘/&3列表,用于保存真正的媒体
流数据(视频图像帧数据或音频采样数据等)。那么,怎么来组织这些数据呢?可以将数
据块直接嵌在‘/&3列表里面,也可以将几个数据块分组成一个‘#+-3列表后再编排进
剩余20页未读,继续阅读
唐华春
- 粉丝: 71
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页