• 沒有找到結果。

五、 系統設計與實作

5.3 應用端之設計與實作

5.3.2 PDA Application 客戶端播放器製作

本小節基於目前的行動裝置對於常見的多媒體內容格式(HTML、SMIL、

SVG)的播放器有部分功能的缺憾,所以這裡介紹的應用端程式是針對給行動裝 置的使用者來使用,主要功用在於提供使用者能播放多媒體試題之能力,並具有 上網和改編協調伺服器(Adaptation Server)溝通、動態下載試卷之能力。下圖 37 是客戶端的 PDA 應用程式的 sequence diagram 描述如何跟改編協調伺服 器溝通,以及如何透過改編協調伺服器動態產生多媒體內容進而下載回來觀看。

圖 37: PDA 端應用程式運作圖

0: 從已改編協調的內容伺服器(Server for adapted content) 資料庫查詢下載試題,如果資料庫不存在此試題(0.2),將進行 動態轉換產生試題(1-4)。

1: 傳入 device 支援程度之參數給予改編協調伺服器 (Adaptation Server)

2: 改編協調伺服器開始批次從資料庫擷取試題資源分析題目 3: 最後批次轉換、並上傳至已改編協調的內容伺服器資料庫 4: 從已改編協調的內容伺服器資料庫下載剛剛動態轉好的

z 偵測 Device Profile 之能力

此功用在於能夠偵測行動裝製的支援程度,以利在和改編協調伺服器

(Adaptation Server)溝通時作為參數之參考用途。目前可以偵測螢幕大小、字 形大小設定。

z 從特定目標內容伺服器下載內容之能力

本下載方式透過Http 通訊協定方式下載,而已改編協調的內容伺服器(Server for adapted content)也需搭載相對應的動態網頁程式,此網頁程式以 JSP 來 撰寫,以進行和行動裝置的應用程式溝通。行動裝置應用程式會夾帶裝置支援程 度參數發出Http Request 取回試卷清單,使用者點選清單上的某份試卷進行下 載動作,而下載回來是個壓縮檔,因此本程式會搭載一個解壓縮程式,所以使用 者即需等待下載跟解壓縮時間而後進行試題播放。下圖38 顯示這步驟會牽扯到 個幾個routine。

圖 38: PDA 應用程式之下載試卷的子模組流程圖

z 和改編協調伺服器溝通之需求

這裡主要針對使用者進行動態轉換內容的功能需求,也就是當試卷資料庫的某份 試卷不存在的情況下,本使用端應用程式要進行和改編協調伺服器(Adaptation Server)溝通,進而轉換試卷,然後會經由上個步驟再次下載試卷回來觀看。

圖 39: PDA 使用者對於下載試題的過程圖

使用者一開始會點選清單上的內容,這時PDA 端應用程式會去資料庫查詢此份 多媒體是否存在於實體資料庫裡,如果是的話PDA 應用程式會直接下載這份內 容回來觀看。反之如果不存在於實體資料庫,PDA 應用程式會和改編協調伺服 器(Adaptation Server)建立連線並準備嘗試作動態轉換的動作,這時對 PDA 使用者必須等待轉換結果,轉換過程中如果逾時或是有錯誤訊息會提供給PDA 使用者知道,否則使用者必須持續等待直到完成為止而後再下載回來。

z 多媒體內容劇情播放能力

本部分主要實作出能夠播放經由本研究內容改編協調(Content

adaptation)轉換出來的自訂行動裝置多媒體內容劇情描述格式-XMG。XMG 本 身亦是XML Based 的描述語法。而多媒體物件支援程度包含圖片的 BMP 格式、

聲音的MP3 WAV 格式、影片的 WMV 格式、文字 9-11pt Arial 格式。 本播

放劇情模組採用WINCE4.0 MFC 架構撰寫而成。在瞭解播放劇情實作之前先瞭 解一下XMG 的描述方式。另外為方便起見,劇情描述內容由多媒體物件來組成,

凡構成多媒體劇情描述的多媒體物件,我們將他簡稱「演員」。

圖 40: ㄧ份 XMG 描述格式範例

上面是一份XMG 多媒體英文試題描述例子,多媒體物件屬性值我們利用

