swf文件解析(一) 文件header部分解析
来源:互联网 发布:mmd腰震骑射动作数据 编辑:程序博客网 时间:2024/05/22 00:38
SWF(shock wave flash)是ADOBE公司的动画设计软件Flash的专用格式。
这种格式具有许多优点,诸如可扩展性高,网络传输需求低,对外部依赖(如字体)依赖小,硬件需求小等。
SWF文件头包含该文件的压缩情况、版本号、文件内容长度及相关播放信息,如下表:
Signature:
文件前3个Byte为固定的”CWS”或者”FWS”,其中”FWS”为未经过压缩的SWF文件,”CWS”为使用标准Zlib压缩过的SWF文件。
自Flash11开始,新增加了SWF对LZMA压缩的支持,出现了以”ZWS”开头的SWF文件。
自Flash11开始,新增加了SWF对LZMA压缩的支持,出现了以”ZWS”开头的SWF文件。
Version:
signature之后的1Byte为SWF的version,如上图所示,version为0x0e。
FileLength:
filelength为文件解压后真实长度,类型为UI32(unsigned int),上图中79 04 00 00应为0x479,即1145byte
对CWS的解压,可以调用zilb.h中的uncompress完成
<span style="font-size:14px;">uncompress( bufd, &destlen, buf, complen-8 );</span>
bufd: 解压后数据存储地址,需要预先申请存储空间。上图中需要申请0x479-0x8 byte的内存空间(79 04 00 00)
destlen: 为实际解压后大小,如果文件未被破坏或出现错误,执行完uncompress函数后destlen的大小应该同bufd大小相同(0x479-0x8)
buf: CWS文件除去(Singnature+Version+filelength)部分数据。
complen-8: complen为CWS文件实际大小,8为(Singnature+Version+filelength)大小,如上所述。
解压后添加上文件头,就可以完成CWS解压至FWS,如下图:
FrameSize:
The FrameSize field defines the width and height of the on-screen display.
FrameSize为结构体类型,保存frame大小的矩形信息
对FrameSize的解析共分为两个步骤
1. 获取5bit(Nbits)
0x78转换为二进制位0111 1000
取前5个bit位01111,即15个bit,意味着Xmin、Xmax、Ymin、Ymax各占15个bit
2. 根据Nbits读取矩形信息
15*4 = 60,即还需要60bit,除去0x78后3bit,还需要57bit,57bit需要8byte提供,如下图:
上述数据对应的二进制如下,橙色为Nbits,红色为Xmin,绿色为Xman,蓝色为Ymin,紫色为Ymax,灰色部分舍弃。
0111 1000 0000 0000 00000111 1101 0000 0000 0000 0000 0000 0001 0111 0111 0000 0000 0000
因此Xmin = 0;Xmax = 16000;Ymin = 0;Ymax = 16000
FrameRate:
The FrameRate is the desired playback rate in frames per second.
如上图所示,FrameRate = 0x1e00。
FrameCount:
The FrameCount is the total number of frames in this SWF file.
如上图所示,FrameCount = 0x01。
至此,SWF文件的文件头就解析完毕了。
0 0
- swf文件解析(一) 文件header部分解析
- swf文件解析部分代码
- swf文件结构解析
- swf文件结构解析
- swf文件结构解析
- swf文件解析
- swf文件头解析
- SWF文件结构解析
- swf文件结构解析
- swf文件结构解析
- swf 文件解析
- gz文件Header 解析
- Java解析魔兽争霸3录像W3G文件(一):Header
- PHP下解析swf文件头
- html的swf文件代码解析
- SWF 文件的主要构成 --- SWF解析学习 笔记(1)
- swf文件格式解析入门(文件头解析)
- swf文件格式解析入门(文件头解析)
- 详解CSS3渐变(线性和径向)
- C#学习之路,学习笔记 第八章 面向对象编程:类和对象(二)8.3.1const常量 和 8.3.2readonly常量
- java基础-选择排序
- android
- hdu 1864 最大报销额(01背包)
- swf文件解析(一) 文件header部分解析
- 连续两次J1签证申请,以及两个两年政策
- java基础知识
- 一起talk C栗子吧(第五十七回:C语言实例--main函数的参数)
- 软件工程之学习总结
- socket阻塞与非阻塞,同步与异步
- 维度模型数据仓库(六) —— 增加列
- 51nod 1378:夹克老爷的愤怒 很好玩的一道树状dp
- Java值传递和引用传递