当前位置:我的异常网» PHP » PHP停解析swf文件头

PHP停解析swf文件头

www.myexceptions.net  网友分享于:2013-03-27  浏览:11次

PHP下解析swf文件头

近日,在

CSDN

论坛上看到一个帖子,想要实现用PHP来得到swf文件帧数的功能,一些网友回复说不可能,其实是他们对swf文件格式不了解,swf文件格式规范是开放的,而且也可以找到相当多的关于直接用PHP处理swf文件的,包括解析文件头,生成swf文件等。利用闲暇时间,我也写了一个粗陋的解析swf文件的类。

要想解析swf文件头,首先要弄清楚的当然是

swf文件格式规范

。规范中对swf文件格式作了详细的说明。关于swf文件头,它是由以下几个部分组成:

+--------+-----+--------+----------+----+----+

|文件标识|版本|文件大小|RECT字段|帧频|帧数|

+--------+-----+--------+----------+----+----+

其中“文件标识”为3个字节,包括文件压缩标志。这3个字节的内容为“FWS”或“CWS”,以‘C’开头的表示swf文件是采用的压缩输出(从RECT字段开始至文件结尾,采用Zlib标准进行文件压缩)。

“版本”为一个字节,存储8位字长的无符号整数,将swf文件的导出版本以16进制方式存储在该字节,如导出版本为7,则该字节存储值为0x07,而不是‘7’对应的ASCII值(0x37)。

“文件大小”存储占用4个字节,为32位无符号整数,将未压缩的swf文件大小以16进制形式存入该4个字段,值得注意的是,swf文件存储是按照little-endian,即低字节在前的“小尾”方式存储的,解析时,需要注意字节序。如一个swf文件大小为471字节,则该4个字节,由低位到高位,存储的内容将是0xd7,0x01,0x00,0x00。

“帧频”占用两个字节,表示每秒播放的帧数,存储方式是8.8共16位的定点数,整数部分在高位(即第二个字节),小数部分在低位(第一个字节),并按字节对齐。如小数7.5表示为16进制是0x07.80,按照低位在前,高位在后表示,这16位将存储为如下的2进制代码10000000 00000111。

“帧数”占用两个字节,为16位无符号整数,表示swf文件的总帧数。存储方式类似于“文件大小”存储方式。

难理解的是RECT字段,该字段采用swf文件格式规范中定义的“位值”(bit_value)进行存储的,这种存储特征是可以节约字节数,但数值是跨字节的。该段存储内容是用‘twip’(翻译为‘缇’,1pixel = 20twips)单位表示的播放窗口的尺寸。分为Nbits,表示后面字段的bit_value位长;Xmin,Xmax,Ymin,Ymax分别表示X,Y轴方向上的最小和最大值。

先说一下bit_value,其特点是不管字节区分,按照最小位数(bits)将值连续存储,在末字节中空位补0,比如两个9位表示的无符号值7,8将占用3个字节,表示为2进制就是:

00000011 10000010 00000000

将3个字节按位连在一起,前9位值为7,再9位值为8,在第3个字节的其他空位全部补0。简单了解了bit_value表示方式,再说RECT结构,该字段前5位(bit)为Nbits字段,表示后面字段的bit_value位长,是一个无符号数,也就是说最大值为为31,如此一来,整个RECT字段的最大长度为17个字节,也就是说swf文件头最大不超过29个字节。通过Nbits字段得到后面字段的bit_value位长后,就可以确定RECT的具体长度,继而得知“帧频”和“帧数”的存储位置。在RECT字段中,从第6位开始,存储的是播放窗口的尺寸数据,根据Nbits值,将后面的部分按位分开计算,即可得到相应值。但对文件标识为“CWS”的swf文件,从“文件大小”字段后面开始(即从第8个字节后面开始),是按照Zlib标准压缩存储的,所以,在解析swf文件头时,首先需判断swf文件是否按照压缩格式导出的。如果是以压缩格式导出的,则需先对头8个字节后面的内容进行解压缩处理了,再来处理RECT字段和“帧频”和“帧数”字段。

下面给出我写的swf文件头解析类及实例压缩包的地址:

swfHeaderParser

另外,在国外的许多网站上可以找到相关的内容,这里提供两个有代表性的地址,有兴趣的朋友可以去看看。

本文转自:http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/825.html

文章评论

