新时代新潮流 WebOS【12】解剖 Adobe Flash
前文说到,Adobe Flash 系统,包括三个方面,1. 制作工具,2. 播放器,Flash Player,3. 数据传输协议。理解 Adobe Flash 系统,或许可以从数据传输协议入手。数据传输协议体现在 Flash 的文件格式,Flash 的文件格式很多,其中最重要的有三个,SWF,FLV 和 AS。理解了这三个文件格式,Adobe Flash 制作工具和播放器,就不难理解了。
- SWF,传输动画的文件格式。用户一边下载.swf 文件,一边使用 Flash Player 播放。
- FLV,传输视频的文件格式,Flash 制作者可以把 FLV 作为一个独立的文件,用户一边下载.flv 文件,一边用 Flash Player 播放。也可以把 FLV 插入到 SWF 文件中去,作为一个片段。
- AS,ActionScript 的缩写。ActionScript 类似于 JavaScript,解决与用户交互的问题。
SWF 动画格式
- 整个 SWF 由若干 frames 按顺序串联组成,每个 frame 的结尾处有特殊的 tag(ShowFrame)作为标识。
- 每段 frame 的内容分成两部分,一部分定义该 frame 中出现的角色(character),譬如形体,图像,按钮,文字等等。另一部分控制这些角色显现的位置,移动和变形,以及配音的播放等等。
- Flash Player 开始播放一段 SWF 前,它先处理几段 frames。处理的结果,主要是把每一段 frame 的内容绘制在一幅 bitmap 上,把这幅 bitmap 缓存在内存中。当完成了若干幅 bitmaps 以后,就可以开始播放,播放过程中,逐步处理后续的 frames。
- 假如整个 SWF 中总共出现 N 个角色,不需要在文件初始一揽子把它们全部定义清楚,而是可以在后续的 frames 中,陆续添加角色。Flash player 开始播放前,会准备一份空白的角色名单。每出现一个新角色,就把它添加到名单中。
- 每段 frame 可以调用先前 frames 中已经定义过了的角色,但是不可以调用后续 frames 中定义的角色。这样做的好处,是 flash player 不需要下载完整的 SWF 文件,而是在下载了一部分数据后,就可以开始播放。一边播放,一边继续下载后续的数据。
- SWF 采用分段压缩,也就是把每段 frame 的数据分别压缩,而不是把 SWF 文件作为一个整体压缩。这样做的好处,是支持一边播放一边下载的功能。但是也有代价,因为分段压缩的压缩比,显然不如整体压缩比。
- Frame 中出现的角色和控制键,都是以 tag 的形式来定义。Flash 的制作者,可以自行定义特殊类型的 tags,以便扩充现有 flash 的功能。但是每增加一个新类型的 tag,不要忘记给 flash player 提供相应的插件。
- 如果 flash player 在播放某一个 SWF 文件的过程中,遇到不能识别的 tags,它会自动跳过,而不至于因为个别陌生的 tags,影响整个 SWF 文件的播放。这样设计的好处,是既方便用户扩展 flash 的功能,又保证 flash player 播放的稳定。
Figure 1. Illustration of Flash Animation
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 知道,它将播放的是一段视频或者音乐,然后它进一步识别这段视频或者音乐用的是什么编码格式,根据不同格式,选择相应的解码器。这里有两个问题:
- 譬如说有一段 MP3 的音乐,为什么不直接传输 MP3,而要在外卖裹一层 FLV 的包装,而 FLV 的包装并没有实际功能。
如果直接下载 MP3 音乐,那么播放时需要启动识别 MP3 的播放器。直接使用 MP3 播放器,播放.mp3 文件,比用 Flash Player,播放.flv 文件的效率高。因为.flv 文件里实际包括的就是那个.mp3 文件,丝毫不差。但是识别编码格式,选择相应解码器,这些都是中 间环节,中间环节多了,效率自然低。
让 MP3 成为音乐的标准格式,这是很多人的愿望。但是视频的标准是什么,众说纷纭,莫衷一是。不同网页使用不同的视频格式,用户浏览这些网页,需要事先下载并安装各种各样的视频播放器,烦不胜烦。
如果 Flash Player 能包含所有常用的视频播放器,那么无论用户浏览哪个网页,他只需要预先下载并安装 Flash Player 一套软件,就可以包打天下。更何况,反正 Flash Player 已经无所不在了,现在要做的,是扩充 Flash Player 的功能,使它能够播放更多格式的视频。 - 既然 FLV 支持 MPEG-4 旗下所有格式,为什么林立山头,把文件后缀定为.flv,不如干脆把文件后缀定为.mpeg4 好了。
实际上,Adobe 公司的确有意向,今后取消.flv 文件格式,而使用标准的.mpeg4 格式。
Figure 2. The video format H.264 and audio format AAC wrapped inside FLV