【VC++开源代码栏目提醒】:网学会员为广大网友收集整理了,flash播放器论文 - 多媒体,希望对大家有所帮助!
本 科 生 毕 业 论 文(设计) Flash 播放器 FlashPlayer姓名与学号 何涛 3010141035指导教师 翁 恺年级与专业 2001 级软件工程一班所在学院和系
软件学院 本科生毕业
论文(设计)任务书一、题目:二、指导教师对
毕业论文(设计)的进度安排及任务要求: 起讫日期 200 年 月 日 至 200 年 月 日 指导教师(签名) 职称三、系或研究所审核意见: 负责人(签名) 年 月 日 摘 要 Macromedia 公司的 SWF 文件格式,这是一种矢量图象和动画。
这种文件格式被设计成非常适合在网络上传输。
通过嵌入在网页的 Flash 播放插件或者独立运行的 Flash 播放器,用户可以享受到精美的 Flash 动画。
SWF 文件发展到现在,已经经历了多个版本、现在最新的版本是 7.0.从 6.0以后,SWF 文件格式的改变就比较少了,而是在 ActionScript 层面实现了很多新的功能。
本文介绍的是一种 Flash 播放器的实现,暂时还不支持 ActionScript,只能支持一些比较老的标签,但是也支持了一些比较新的特性,比如压缩技术.。
本文的实现是建立在 windows 平台上的,利用
vc 作为开发环境,利用 GDI 和 GDI绘图。
关键词 Flash 播放器 GDI GDI ABSTRACTThe Macromedia Flash file format SWF pronounced “swiff ” delivers vectorgraphics and animation over the Internet to the Macromedia Flash Player. The SWFfile format is designed to be a very efficient delivery format, not a format forexchanging graphics between graphics editors.The user can enjoy the wonderfulmovie throught the plug-in in internet brower or standlone Flash player. The SWF format has gone through several versions. Through SWF version 5,substantial additions were made to the SWF tag set. Starting with SWF version 6 andlater, there is less change in the SWF format, as more and more new Flash featuresare implemented partly or entirely at the ActionScript level. This paper introduce a kind of implementation of Flash player,it supports asubset of all the SWF tags.Unfortunately,it doesn’t support ActionScrip now,so itcan only support SWF version up to version3 or version4.But,it also support someadvance features,such as the compression of the file.My implementation is based onwindows platform,using
vc,GDI,GDI.Key
word FlashPlayer GDI GDI目 录本 科 生 毕 业 论 文(设计) ..........................................................................................................1摘 要....................................................................................................................................................3ABSTRACT ............................................................................................................................................3第一章 绪论............................................................................................................................................6 1.1 背景...............................................................................................................................................6 1.2 意义................................................................................................................................................6 1.3 本文的内容和组织 ........................................................................................................................7第二章 系统功能与限制 ........................................................................................................................8 2.1 FLASH 播放器的功能 ..................................................................................................................8 2.2 FLASH 播放器的限制 ..................................................................................................................8第三章 相关工作 ....................................................................................................................................9 3.1 GAMESWF....................................................................................................................................9 3.2 GPL FLASH...................................................................................................................................9 3.3 SSWF .............................................................................................................................................9 3.4 已有的 OPEN SOURCE 播放器与本文所介绍实现的比较 ....................................................10 3.5 本章小结.....................................................................................................................................10第四章 总体设计 .................................................................................................................................. 11 4.1 系统组成..................................................................................................................................... 11 4.2 解析 SWF 文件........................................................................................................................... 11 4.3 渲染 FLASH 电影 ......................................................................................................................12 4.3 如何播放一个 SWF 文件...........................................................................................................14 4.4 关于压缩版本的 SWF 文件的处理 ............................................................................................18 4.5 本章小结......................................................................................................................................18第五章 详细设计 ..................................................................................................................................19 5.1 部分类结构图.............................................................................................................................19 5.2 SWFFILE 类的实现 ....................................................................................................................19 5.3 CSWFMOVIE 类的设计 .............................................................................................................20 5.4 CHARACTER 和 DICTIONARY 的设计 ..................................................................................21 5.5 DISPLAYLIST 的设计................................................................................................................21 5.6 一些 TAG 的具体实现...............................................................................................................22 5.6.1 DefineShape ..........................................................................................................................22 5.6.2 DefineSprite ..........................................................................................................................24 5.6.3 DefineBitsJPEG2 ..................................................................................................................25 5.6.4 DefineSound ..........................................................................................................................25 5.7
代码实现的一些细节问题 .........................................................................................................26 5.8 本章小结.....................................................................................................................................28总结与展望............................................................................................................................................29 6.1 全文总结.....................................................................................................................................29 6.2 未来的工作.................................................................................................................................29参考文献................................................................................................................................................30致谢........................................................................................................................................................31第一章 绪论1.1 背景 FLASH 电影是专为网页服务的画像或动画当然,也可用于其它用途。
主要含有矢量图形,但是也可以包含导入的位图和音效,还可以把浏览者输入的信息同交互性联系起来,从而产生交互效果,也可以生成非线性电影动画。
该动画可以同其它的 WEB 程序产生交互作用。
网页
设计师可以利用 FLASH 来创建
导航控制器、动态 LOGOS、含有同步音效的长篇动画、甚至可以产生完整的、富于敏感性的网页。
FLASH 电影是由压缩的矢量图形组成,所以,FLASH 电影可以很快地下载和充满浏览者的屏幕。
你很可能已观看过好多 WEB 站上的 FLASH 电影,并且同这些 FLASH 电影发生 过交互行为,有数不清的网站采用了 FLASH 电影,如迪斯尼、辛普生、可口可乐。
更有数不清的网页浏览者在电脑中、浏览器里或者系统软件里安装了 FLASH 播放器,还有为数更多的人从因特网上下载 FLASH及其播放器。
FLASH 播 放器同其它的媒体播放器相同,可以驻留在本地主机里,用来回放浏览器中 的 FLASH 电影或者quotSTAND ALONEquot程序。
用 FLASH 播放器回放 FLASH 电影如同用录放机回放录像带一样--FLASH 播放器就是用来回放用 FLASH
程序创建的 FLASH 电影的quot设备quot。
Flash 文件的文件格式是 SWF.SWF发音 swiff是用来描述主要由两种元素构成的影像文件格式:以矢量为基础的物体和图像.最新版本还支持声音以及和终端用户的交互.这种文件格式最初是由 Macromedia 公司发明的,主要的目的是创建具有高度交互动画的而且个头小的文件.他们的想法是由一种文件格式能够被任何系统上的播放器所重用,能够工作于很慢的
网络上比如 modem 拨号.这种格式也是非常简单的.1.2 意义 在 Flash 盛行的今天,制作一个自己的 Flash 播放器无疑是有很大工程性意义的。
了解 SWF 文件的格式,就可以学习到 Flash 如何有效的组织一个 movie的内容,使得 Flash 能够在即使很差的网络条件下让用户正常的欣赏到漂亮的动画。
然而,有了自己的播放器,我们可以加入一些自己的标签,比如做一些认证,使得这个 SWF 只能自己的播放器才能播放。
从理论层面上来讲,学习 SWF 文件的格式,必然是一个有趣的工作,因为你可以学到很多新的东西,对于以后的
学习都是有借鉴意义的。
而且只知道格式是不够的,我们需要设计自己的图形渲染方式,如果用 3D 的图形渲染引擎,比如用 opengl,或者用对 opengl 做了一些封装的 sdl,甚至 D3D.或者 2D 的图形库,比如 qt,gtk,GDI,GDI等等,存在一些选择。
SWF 文件涉及到很多的东西,比如说视频音频的解码,虽然这些东西我们可以依靠一些现有的库来完成,比如 libmad,libjpeg,但是也可以扩张我们的知识面,锻炼我们的学习能力,这对于从事
计算机业的人来说是非常重要的事情。
1.3 本文的内容和组织 本文主要讨论 Flash 播放器的实现。
第二章讨论 Flash 播放器的功能需求和设计实现中的功能限制。
第三章将介绍一些与 Flash 播放器有关的现有研究工作,并与本文的设计进行综合比较。
第四章将介绍 Flash 播放器的总体设计情况。
第五章将就系统设计中的关键点进行更为细致准确的分析。
第六章将总结以上内容,并对未来的
工作做出预测。
第二章
系统功能与限制2.1 Flash 播放器的功能一个完全的可用的 Flash 播放器应该支持以下功能: 显示 SWF 文件中定义的图像,文字 播放 SWF 文件中定义的声音 支持 SWF 文件中定义的 ActionScript2.2 Flash 播放器的限制本文所介绍的 Flash 播放器有如下限制 1. 整个系统建立在 windows 平台上,而且只能在 vs.net 环境下编译运行。
而 且使用了 GDI,进一步限制了跨平台性。
2. 由于时间限制,暂时不支持 ActionScript,不支持一些比较复杂的 SWF 内 部定义对象,比如嵌套的 sprite 对象。
第三章 相关工作 关于 Flash 播放器,前人已经做了一些工作。
当然最完善的 Flash 播放器就是 MacroMedia 的官方播放器,但是它不是
开源的,所以对于我们的实现没有任何借鉴意义,下面介绍的都是 open source 的项目。
下面就这些工些做一些简要的介绍。
3.1 gameSWF GameSWF发音”game swiff”是一个
开源的库,用来解析和渲染 SWF 电影。
GameSWF 利用 3D 硬件 API 进行渲染,被设计用来为
电脑游戏做界面。
用C编码,通过 GCC,在多种平台下都可以编译,比如 Windows,Mac OSX,Linux。
GameSWF 有很多的 bug 和一些不尽如任意的地方,而且它不是对 Flash 格式的完全实现。
它的
代码并没有高度优化,比如对内存的使用方面。
而且GameSWF 没有相应的文档,据作者说,可能以后也不会有很好的文档。
不过相对与 Macromedia 的 Flash player,由于 GameSWF 是利用 3D 硬件加速,所以会有比较快的渲染速度。
由于 GameSWF 没有
文档,
代码结构相对复杂,而且这个项目本身是定位在制作游戏 Flash,使用 SDL 渲染,经测试,在 P4 1.6,256DDR RAM,MX400显卡的 PC 机上运行效果非常不理想。
不过它为本文的实践提供了一个最初的运行模型。
3.2 gpl Flash 这是一个只能在 linux 平台上运行的库,同时提供了独立的 Flash 播放器,以及 mozilla 的
web Flash plug-in.它是利用
linux 下的 2D 图形库进行渲染。
这个库本文作者没有实际测试过。
Gpl Flash 同样没有
文档,然而它比 gameSWF 很好的一个地方是
代码相对简洁,类结构分明,为本文介绍的实现提供了比较大的借鉴意义。
3.3 SSWF 与以上两种不同,SSWF 不是播放器,而是 SWF 的生成器。
它定义了自己的一套脚本语言,使得用户可以在脱离 IDE 的情况下生成简单的 SWF 文件。
这个项目的对于本文的意义在于为播放前 SWF 文件的分析提供了很好的帮助。
该项目提供了一个工具 SWF_dump,可以分析某个 SWF 文件,并且将详细的分析结果显示出来,这对于本文具体程序实现过程中确定解析过程中的正确性提供了很好的帮助。
3.4 已有的 open source 播放器与本文所介绍实现的比较 已有的两个项目主要都是运行下 linux 系统下的,而本文所介绍的实现则是希望它运行在 windows 系统下的,相应的,绘图也使用 GDI 和 GDI。
虽然这么做会丧失掉可移植性,但是却能换来更好的性能。
在具体
代码编写中,我希望各种类的层次结构更加分明,同时有详细的文档,以便以后扩充功能,改进实现。
3.5 本章小结 本章主要介绍了关于 Flash 播放器及其相关工作的一些现有的 open source的资料,以及它们与本文所介绍实现的一些对比。
第四章 总体设计4.1 系统组成一个 Flash 播放器主要应该由两部分组成: 1. 对于 SWF 文件的解析 2. 对于解析结果的显示 本文所介绍的系统实现是建立在 windows 平台上的,开发工具的选择上,为了方便的使用 GDIPLUS,选择了
VC.
NET。
.4.2 解析 SWF 文件 正确的解析 SWF 文件是播放 Flash 的必要前提。
这里,我们主要用到了两个文档,它们是 macromedia 公司提供的 Flash_file_format_specification,以及Alexis SWF Reference,而主要用到的又是前者,因为它提供了更加详尽准确,最新的关于 SWF 文件格式的资料。
SWF 文件是一种二进制的文件格式,它不像 html 那样的直接可读。
为了节约空间,它的文件结构是非常紧凑的,处理的时候需要详细到 bit 一层去处理。
由于 C 语言提供的文件操作函数都只能操作到 byte,所以实现一个能够处理 bit的文件操作类是制作播放器的必要工作。
SWF 文件是一种标签式的文件结构,如下图所示,每个文件开头都是一个header,它提供了关于这个 Flash 电影的最基本信息,比如文件版本,播放屏幕的长和宽,播放帧率,是否使用压缩等等。
SWF 从 6.0 版本开始支持
压缩,所有压缩过的文件都以”CWS”开头,未压缩的以”FWS”开头。
如果是压缩版本,那么我们要做的第一件事情就是通过
免费的 zlib 库将后面的内容解压缩,这也是继续解析的前提。
SWF 文件里面的每一个 tag 都是由一个 header 和其具体内容组成的。
它的header 包括两个 tagcode 和 taglength.tagcode,如图: 图 错误!未定义书签。
SWF 文件结构下面分别说明: TagCode 说明了该 tag 的类型,直到 SWF7.0 版本,SWF 一共支持 60 余种tag,相应的,我们的播放器能够支持多少种 tag,直接决定了播放器的完善程度。
我们把这些 tag 分成两个大类,用于控制的 tag 和用于定义对象的 tag,比如SetBackgroundColor,PlaceObject 就是属于前者,DefineShape,DefineFont 就属于后者。
。
TagLength 说明了该 tag (这些 tag 的详细设计,将在后面章节讲到)的总长度。
这个设计能给播放器的实现带来一个非常好的地方就是,当我们的播放器并不能支持某些 tag 的时候,我们可以直接忽略到这个 tag,直接去处理下一个 tag.。
这个功能没有 TagLength 的帮助是无法实现的,因为如果我们不去处理这个 tag,我们就不知道它究竟有多长,因为很多 tag 是变长的。
当某个 Tag的 TaCode 等于 0 的时候,说明这是 EndTag,整个 SWF 文件就结束了。
每个 tag 都是由 SWF 文件的基本数据类型和另外一些 tag 组成。
SWF 文件的基本数据类型和 C 语言类似,最主要的区别在于浮点数的表示和位域的增加。
SWF 文件里面有一种数据类型叫做 FixPointNumber定点小数, 定点小数是 32位,高 16 位存储小数点以前的整数部分,低 16 位存储小数部分。
比如,小数7.5 就等于 0x0007.8000 在 SWF 文件里面被存为 00 80 07 00。
位域操作的时候主要
问题在于位域是不需要做字节对齐的,如下图: 图 错误!未定义书签。
位域操作 从 byte1 开始,如果有一个 6 个 bit 的位域,它的下一个数据是一个长 5 个bit 的位域,这个数据的第一个位是从 byte1 的第 7 个 bit 开始的,而不是从 byte2的第一个 bit.我们看到从 Byte7 开始是一个 UI16基本类型之一,16 位无符号整数,它并未从 Byte6 的第 5 个 bit 开始,因为它是要做字节对齐的,Byte6 的 5-8位由 0 填充。
具体的跨字节读数据将在以后章节讲到。
由于 SWF 文件是二进制格式,所以读数据的时候必然涉及到字节序的问.