程序设计实例(2)

  最近开发了一个可以显示PPT,PDF,图片,视频的播放器。我开发时是针对当前客户进行程序设计的,能满足当前用户的需求。至于将来程序设计合不合理我自己也不清楚,我完成的是阶段性任务,呵呵。

1. 需求

    (1) 能全屏播放PPT,PDF,图片,视频。

    (2) 可以远程控制启动/停止播放进程。

    (3) 用户可以通过触摸屏启动/停止播放进程。

2.系统结构

     系统结构这里不详细说了,把结果图画出来。

3.物理结构

    由于数据存贮量不大,在服务端,文件服务,数据库服务,WEB服务使用同一台服务器。终端方面,终端主程序和WCF服务,数据存贮器使用同一台终端机,事实上我们把终端主程序和WCF服务集成在一个应用程序里,在硬盘上建一个文件夹作为终端的数据存贮器。管理终端由客户的个人PC组成,通过浏览器访问WEB服务。结构图如下所示:

 

    和用户沟通时,有的客户会说,我这里有什么设备,要做什么功能,你看怎么做。还有一种就是我要做什么功能,你看需要什么设备。对第一种客户可能会比较难搞,他对成本的控制很严,要求不会少。

 

4.播放器程序设计

    首先,我们考虑播放器与调用程序的接口,大致可以使用以下方式:

    (1)播放器作为一组组件,由调用程序直接使用

    (2)播放器作为一个应用程序(exe),由调用程序通过以下方式使用

           启动:程序名 + /s +文件路径

      停止:程序名 + /p

     (3)播放器做成ActiveX的形式。

  第一种方式调用程序可以最大限度的控制播放器,但是增加了模块间的耦合度,开发不是很方便。

      第二种方式模块间的耦合度低,同时对播放器的控制力度也低。

  第三种方式介于前2种方式之间。

  使用哪一种接口好就要看你具体的需求了。我开始说过,开发时是针对当前客户进行程序设计的,至于将来程序设计合不合理我自己也不清楚,原因就在于此。对于当前项目来说,第二种方式最方便,简单,也就是我的选择了。

    下面,我们开始具体的程序设计。

     最开始,我的思路是做一个BAT文件作为引导程序,PPT,PDF,图片,视频的播放对应一个独立的exe。启动时BAT文件通过判断播放类型调用对应的exe进行播放。这样的好处是扩展播放类型很方便。当需要增加一种新的播放类型时,只需把新的EXE拷贝过来,修改BAT的脚本就可以了,不需要对原有的程序做任何修改。和同事讨论后,觉得这样会弹出提示符窗口,不太好(虽然只是闪一下,会被启动的播放器覆盖)。另外一个原因是关闭播放器不是很方便,需要播放器本身支持命令行关闭,或专门做一个关闭播放器的程序来给BAT文件使用。

    最后的决定是不使用BAT文件作为引导程序,而做一个专门的引导程序,所有的播放器均作为DLL库文件供引导程序使用。为了能扩展播放器,引导程序通过C#反射机制来动态加载播放器。

    设计方案确定了,就是具体的实现。

      (1)动态加载播放器:

            要动态加载播放器,首先要定义一个接口,所有的播放器都从该接口继承。有人说不定义接口也能动态加载,但我告诉你还不如定义一个接口。

        接口定义如下:       

namespace Signage.FilePlayer.Interface
{
public interface ISignageFilePlayer
{
void PlayFile(stringpath);
void Stop();
string GetPlayType();
}
}

    动态加载播放器的具体实现就不写了。原则就是引导程序遍历同目录的DLL,如果是支持ISignageFilePlayer接口,
根据GetPlayType()来确定是否使用该播放器,调用PlayFile(string path)启动播放,调用Stop()停止播放。

   (2)播放的启动、停止     

      前面说了,可以远程控制启动/停止播放,也可以通过触摸屏启动/停止播放。下面说说具体实现。

          通过触摸屏启动播放,是终端程序来完成的。终端程序使用【引导程序名 + /s +文件路径】命令方式启动播放器。

    通过触摸屏停止播放,是由播放器自己完成的,这时终端程序的画面不可见。播放器由2层窗口组成,上层是透明窗口,上面有一个半透明的停止播放按钮。下层是真正的播放窗口。

    远程控制启动/停止播放,由WCF服务来完成,WCF服务使用以下方式

        【引导程序名 + /s +文件路径】命令方式启动播放器。

        【引导程序名 + /p】命令方式停止播放器。

         终端程序也可是通过WCF服务来启动播放器,或按上面说的直接启动播放器。

         命令方式启动/停止播放器时还有一个小的技术问题。启动播放器是一个进程,停止播放器是另一个进程,希望你不要用Process Kill的强制方式来关闭播放器,而是用Windows消息机制来关闭播放器。Windows消息机制可以通过PostMessage()函数实现,执行你的关闭处理过程。

       最后给一个PPT全屏播放效果图(图上有3个透明按钮,左边2个为翻页,右边那个为停止播放)。

 

  

       

posted on 2010-08-06 17:52  钟湘光  阅读(438)  评论(0编辑  收藏  举报

导航