張建平
(陜西工業(yè)職業(yè)技術(shù)學(xué)院, 信息工程學(xué)院, 陜西, 咸陽 712000)
課題提到了智能電視包的主要應(yīng)用軟件[1],智能電視之所以智能就是因?yàn)橹С指嗟膽?yīng)用軟件系統(tǒng),用戶可隨意安裝和卸載。電視作為一個以家庭為核心的產(chǎn)品,音頻、視頻是歷來必須支持的功能,圖片瀏覽系統(tǒng)作為智能電視的一個特色應(yīng)用,讓圖片以不同的形式顯示,帶來不一樣的用戶體驗(yàn)。
目前市場上的智能電視中圖片瀏覽系統(tǒng)應(yīng)用多采用 PC 上的圖片瀏覽系統(tǒng)或者沿用 Android 自帶的圖片瀏覽系統(tǒng) Gallery3D。 Android 自帶的 Gallery3D 雖然采用了三維用戶界面,但其只適用于手機(jī),移植到電視上不能滿足高清顯示的要求,對大圖片的解碼速度較慢;PC 上的圖片瀏覽系統(tǒng)顯示效果較為死板,不能滿足當(dāng)前人們對審美的需求。所以開發(fā)出一個功能實(shí)用,運(yùn)行速度快,顯示效果絢麗、高清的。基于 Android的智能電視平臺的圖片瀏覽系統(tǒng)[2],是非常有市場價值的一個項(xiàng)目。如圖1所示。

