張建平
(陜西工業職業技術學院, 信息工程學院, 陜西, 咸陽 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]的劃分等,如何將工程師在這些領域的豐富經驗進行盡可能準確地自動化軟件規劃將是一個方向。