“actorInfo”標籤節點下的子標籤“actor”來定義,對於陳述各個演員如何呈現播 放,我們定義在“Scenerio”的標籤下。我們將這份 XML 文件轉成樹狀結構解釋 比較來得清楚。

圖 41: XMG 轉換成樹狀結構圖

很明確的,播放器一定要有個XML parser。其實 XML parser 可以用現成的 MSXML 來用,但基於本 XML 文件簡單,因此本研究實際實作 XML parser,

以減少記憶體使用量,及提升效率。Parsing 完多媒體文件後,我們將所有演員 的資訊,也就是上圖的“actor”節點資訊儲存到一個資料結構如下:

Class Actor {

CString name;

CString type;

CString resource_name;

Int path[]; 畫劇情的呈現(“animate” 節點)。“Animate”節點描述了演員播放聲音、路徑 演出、影片播放、圖片呈現等等。

而在處理音樂部分,程式裡會用到開放函示庫(open source

library)-[fmodce library]。他支援音樂大檔案的串流(stream)播放及小檔案 的完全載入(full load),在這裡應考量多媒體英文試題的音樂檔案大小大多很 大。因此採用串流(stream)方式播放,如果以完全載入來播放也將造成記憶體 的限制及播放時延遲(delay)情況。而用串流(stream)播放的語法如下:

FSOUND_Init(44100, 32, 0) //初始化聲音系統,僅需程式開始呼叫一次 sstrm = FSOUND_Stream_Open(L”/TEST.MP3”, FSOUND_NORMAL , 0,0);

//這裡打開文件是準備在 real-time 裡播放,並未解碼整份文件。

FSOUND_Stream_Play(FSOUND_FREE,sstrm); //開始播放音樂 FSOUND_Stream_Stop(sstrm); //停止音樂

FSOUND_Close(); //僅需程式結束時呼叫

處裡影片的技巧比較複雜些,雖然有提供開放原始碼(open source)供人參 考,但對於嵌入在應用程式上,比較難以控制。因此本影片處理會以activex control 方式呼叫 pocketpc 內建 mediaplayer 來播放檔案,並鑲嵌於我們設 定的視窗裡。首先必須先安裝microsoft 提供的 pocketIE 控制物件,再來必須 對提供的mediaplayer control 介面有一定的瞭解,對 mediaplayer control 的初始化如下步驟:

CComPtr<IWMP> m_spWMPPlayer;

QueryInterface(__uuidof(IWMP),(void**)&m_spWMPPlayer);

m_spWMPPlayer->QueryInterface( IID_IConnectionPointContainer, (void**)&spConnectionContainer );

spConnectionContainer->FindConnectionPoint( __uuidof(_IWMPEve nts), &m_spConnectionPoint );

之後你就可用CComPtr<IWMP> m_spWMPPlayer;此物件來播放影片檔。

我們需要的物件method 有下列:

m_spWMPPlayer->put_FileName();

m_spWMPPlayer->Stop();

m_spWMPPlayer->put_AutoStart();

此外要隱藏原本mediaplayer 的操作使用介面可以用如下的 method:

m_spWMPPlayer->put_ShowControls();

m_spWMPPlayer->put_ShowAudioControls();

m_spWMPPlayer->put_ShowPositionControls();

m_spWMPPlayer->put_ShowTracker();

在處理動畫劇情的時候,對於程式播放時的掌控相當的重要,面對處理眾多 動畫物件,比較好的方式是運用多個行程或多執行序來管理,當然程式要能避免 死當情況。在evc++底下我們可以運用 win32 api 的 CreateThread()來創建 執行序使用。使用方法如下說明:

CreateThread(

NULL,

0, //初始化 stack size

(LPTHREAD_START_ROUTINE)ThreadProc, //處理 Thread 的函式名 (LPVOID)this, //新 Thread 的處理參數

0,

&thread );

Void ThreadProc() { While(1) {

//處理動畫動作 Sleep(1);

} }

六、應用範例

在本章中,我們將以呈現系統畫面的方式,介紹系統中所擁有的功能、機制 及其流程,主要有下面四項。

1. 管理改編協調者的操作畫面 2. PDA 客戶端瀏覽裝置操作畫面 3. 改編協調前後內容呈現差別

4. 靜態和動態轉換及混合方式轉換數據分析

相關文件