圖1 智能電視基本應(yīng)用
(1) Android 基本組件
Android 是一個基于組件的結(jié)構(gòu)平臺,Android 應(yīng)用程序一般是使用一個或者幾個基本組件相互組織而成的,這些基本組件包括:Activity、Service、BroadcastReceiver、ContentProvider。所有用來構(gòu)建 Android 應(yīng)用程序的組件都需要在 AndroidManifest.xml文件中注冊,這是每個 Android 應(yīng)用程序所必須有的一個 XML 配置文件,用于聲明應(yīng)用程序組件以及它們的特性和要求。
(2) Android 進(jìn)程間通信
Android 利用不同的組件來表示進(jìn)程之間的通信,為減少組件間的耦合,Android供了 Intent,Intent 提供了一種通用的消息系統(tǒng),它允許在應(yīng)用程序和其他應(yīng)用程序傳遞 Intent 來執(zhí)行動作和產(chǎn)生事件。通過 Intent 可以開啟一個 Activity 或者 Service,無論這個 Activity 或者 Service 是屬于當(dāng)前應(yīng)用還是其他應(yīng)用的。Intent 這種基于消息進(jìn)程內(nèi)或者進(jìn)程間通信模型有一個弊端,就是如果 Activity 與 Service 之間的交互不簡單的 Activity 開啟 Service 操作,而是要即時發(fā)一些控制請求,這時就必須要保證activity 在 Service 的運(yùn)行過程中隨時可以連接到 Service。
(3) Android 消息機(jī)制
在 Android 中,線程內(nèi)部或者之間進(jìn)行信息交互通常會使用消息。Android 提供了Handler 來實(shí)現(xiàn)線程間的通信。例如一個子線程從網(wǎng)絡(luò)下載了一幅圖片,當(dāng)下載完成后會發(fā)送消息給主線程 (UI 線程一般就是主線程)[3], 這個消息通過綁定在主線程的 Handler來傳遞
(4) Android 數(shù)據(jù)存儲
數(shù)據(jù)存儲是所有應(yīng)用程序都涉及的問題,任何應(yīng)用軟件的運(yùn)行都必須以數(shù)據(jù)存儲為基礎(chǔ),數(shù)據(jù)必須以某種方式保存,不能丟失,并能有效、簡潔的使用和更新這些數(shù)據(jù)。在 Android 中,提供了三種數(shù)據(jù)存儲的途徑分別滿足不同需要,它們是SharedPreferences、Files、SQLite。
OpenGL 是個專業(yè)的 3D 程序接口, 是一個功能強(qiáng)大, 調(diào)用方便的底層 3D 圖形庫[4]。在PC 領(lǐng)域,一直有兩種標(biāo)準(zhǔn)的 3D API 進(jìn)行競爭,OpenGL 和 DirectX。一般主流的游戲和顯卡都支持這兩種渲染方式,DirectX 在 Windows 平臺上有很大的優(yōu)勢,但是OpenGL 有更好的跨平臺性。
OpenGL(全寫 Open Graphics Library)提供了開發(fā)幾何模型的功能,其中最基本的幾何元素是頂點(diǎn),它代表三維空間中的一個點(diǎn),通過若干個點(diǎn)可以構(gòu)建簡單的二維圖形,而通過不同的二維圖形可以搭建復(fù)雜的三維立體模型。例如多邊形就是由點(diǎn)構(gòu)成,而三維物體是由多個多邊形組成。OpenGL 支持多種多邊形。
Android 3D 引擎采用的 OpenGL ES 是一套為手持和嵌入式系統(tǒng)設(shè)計(jì)的 3D 引擎 API。OpenGL ES 是對OpenGL進(jìn)行裁剪后而形成的一套標(biāo)準(zhǔn),由于嵌入式系統(tǒng)和pc相比,CPU、內(nèi)存等都比 PC 差很多,而且對能耗有著特殊的要求,許多嵌入式設(shè)備并沒有浮點(diǎn)運(yùn)算協(xié)處理器。 針對嵌入式系統(tǒng)的以上特點(diǎn), Khronos 對標(biāo)準(zhǔn)的 OpenGL 系統(tǒng)進(jìn)行了維護(hù)和改動,以期望滿足嵌入式設(shè)備對 3D 繪圖的要求。
本文要開發(fā)一個基于智能電視的圖片瀏覽系統(tǒng),主要是為了滿足用戶查看外部存儲設(shè)備中圖片的需求, 智能電視在開機(jī)后, 用戶插入外設(shè) (這里的外設(shè)指 SD 卡, 硬盤,U 盤) ,用戶打開圖片瀏覽系統(tǒng),系統(tǒng)開始取當(dāng)前外設(shè)的數(shù)目和類型,并以三維用戶界面展現(xiàn)給用戶,然后用戶可以選擇想要查看的設(shè)備,接著系統(tǒng)提供“所有圖片”和“拍攝日期”兩種模式供用戶選擇,即可看到以三維用戶界面展示的圖片縮略圖,界面焦點(diǎn)的切換和屏幕的翻頁有動畫效果,用戶可以選擇某一張圖片的縮略圖點(diǎn)擊進(jìn)入查看大圖片,即進(jìn)入圖片播放器,播放器提供自動播放和手動播放兩種方式供用戶選擇,播放過程支持多種動畫效果,支背景音樂播放還可以對播放過程中的形式、速度、音樂等進(jìn)行設(shè)置,也可以查看圖片的詳細(xì)信息。
以三維用戶界面形式查看外設(shè)中的圖片,享受現(xiàn)代科技帶來的一種新體驗(yàn),其功能需求如下:
1) 掃描外設(shè)內(nèi)容
這部分獨(dú)立于圖片瀏覽系統(tǒng)單獨(dú)運(yùn)行,智能電視一旦啟動,監(jiān)測程序相繼啟動,持續(xù)監(jiān)聽是否有外設(shè)插入,當(dāng)發(fā)現(xiàn)有外設(shè)插入時,就會立即掃描外設(shè)的多媒體文件信息,存儲到數(shù)據(jù)庫中,以備其他應(yīng)用系統(tǒng)使用;當(dāng)檢測到外設(shè)拔出,及時清除數(shù)據(jù)庫中的多媒體信息,保證數(shù)據(jù)庫的實(shí)時更新。掃描外設(shè)內(nèi)容的用例圖如圖2所示。