php libswf,PHP停解析swf文件头相关推荐

  1. SWF文件格式说明书--SWF文件头

    SWF文件头 字段 类型 备注 标识 8位 标识字节: F代表未压缩 C代表已压缩(SWF6以后的版本特有) 标识 8位 代表W 标识 8位 代表S 版本号 8位 代表SWF文件的版本,比如0x06代 ...

  2. 文件头_常见文件文件头

    在日常生活中我们接触到很多软件,如QQ和微信等,这些软件都会对一些文件加密如图片加密成dat文件,这其中多数是利用文件的16进制编码进行异或运算进行加密.此处我们具体介绍一些常见的文件未进行加密前的文 ...

  3. swf文件格式解析入门(文件头解析)

    这里是使用as3语言来对swf文件做解析,其它语言可以参考. 一,准备工作 从Adobe官网下载一份swf文件格式说明文档 http://www.adobe.com/content/dam/Adobe ...

  4. 视频文件头解析--mkv

    MKV 的文件格式的目标是,成为多媒休包容格式的标准.它基于EBML(扩展二进制多媒体语言).与XML标记语言有点相似. EBML是类似于XML那样的层次化结构,每一个元素都有它的ID(就是元素名)和 ...

  5. 记:ELF文件解析初定义——文件头解析

    0x00 概论 因为TI的DSP输出文件与传统的ELF文件不符,所以本人就顺道研究了一下现在的ELF的文件格式. 会将其陆续完成在文章中. 阅读本文之前,您需要掌握的技能有: 技能名称 技能熟练度 技 ...

  6. java音频解析_wav音频文件头动态解析--java语言

    之前有处理过一些相对较为不常见的音频格式,也睬过很多坑,这里做一下简单记录.后面可能随着接触音频类型的增多做进一步更新,像之前有记录过包含LIST数据块的wav格式录音就是调试过程中发现遗漏点. 在此 ...

  7. 视频文件头解析之---avi

    AVI格式是音频视频交错(Audio VideoInterleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式,原先用于Microsoft Vid ...

  8. 视频文件头解析--wma

    wma文件结构示意图 格式的简单说明: 如图1,每一个WMA文件,它的头16个字节是固定的,为十六进制的"30 26 B2 75 8E 66 CF 11 A6 D9 00 AA 00 62 ...

  9. 视频文件头解析--wmv-浅析

    WMV格式浅析 WMV,全称Windows Media Video,是微软为其开发的若干音视频编解码器推出的视频压缩文件格式.WMV,也是一种编解码器,最早 设计用于互联网流媒体应用,主要针对的竞争对 ...

最新文章

  1. 传统网站与营销型网站区别盘比
  2. java堆内存和堆外内存_Java堆空间,本机堆和内存问题
  3. 洛谷P2016 战略游戏【树形dp】
  4. 面向对象第八天---预处理与mysql事务
  5. 视频云面向海量用户的分布式视频处理技术
  6. 比尔盖茨:若新冠病毒疫苗有效 富裕国家在2021年底恢复正常
  7. Apache Hadoop 项目介绍
  8. matlab设计滤波器
  9. 地理空间搜索 ->R树索引
  10. 嵌入式课程 之 超声波传感器实验
  11. 计算机出现假桌面怎么解决办法,win10专业版系统桌面经常假死解决办法
  12. PLATO上线LAAS协议Elephant Swap,用户可借此获得溢价收益
  13. python如何提取word文档某个段落所有内容(包括段落、表格、图片一并提取)
  14. Golang 基础:原生并发 goroutine channel 和 select 常见使用场景
  15. 西部数据移动硬盘设置密码教程
  16. C语言:小写字母与大写字母的转换
  17. pcb 受潮_高温潮湿对PCB电路板有影响吗?
  18. 拓嘉辰丰:拼多多订单退款流程有哪些?
  19. 面试官:谈谈分库分表吧?
  20. SOA之企业应用集成EAI

热门文章

  1. con排插与单片机相连_教你如何使用Labview和单片机通信(串口).pdf
  2. html检查元素是否溢出方法,JS判断指定dom元素是否在屏幕内的方法实例
  3. image 微信小程序flex_第三天学习微信小程序开发总结
  4. python idle使用教程_PythonIDLE使用教程
  5. 微服务_SpringCloud微服务架构实战:高并发微服务架构设计
  6. Visual Studio 2017在编译时出现错误E2512:功能测试宏的参数必须是简单标识符
  7. mysql数据库查询要注意事项_三种mysql高级查询技巧_数据库_mysql函数_课课家
  8. 计算机英语900句.pdf,计算机英语900句第一章第一课:概貌
  9. 用智能墨水打造超灵敏传感器 “写”到哪里感知就到哪里...
  10. Linux系统安装oracle时,orainstRoot.sh,root.sh脚本的作用。