张建平
(陕西工业职业技术学院, 信息工程学院, 陕西, 咸阳 712000)
课题提到了智能电视包的主要应用软件[1],智能电视之所以智能就是因为支持更多的应用软件系统,用户可随意安装和卸载。电视作为一个以家庭为核心的产品,音频、视频是历来必须支持的功能,图片浏览系统作为智能电视的一个特色应用,让图片以不同的形式显示,带来不一样的用户体验。
目前市场上的智能电视中图片浏览系统应用多采用 PC 上的图片浏览系统或者沿用 Android 自带的图片浏览系统 Gallery3D。 Android 自带的 Gallery3D 虽然采用了三维用户界面,但其只适用于手机,移植到电视上不能满足高清显示的要求,对大图片的解码速度较慢;PC 上的图片浏览系统显示效果较为死板,不能满足当前人们对审美的需求。所以开发出一个功能实用,运行速度快,显示效果绚丽、高清的。基于 Android的智能电视平台的图片浏览系统[2],是非常有市场价值的一个项目。如图1所示。
图1 智能电视基本应用
(1) Android 基本组件
Android 是一个基于组件的结构平台,Android 应用程序一般是使用一个或者几个基本组件相互组织而成的,这些基本组件包括:Activity、Service、BroadcastReceiver、ContentProvider。所有用来构建 Android 应用程序的组件都需要在 AndroidManifest.xml文件中注册,这是每个 Android 应用程序所必须有的一个 XML 配置文件,用于声明应用程序组件以及它们的特性和要求。
(2) Android 进程间通信
Android 利用不同的组件来表示进程之间的通信,为减少组件间的耦合,Android供了 Intent,Intent 提供了一种通用的消息系统,它允许在应用程序和其他应用程序传递 Intent 来执行动作和产生事件。通过 Intent 可以开启一个 Activity 或者 Service,无论这个 Activity 或者 Service 是属于当前应用还是其他应用的。Intent 这种基于消息进程内或者进程间通信模型有一个弊端,就是如果 Activity 与 Service 之间的交互不简单的 Activity 开启 Service 操作,而是要即时发一些控制请求,这时就必须要保证activity 在 Service 的运行过程中随时可以连接到 Service。
(3) Android 消息机制
在 Android 中,线程内部或者之间进行信息交互通常会使用消息。Android 提供了Handler 来实现线程间的通信。例如一个子线程从网络下载了一幅图片,当下载完成后会发送消息给主线程 (UI 线程一般就是主线程)[3], 这个消息通过绑定在主线程的 Handler来传递
(4) Android 数据存储
数据存储是所有应用程序都涉及的问题,任何应用软件的运行都必须以数据存储为基础,数据必须以某种方式保存,不能丢失,并能有效、简洁的使用和更新这些数据。在 Android 中,提供了三种数据存储的途径分别满足不同需要,它们是SharedPreferences、Files、SQLite。
OpenGL 是个专业的 3D 程序接口, 是一个功能强大, 调用方便的底层 3D 图形库[4]。在PC 领域,一直有两种标准的 3D API 进行竞争,OpenGL 和 DirectX。一般主流的游戏和显卡都支持这两种渲染方式,DirectX 在 Windows 平台上有很大的优势,但是OpenGL 有更好的跨平台性。
OpenGL(全写 Open Graphics Library)提供了开发几何模型的功能,其中最基本的几何元素是顶点,它代表三维空间中的一个点,通过若干个点可以构建简单的二维图形,而通过不同的二维图形可以搭建复杂的三维立体模型。例如多边形就是由点构成,而三维物体是由多个多边形组成。OpenGL 支持多种多边形。
Android 3D 引擎采用的 OpenGL ES 是一套为手持和嵌入式系统设计的 3D 引擎 API。OpenGL ES 是对OpenGL进行裁剪后而形成的一套标准,由于嵌入式系统和pc相比,CPU、内存等都比 PC 差很多,而且对能耗有着特殊的要求,许多嵌入式设备并没有浮点运算协处理器。 针对嵌入式系统的以上特点, Khronos 对标准的 OpenGL 系统进行了维护和改动,以期望满足嵌入式设备对 3D 绘图的要求。
本文要开发一个基于智能电视的图片浏览系统,主要是为了满足用户查看外部存储设备中图片的需求, 智能电视在开机后, 用户插入外设 (这里的外设指 SD 卡, 硬盘,U 盘) ,用户打开图片浏览系统,系统开始取当前外设的数目和类型,并以三维用户界面展现给用户,然后用户可以选择想要查看的设备,接着系统提供“所有图片”和“拍摄日期”两种模式供用户选择,即可看到以三维用户界面展示的图片缩略图,界面焦点的切换和屏幕的翻页有动画效果,用户可以选择某一张图片的缩略图点击进入查看大图片,即进入图片播放器,播放器提供自动播放和手动播放两种方式供用户选择,播放过程支持多种动画效果,支背景音乐播放还可以对播放过程中的形式、速度、音乐等进行设置,也可以查看图片的详细信息。
以三维用户界面形式查看外设中的图片,享受现代科技带来的一种新体验,其功能需求如下:
1) 扫描外设内容
这部分独立于图片浏览系统单独运行,智能电视一旦启动,监测程序相继启动,持续监听是否有外设插入,当发现有外设插入时,就会立即扫描外设的多媒体文件信息,存储到数据库中,以备其他应用系统使用;当检测到外设拔出,及时清除数据库中的多媒体信息,保证数据库的实时更新。扫描外设内容的用例图如图2所示。
图2 扫描外设内容用例图
这部分是图片浏览系统正常运行的前提,如果监测到没有外设,数据库就没有信息,图片浏览系统就没有可显示图片,只能提示用户当前没有外设插入。所以不管是清除还是存储图片信息都必须执行检测外设用例。
2) 外设的数目和类型的动态刷新
硬件设备的状态总会发生各种变换,如接口松动导致设备掉线,这时就系统就需要及时检测到这些状态的变化,并将这一变化反馈给图片浏览系统。这一点对系统非常重要,因为用户查看的是硬件设备中的图片资源,设备状态发生变化都不能及时检测到将会导致信息错误。在用户打开图片浏览系统之后,持续监听是否有外设插拔事件,并根据当前拔出的设备是否在被访问作出相应的响应。外设信息获取的用例图如图3所示。
图3 外设信息获取用例图
外设信息的及时获取是至关重要的,是为外设管理窗口显示提供信息。外设挂载信息在 Linux 中的更新并不及时,需要在获取挂载信息之后再对外设的状态确认,所以外设状态检测在这里并不多余。在外设管理窗口各个外设图标响应遥控器按键时,以立体空间中的圆形为轨道切换位置。
3) 图片播放
除了包含一般图片播放器具有的幻灯片播放、放大、缩小、上一页、下一页、旋转,图片信息显示[5]等基本功能外,还外加了背景音乐播放,图片播放参数设置。图片播放用例图如图4所示。
图4 图片播放用例图
图片播放的相关功能有十个,其中音乐播放功能通过跟音乐盒应用(智能电视系统的一个应用)通信来启动;设置播放参数功能是比较重要的部分,主要包括设置幻灯片播放的时间间隔、播放的动画过渡形式、播放[6]的幻灯模式以及当前播放音乐的目录,这里的音乐信息也来自当前外设。其中图片幻灯播放时间间隔可选项为四种分别为 3 s、5 s、8 s、15 s;播放的幻灯模式包括随机播放和顺序播放两种;而播放过程中的过渡方式包含影视效果、叠加、横移、竖移、扩大、直接切换、减弱、随机。其中动画形式;音乐播放目录的查找要通过一定的方式在当前外设中去查找,而音乐具体的启动流程都依赖于音乐盒应用是否启动,如果启动本系统中的音乐启动按钮视为无效。
通过用例图静态地描述了系统的功能需求,为了对系统的整个工作流程有更清楚的认识,本小节通过创建动态模型[7]来对系统的一些关键流程进行描述。
如图5所示的活动图是图片信息保存的活动图。数据库对图片信息的及时存储是图片浏览系统运行的前提,当用户打开图片浏览系统时,从数据库查找相应的图片即可。这部分流程主要通过扫描模块来完成,当用户打开智能电视,电视初始化完毕之后持续监听外设插拔事件。当发现有外设插入事件,即执行将外设中的音频、视频、图片的信息保存到数据库操作;当监听到外设拔出操作,将相应外设的多媒体信息从数据库中清除。对于本系统来说只需要及时的存储以及清除图片信息,保证图片信息的实时准确性即可。而对于整个智能电视平台,存在着类似于图片浏览系统的音视频应用,所以音视频的获取是非常必要的,因此在此扫描模块对各个应用的正常运行起着非常重要的作用。
图5 多媒体信息存储活动图
缩略图浏览[8]是图片浏览系统很重要的部分,这部分为了提升用户体验,不通过现有的控件加载,而是通过 OpenGL ES 来绘制场景中的各个物体。图6是系统动态加载缩略图的活动图。当用户完成了对浏览模式的选择操作,系统执行查询数据库操作,如果这时数据库没有查到相关图片信息,系统弹出相应的提示。否则,按照 OpenGLES 的实现方式,按照查询到的待显示图片数目创建相应数目的几何模型并指定几何模型的起始位置、结束为止、动画帧数等,然后通过纹理映射对各个模型进行相应的纹理贴图[9]。在纹理加载的过程中,持续监听是否有遥控器上下左右按键操作,如果有并且在屏幕内执行相应的焦点切换以及动画操作,如果焦点切换到屏幕边界要执行翻页动画,并优先显示用户感兴趣的图片。当某张图片被选中即为焦点显示时,显示效果要与其他图片不同,在焦点移动过程中图片一旦被选中,就执行向屏幕外移出动画,给用户一种图片走出屏幕靠近自己的视觉效果。
图6 动态加载缩略图活动图
(3) 图片浏览系统性能需求
系统的性能需求主要包括系统的稳定性和响应速度。本系统的响应速度包括外设插拔的响应,动画切换速度,图片解码速度,查询数据库速度[10]。外设插拔响应速度原则上是不影响用户的正常操作;一般用户能明显感觉到的延迟时间是 200-600 ms,所以在系统的所有界面保证动画效果流畅,一般为毫秒级,即用户感觉不到明显的动画卡死、响应慢,原则不因为动画过程是否流畅而影响用户体验。图片解码速度根据图片大小而不同,一般以正常的一张大小为 4 M 的照片为例,平均解码速度不超过 40 ms;数据库查询速度 10 000 张图片最好不超过 4 s。
(1) 图片浏览系统的总体结构设计
系统的设计目标为基于 Android 的智能电视图片浏览系统的实现,总体框架设计如图7所示。要求完成用户插入外设到电视,浏览外设中的图片信息和设备信息等功能。该系统的开发主要是为了满足当前用户对现代智能电视[11]的一种新的体验。要求所有外设中的图片能够以三维用户界面呈现给用户,并且提供丰富的动画效果。
图7 图片浏览系统框架图
(2) 图片浏览系统的功能模块设计
根据系统功能总体框架将系统进行功能模块划分。图8是系统的功能模块划分结果。将系统划分为四个功能模块:多媒体信息扫描模块[12]、外设管理模块、缩略图浏览模块、图片播放模块。其中多媒体信息扫描模块是后台执行无界面,该模块一旦启动就不能停止,持续运行,随着智能电视的开启而启动,智能电视的关闭而终止,生命周期不依赖于图片浏览系统。其他三个模块是本系统的核心模块,包含了即时取并显示外设列表,显示外设中的图片缩略图,根据用户选择执行相应图片的播放等功能。
图8 系统功能模块图
下面对各个功能模块的功能进行概括描述。
多媒体信息扫描模块:负责对当前插入电视的外部存储设备进行扫描并存储其中的音频、视频、图片的相关信息到数据库[13];当发现外设拔出时,及时更新数据库中的信息。该模块独立于图片浏览系统运行,但是是图片浏览系统运行不可或缺的一部分。
外设管理模块:该模块主要负责实时取设备列表,及时更新设备列表,并根据设备的状态做出及时的响应。通过一个三维界面实时的展示设备列表,通过遥控器左右按键,设备图标旋转切换焦点。
缩略图浏览模块:该模块主要显示图片的缩略图信息,用户按照不同的需求选择“所有图片”或者“拍摄日期”两种浏览模式中的一种,然后系统按照需求展示不同形式的缩略图界面[14],整个过程中需要访问数据库,绘制三维场景中的几何模型和动态加载纹理,展示动画效果。
图片播放模块:该模块实际上就是一个图片播放器[15],根据缩略图部分浏览模式的选择对图片进行播放,用户可对播放形式如播放的速度,播放图片是过渡形式,播放动画,播放过程中的背景音乐等进行设置。
领区自动规划软件实现软件设计的目标,而且无线网络领区规划软件具有经验密集和耗时巨大的特点,如最佳站址的选取、最优工程参数的设置、分块仿真方案[16]的划分等,如何将工程师在这些领域的丰富经验进行尽可能准确地自动化软件规划将是一个方向。