圖2 掃描外設(shè)內(nèi)容用例圖
這部分是圖片瀏覽系統(tǒng)正常運(yùn)行的前提,如果監(jiān)測到?jīng)]有外設(shè),數(shù)據(jù)庫就沒有信息,圖片瀏覽系統(tǒng)就沒有可顯示圖片,只能提示用戶當(dāng)前沒有外設(shè)插入。所以不管是清除還是存儲圖片信息都必須執(zhí)行檢測外設(shè)用例。
2) 外設(shè)的數(shù)目和類型的動態(tài)刷新
硬件設(shè)備的狀態(tài)總會發(fā)生各種變換,如接口松動導(dǎo)致設(shè)備掉線,這時就系統(tǒng)就需要及時檢測到這些狀態(tài)的變化,并將這一變化反饋給圖片瀏覽系統(tǒng)。這一點(diǎn)對系統(tǒng)非常重要,因?yàn)橛脩舨榭吹氖怯布O(shè)備中的圖片資源,設(shè)備狀態(tài)發(fā)生變化都不能及時檢測到將會導(dǎo)致信息錯誤。在用戶打開圖片瀏覽系統(tǒng)之后,持續(xù)監(jiān)聽是否有外設(shè)插拔事件,并根據(jù)當(dāng)前拔出的設(shè)備是否在被訪問作出相應(yīng)的響應(yīng)。外設(shè)信息獲取的用例圖如圖3所示。

圖3 外設(shè)信息獲取用例圖
外設(shè)信息的及時獲取是至關(guān)重要的,是為外設(shè)管理窗口顯示提供信息。外設(shè)掛載信息在 Linux 中的更新并不及時,需要在獲取掛載信息之后再對外設(shè)的狀態(tài)確認(rèn),所以外設(shè)狀態(tài)檢測在這里并不多余。在外設(shè)管理窗口各個外設(shè)圖標(biāo)響應(yīng)遙控器按鍵時,以立體空間中的圓形為軌道切換位置。
3) 圖片播放
除了包含一般圖片播放器具有的幻燈片播放、放大、縮小、上一頁、下一頁、旋轉(zhuǎn),圖片信息顯示[5]等基本功能外,還外加了背景音樂播放,圖片播放參數(shù)設(shè)置。圖片播放用例圖如圖4所示。

圖4 圖片播放用例圖
圖片播放的相關(guān)功能有十個,其中音樂播放功能通過跟音樂盒應(yīng)用(智能電視系統(tǒng)的一個應(yīng)用)通信來啟動;設(shè)置播放參數(shù)功能是比較重要的部分,主要包括設(shè)置幻燈片播放的時間間隔、播放的動畫過渡形式、播放[6]的幻燈模式以及當(dāng)前播放音樂的目錄,這里的音樂信息也來自當(dāng)前外設(shè)。其中圖片幻燈播放時間間隔可選項(xiàng)為四種分別為 3 s、5 s、8 s、15 s;播放的幻燈模式包括隨機(jī)播放和順序播放兩種;而播放過程中的過渡方式包含影視效果、疊加、橫移、豎移、擴(kuò)大、直接切換、減弱、隨機(jī)。其中動畫形式;音樂播放目錄的查找要通過一定的方式在當(dāng)前外設(shè)中去查找,而音樂具體的啟動流程都依賴于音樂盒應(yīng)用是否啟動,如果啟動本系統(tǒng)中的音樂啟動按鈕視為無效。
通過用例圖靜態(tài)地描述了系統(tǒng)的功能需求,為了對系統(tǒng)的整個工作流程有更清楚的認(rèn)識,本小節(jié)通過創(chuàng)建動態(tài)模型[7]來對系統(tǒng)的一些關(guān)鍵流程進(jìn)行描述。
如圖5所示的活動圖是圖片信息保存的活動圖。數(shù)據(jù)庫對圖片信息的及時存儲是圖片瀏覽系統(tǒng)運(yùn)行的前提,當(dāng)用戶打開圖片瀏覽系統(tǒng)時,從數(shù)據(jù)庫查找相應(yīng)的圖片即可。這部分流程主要通過掃描模塊來完成,當(dāng)用戶打開智能電視,電視初始化完畢之后持續(xù)監(jiān)聽外設(shè)插拔事件。當(dāng)發(fā)現(xiàn)有外設(shè)插入事件,即執(zhí)行將外設(shè)中的音頻、視頻、圖片的信息保存到數(shù)據(jù)庫操作;當(dāng)監(jiān)聽到外設(shè)拔出操作,將相應(yīng)外設(shè)的多媒體信息從數(shù)據(jù)庫中清除。對于本系統(tǒng)來說只需要及時的存儲以及清除圖片信息,保證圖片信息的實(shí)時準(zhǔn)確性即可。而對于整個智能電視平臺,存在著類似于圖片瀏覽系統(tǒng)的音視頻應(yīng)用,所以音視頻的獲取是非常必要的,因此在此掃描模塊對各個應(yīng)用的正常運(yùn)行起著非常重要的作用。

