• 媒体品牌
    爱范儿
    关注明日产品的数字潮牌
    APPSO
    先进工具,先知先行,AIGC 的灵感指南
    董车会
    造车新时代,明日出行家
    玩物志
    探索城市新生活方式,做你的明日生活指南
  • 知晓云
  • 制糖工厂
    扫描小程序码,了解更多

新时代新潮流 WebOS【12】解剖 Adobe Flash

2009-03-21 22:05

前文说到,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 动画格式

  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 播放的稳定。

Illustration of Flash Animation

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 知道,它将播放的是一段视频或者音乐,然后它进一步识别这段视频或者音乐用的是什么编码格式,根据不同格式,选择相应的解码器。这里有两个问题:

  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 格式。

The video format H.264 and audio format AAC wrapped inside FLV

Figure 2. The video format H.264 and audio format AAC wrapped inside FLV

登录,参与讨论前请先登录

评论在审核通过后将对所有人可见

正在加载中

移动互联网的围观者、起哄者、以及肇事者。

本篇来自栏目

解锁订阅模式,获得更多专属优质内容