视频播放器 第1节 设计方案

第1节 设计方案

1.1 可能的功能点

虽然是一个简单视频播放器,但是麻雀虽小五脏俱全,可能需要备以下功能:

  1. 将设备上存在的视频展现出来;
  2. 能显示某个视频详细的信息,例如视频文件大小、视频分辨率等等;
  3. 选择某个视频后,能够播放视频;
  4. 播放视频时能够控制视频的暂停、继续、快进、快退;
  5. 可以全屏幕的播放视频;
  6. 可以提供给系统使用,作为播放视频文件的可选播放器;
  7. 如果有电话接入,播放器能够自动暂停播放;
  8. 可以管理视频文件,例如删除某个或者多个视频;
  9. 视频可以悬浮于其它应用之上播放,一边刷微信,一边看视频;

1.2 功能广度与功能深度的权衡

每个功能看上去一句话就说完了,但是仔细分析起来,却有很多细节需要考虑。
例如功能1,如果将设备上所有的视频都展现出来,那么,

  1. 可能会消耗很长的时间;
  2. 每个视频都要有缩略图,如果搜寻这些视频文件的时候,同时为它们创建缩略图,也许会非常消耗内存,假如视频非常多,那么有可能会耗尽安卓系统分配给一个应用最大的内存使用量,导致程序崩溃;
  3. 播放器在查找视频文件并显示出来的过程中,如果用户通过别的工具把这个已经显示到列表的文件删除了,例如播放器正在刷新列表,把文件1.mp4显示到了列表中,这时用户通过PC端的手机管理软件,把1.mp4这个文件从设备上删除了(播放器刷新视频文件的过程还没有结束),那么手机的显示列表上要能马上发现这个意外,再次更新;
  4. 也可能设备上有很多短小的视频文件,可能只有几十K或者几百K,根本就不是用户关心的视频,例如微信上接受的短小视频,用户就不会使用我们的视频播放器进行播放;
  5. 也可能用户根本不愿意播放器找出某些“敏感”的视频文件;

这都是我们在开发中需要去实实在在解决的问题。功能1遇到的这些问题,我们都可以通过良好的设计来解决它。不过代价也许就是,

  1. 增加了程序的复杂度,花费更多的开发时间;
  2. 为了解决一个问题,而引入另外一个更佳不易解决的问题、引入另外一个潜在的bug;
  3. 开发钻进了死胡同,到处都是要解决的问题,不知如何开始了;

要知道,这还只是功能1中提出的问题,不知道别的功能点还会将一个应用的复杂度增加到什么样的地步。

所以,对项目规划的设计师和程序的开发者来说,需要在单个功能完备的深度与多个功能的实现广度上,作出智慧的取舍。

好在软件的发布并不是一锤子买卖,可以在发布以后,再对它进行升级。所以我们通常先把最为重要的功能做出来,而对于这些最重要的功能则采用最容易实现的方案。

以后再对功能做出扩充,对实现的方案加以修改,逐步变的越来越完美。这个过程也更适合初学者一步一步的掌握程序设计的思路、积累开发的经验,知道同样一个功能,怎么设计更加合适,为什么要这样设计。

于是,对于我们第一个版本的视频播放器,我们将尽量采用最简单的设计,不去太多的考虑它的程序结构和执行效果,重点是用简单而正确的方式把功能做出来,以后再在新的版本中迭代优化。

1.3 现阶段的功能

为了简化问题,我们先对视频播放器允许的环境和功能做出这样的假设:

  1. 只读取特定目录下的视频文件,例如名称叫做Video的目录;
  2. 假设用户没有那么BT:在展示视频列表的时候,用别的工具,把已经展示上去的文件给删除了;
  3. 在列举视频文件的时候,因为耗时可能很长,所以可以选择暂停;
  4. 视频文件的数量不会多的特别离谱,上千上万个视频是不会遇到的;
  5. 只播放系统原生支持的视频格式;
  6. 播放器在横屏的时候,自动切换成全屏;在竖屏的时候,占用部分区域,剩下的区域显示视频详细信息;
  7. 没有视频的播放记录,用户主动退出的情况下,下次再播放同样的视频会从头开始;
  8. 没有视频的管理功能,不能改变视频文件的位置,不能删除它,不能修改文件名字;
  9. 没有悬浮播放的功能;

因此,对视频播放器的界面进行了如下的设计:

1.4 关于遗憾

对于那些没有在这个阶段加入的功能,期待以后加入吧;

对于那些为了简化开发难度、减少开发时间而采用的简单设计,期待在下一版程序中优化和完善吧;

当然,别忘了这个应用的目标是:教会大家更多的安卓开发技能。所以在选择实现方案的时候,着重于原理的展示,而不一定采用执行效率最优的方案。