圖5 多媒體信息存儲活動圖
縮略圖瀏覽[8]是圖片瀏覽系統(tǒng)很重要的部分,這部分為了提升用戶體驗(yàn),不通過現(xiàn)有的控件加載,而是通過 OpenGL ES 來繪制場景中的各個物體。圖6是系統(tǒng)動態(tài)加載縮略圖的活動圖。當(dāng)用戶完成了對瀏覽模式的選擇操作,系統(tǒng)執(zhí)行查詢數(shù)據(jù)庫操作,如果這時數(shù)據(jù)庫沒有查到相關(guān)圖片信息,系統(tǒng)彈出相應(yīng)的提示。否則,按照 OpenGLES 的實(shí)現(xiàn)方式,按照查詢到的待顯示圖片數(shù)目創(chuàng)建相應(yīng)數(shù)目的幾何模型并指定幾何模型的起始位置、結(jié)束為止、動畫幀數(shù)等,然后通過紋理映射對各個模型進(jìn)行相應(yīng)的紋理貼圖[9]。在紋理加載的過程中,持續(xù)監(jiān)聽是否有遙控器上下左右按鍵操作,如果有并且在屏幕內(nèi)執(zhí)行相應(yīng)的焦點(diǎn)切換以及動畫操作,如果焦點(diǎn)切換到屏幕邊界要執(zhí)行翻頁動畫,并優(yōu)先顯示用戶感興趣的圖片。當(dāng)某張圖片被選中即為焦點(diǎn)顯示時,顯示效果要與其他圖片不同,在焦點(diǎn)移動過程中圖片一旦被選中,就執(zhí)行向屏幕外移出動畫,給用戶一種圖片走出屏幕靠近自己的視覺效果。

圖6 動態(tài)加載縮略圖活動圖
(3) 圖片瀏覽系統(tǒng)性能需求
系統(tǒng)的性能需求主要包括系統(tǒng)的穩(wěn)定性和響應(yīng)速度。本系統(tǒng)的響應(yīng)速度包括外設(shè)插拔的響應(yīng),動畫切換速度,圖片解碼速度,查詢數(shù)據(jù)庫速度[10]。外設(shè)插拔響應(yīng)速度原則上是不影響用戶的正常操作;一般用戶能明顯感覺到的延遲時間是 200-600 ms,所以在系統(tǒng)的所有界面保證動畫效果流暢,一般為毫秒級,即用戶感覺不到明顯的動畫卡死、響應(yīng)慢,原則不因?yàn)閯赢嬤^程是否流暢而影響用戶體驗(yàn)。圖片解碼速度根據(jù)圖片大小而不同,一般以正常的一張大小為 4 M 的照片為例,平均解碼速度不超過 40 ms;數(shù)據(jù)庫查詢速度 10 000 張圖片最好不超過 4 s。
(1) 圖片瀏覽系統(tǒng)的總體結(jié)構(gòu)設(shè)計(jì)
系統(tǒng)的設(shè)計(jì)目標(biāo)為基于 Android 的智能電視圖片瀏覽系統(tǒng)的實(shí)現(xiàn),總體框架設(shè)計(jì)如圖7所示。要求完成用戶插入外設(shè)到電視,瀏覽外設(shè)中的圖片信息和設(shè)備信息等功能。該系統(tǒng)的開發(fā)主要是為了滿足當(dāng)前用戶對現(xiàn)代智能電視[11]的一種新的體驗(yàn)。要求所有外設(shè)中的圖片能夠以三維用戶界面呈現(xiàn)給用戶,并且提供豐富的動畫效果。

