/ as

ActionScript3中的插件模式开发(二):主体

上次我分析了插件模式的一般特征,定义了主体、插件、插件管理器,并初步设计了各部分应该具备的功能。现在,让我们踏入代码领域,用具体案例分析如何创建主体,如何设计插件,又如何将二者组合联动。

我选择的范例是:视频播放器。

视频播放器

视频播放器视频播放器非常常见,拿我以前做的播放器来说,基本如下图:

视频播放器

常见的视频播放器包括两部分:视频播放窗口和控制面板。实际生产当中我们还会接到各种特殊需求,有些肉眼可见,有些则运行在后台,比如:片头广告、(播放完毕后)更多推荐、(时间轴上)关键点预告等等;这些需求,在不同的应用场景下又有各种组合:

  1. 嵌入页面播放视频广告,需要监测有多少用户观看,观看了多长时间,但不需要其它增强功能
  2. 放到专门的视频页时,就需要将片头广告、更多推荐都包含进去
  3. 被某个小网站借去改换外观重新上线时,只需要保留基础播放功能就好,因为没有人维护其它内容,想做更多推荐也做不了

如此这般对同一产品,因应用场景不同而产生不同的功能需求,就适用插件模式。要应用插件模式,首先咱们得划分出主体插件

播放器主体

直觉上,主体应该包括“可视的视频主体”和“控制播放的面板”两部分。具体到播放器产品,需要从页面中取得数据,所以我把解析外部参数的“配置信息解析器”也作为主体的一部分。于是主体应该有三大功能:

  1. 视频主体
  2. 基础控制面板(包括播放、暂停、音量调节等等)
  3. 配置信息解析器

这三个部分互相关联,耦合度较高,如下图所示。

主体结构简图

配置信息中包括影片的相关信息(这里只标出getMovieSrc的方法),供视频主体使用;控制面板利用视频主体暴露的方法来控制视频的播放、暂停,并根据视频头显示播放进度。

代码时间

(这里我假定读者有能力自行配置开发环境,并且对ActionScript3有着较深的了解。)

在Flash中实现视频播放器很容易,所需工具都已经给我们封装好了,直接调用即可,以前没了解过的话可以参考Video类的文档,最后面的实例部分写得很详细。

不过这次我会把NetStreamNetConnectionVideo放在一起,组成新类VideoBody。目前来看我的主要需求是播放静态文件,这样做将播放逻辑封装起来,利于操作。

接下来,我需要一个类来处理传入的参数。通常情况下我们会面临两种需求:一是直接播放视频文件;另一种常见于视频网站,传入视频ID,然后通过访问特定接口取得完整的视频信息(当然也可以直接传入视频信息)。所以我创建了一个数据类MovieInfo来干这些事情。

最后,还有控制面板。不得不说控制面板其实挺难搞的,尤其是我们需要适应不同的分辨率,收缩布局绘图真是件挺麻烦的事儿,谁让Flash里缺少组件和布局呢。因为暂时不准备放哪儿用,所以我只是随便画了个方块,做播放/暂停。

所有的代码可以在本系列的范例代码中看到。我会为每一章打上tag方便查找。

结语

这一章里,我选定视频播放器作为后面几章讨论的核心,并且从中选出视频、控制、信息等作为核心逻辑放到主体里面。

下面一章,我会展示插件管理器和插件基础的做法。