主题:【原创】新时代新潮流WebOS 【1】 -- 邓侃
【12】解剖Adobe Flash
前文说到,Adobe Flash系统,包括三个方面,1. 制作工具,2. 播放器,Flash Player,3. 数据传输协议。理解Adobe Flash系统,或许可以从数据传输协议入手。数据传输协议体现在Flash的文件格式,Flash的文件格式很多,其中最重要的有三个,SWF,FLV 和AS。理解了这三个文件格式,Adobe Flash制作工具和播放器,就不难理解了。
1. SWF,传输动画的文件格式。用户一边下载.swf文件,一边使用Flash Player播放。
2. FLV,传输视频的文件格式,Flash制作者可以把FLV作为一个独立的文件,用户一边下载.flv文件,一边用Flash Player播放。也可以把FLV插入到SWF文件中去,作为一个片段。
3. AS,ActionScript的缩写。ActionScript类似于JavaScript,解决与用户交互的问题。
[1] SWF 动画格式
1. 整个SWF由若干frames按顺序串联组成,每个frame的结尾处有特殊的tag(ShowFrame)作为标识。
2. 每段frame的内容分成两部分,一部分定义该frame中出现的角色(character),譬如形体,图像,按钮,文字等等。另一部分控制这些角色显现的位置,移动和变形,以及配音的播放等等。
3. Flash Player开始播放一段SWF前,它先处理几段frames。处理的结果,主要是把每一段frame的内容绘制在一幅bitmap上,把这幅 bitmap缓存在内存中。当完成了若干幅bitmaps以后,就可以开始播放,播放过程中,逐步处理后续的frames。
4. 假如整个SWF中总共出现N个角色,不需要在文件初始一揽子把它们全部定义清楚,而是可以在后续的frames中,陆续添加角色。Flash player开始播放前,会准备一份空白的角色名单。每出现一个新角色,就把它添加到名单中。
5. 每段frame可以调用先前frames中已经定义过了的角色,但是不可以调用后续frames中定义的角色。这样做的好处,是flash player不需要下载完整的SWF文件,而是在下载了一部分数据后,就可以开始播放。一边播放,一边继续下载后续的数据。
6. SWF采用分段压缩,也就是把每段frame的数据分别压缩,而不是把SWF文件作为一个整体压缩。这样做的好处,是支持一边播放一边下载的功能。但是也有代价,因为分段压缩的压缩比,显然不如整体压缩比。
7. Frame中出现的角色和控制键,都是以tag的形式来定义。Flash的制作者,可以自行定义特殊类型的tags,以便扩充现有flash的功能。但是每增加一个新类型的tag,不要忘记给flash player提供相应的插件。
8. 如果flash player在播放某一个SWF文件的过程中,遇到不能识别的tags,它会自动跳过,而不至于因为个别陌生的tags,影响整个SWF文件的播放。这样设计的好处,是既方便用户扩展flash的功能,又保证flash player播放的稳定。
Figure 1. Illustration of Flash Animation
Courtesy http://www.dedecms.com/upimg/20070117/11E00M5bF43427.gif
[2] FLV 视频格式
FLV是Flash Video的文件格式。其实FLV本身并不是一个视频格式,而是一个容器。容器里面可以装H.263,H.264, VP6或者其它格式的视频,同时可以装MP3格式的音乐。2007年8月推出的新版Flash Player 9,更是强大到,能够支持MPEG-4旗下诸多格式的解码,包括H.264(MPEG-4, P10),音频压缩格式AAC(MPEG-4,P3),MP4(MPEG-4,P14),屏幕下方文字走马格式3GPP(MPEG-4, P17)等等。
在Flash Player播放一段.flv文件时,Player知道,它将播放的是一段视频或者音乐,然后它进一步识别这段视频或者音乐用的是什么编码格式,根据不同格式,选择相应的解码器。这里有两个问题,
1. 譬如说有一段MP3的音乐,为什么不直接传输MP3,而要在外卖裹一层FLV的包装,而FLV的包装并没有实际功能。
如果直接下载MP3音乐,那么播放时需要启动识别MP3的播放器。直接使用MP3播放器,播放.mp3文件,比用Flash Player,播放.flv文件的效率高。因为.flv文件里实际包括的就是那个.mp3文件,丝毫不差。但是识别编码格式,选择相应解码器,这些都是中间环节,中间环节多了,效率自然低。
让MP3成为音乐的标准格式,这是很多人的愿望。但是视频的标准是什么,众说纷纭,莫衷一是。不同网页使用不同的视频格式,用户浏览这些网页,需要事先下载并安装各种各样的视频播放器,烦不胜烦。
如果Flash Player能包含所有常用的视频播放器,那么无论用户浏览哪个网页,他只需要预先下载并安装Flash Player一套软件,就可以包打天下。更何况,反正Flash Player已经无所不在了,现在要做的,是扩充Flash Player的功能,使它能够播放更多格式的视频。
2. 既然FLV支持MPEG-4旗下所有格式,为什么林立山头,把文件后缀定为.flv,不如干脆把文件后缀定为.mpeg4好了。
实际上,Adobe公司的确有意向,今后取消.flv文件格式,而使用标准的.mpeg4格式。
Figure 2. The video format H.264 and audio format AAC wrapped inside FLV
Courtesy http://farm4.static.flickr.com/3587/3372083431_f9b0a9e5d9_o.gif
- 相关回复 上下关系8
🙂邓兄谬赞了 1 t1000 字105 2009-04-08 03:53:17
🙂大家都认为硬件更新速度的摩尔定律 2 yueyu 字106 2009-03-27 10:33:31
🙂iPhone促进了手机硬件制造 邓侃 字114 2009-03-27 19:50:28
🙂【原创】【12】解剖Adobe Flash
🙂邓兄对于flash的了解好像跟我知道的不一样啊 1 早生华发 字39 2009-05-04 11:37:59
🙂何不写一篇反驳 1 邓侃 字58 2009-05-04 23:02:30
🙂Silverlight跟开源社区眉来眼去 1 大黄 字170 2009-03-25 09:33:03
🙂从技术指标看 邓侃 字54 2009-03-25 16:12:25