圖7 圖片瀏覽系統(tǒng)框架圖
(2) 圖片瀏覽系統(tǒng)的功能模塊設(shè)計(jì)
根據(jù)系統(tǒng)功能總體框架將系統(tǒng)進(jìn)行功能模塊劃分。圖8是系統(tǒng)的功能模塊劃分結(jié)果。將系統(tǒng)劃分為四個功能模塊:多媒體信息掃描模塊[12]、外設(shè)管理模塊、縮略圖瀏覽模塊、圖片播放模塊。其中多媒體信息掃描模塊是后臺執(zhí)行無界面,該模塊一旦啟動就不能停止,持續(xù)運(yùn)行,隨著智能電視的開啟而啟動,智能電視的關(guān)閉而終止,生命周期不依賴于圖片瀏覽系統(tǒng)。其他三個模塊是本系統(tǒng)的核心模塊,包含了即時取并顯示外設(shè)列表,顯示外設(shè)中的圖片縮略圖,根據(jù)用戶選擇執(zhí)行相應(yīng)圖片的播放等功能。

圖8 系統(tǒng)功能模塊圖
下面對各個功能模塊的功能進(jìn)行概括描述。
多媒體信息掃描模塊:負(fù)責(zé)對當(dāng)前插入電視的外部存儲設(shè)備進(jìn)行掃描并存儲其中的音頻、視頻、圖片的相關(guān)信息到數(shù)據(jù)庫[13];當(dāng)發(fā)現(xiàn)外設(shè)拔出時,及時更新數(shù)據(jù)庫中的信息。該模塊獨(dú)立于圖片瀏覽系統(tǒng)運(yùn)行,但是是圖片瀏覽系統(tǒng)運(yùn)行不可或缺的一部分。
外設(shè)管理模塊:該模塊主要負(fù)責(zé)實(shí)時取設(shè)備列表,及時更新設(shè)備列表,并根據(jù)設(shè)備的狀態(tài)做出及時的響應(yīng)。通過一個三維界面實(shí)時的展示設(shè)備列表,通過遙控器左右按鍵,設(shè)備圖標(biāo)旋轉(zhuǎn)切換焦點(diǎn)。
縮略圖瀏覽模塊:該模塊主要顯示圖片的縮略圖信息,用戶按照不同的需求選擇“所有圖片”或者“拍攝日期”兩種瀏覽模式中的一種,然后系統(tǒng)按照需求展示不同形式的縮略圖界面[14],整個過程中需要訪問數(shù)據(jù)庫,繪制三維場景中的幾何模型和動態(tài)加載紋理,展示動畫效果。
圖片播放模塊:該模塊實(shí)際上就是一個圖片播放器[15],根據(jù)縮略圖部分瀏覽模式的選擇對圖片進(jìn)行播放,用戶可對播放形式如播放的速度,播放圖片是過渡形式,播放動畫,播放過程中的背景音樂等進(jìn)行設(shè)置。
領(lǐng)區(qū)自動規(guī)劃軟件實(shí)現(xiàn)軟件設(shè)計(jì)的目標(biāo),而且無線網(wǎng)絡(luò)領(lǐng)區(qū)規(guī)劃軟件具有經(jīng)驗(yàn)密集和耗時巨大的特點(diǎn),如最佳站址的選取、最優(yōu)工程參數(shù)的設(shè)置、分塊仿真方案[16]的劃分等,如何將工程師在這些領(lǐng)域的豐富經(jīng)驗(yàn)進(jìn)行盡可能準(zhǔn)確地自動化軟件規(guī)劃將是一個方向。