行政院國家科學委員會補助產學合作研究計畫成果完整報告
2. 研究方法與技術成果
我們針對在微軟視窗作業系統(Microsoft Windows)的環境下設計並實作了一套整合 性的系統以實現我們的想法。這個系統整合了三項不同領域的技術 : MPEG-4 多人世界 (MPEG-4 multi-user world)、應用程式共享(application sharing)、應用程式重導(application redirection)。我們以實驗室之前開發的 MPEG-4 多媒體群體合作架構為基礎,並新增一 些新的模組將視窗程式共享技術整合進來。我們利用應用程式共享以及應用程式重導這 兩項關鍵技術來實作我們的系統,在這樣的機制下完全不需要對被共享的單人視窗程式 做任何的修改,提供了一種最方便的方式建構多人世界下的互動性元件。基本上我們的 系統採用了一個集權式客戶伺服架構 (centralized client-server architecture)(見圖<二>)。
圖<二>
[1] 伺服端
圖<三>
在我們原本的MPEG-4 多媒體群體合作架構平台下,另外提供一個視窗程式伺服器 (Application Server)。這個伺服器扮演了視窗程式提供者的角色,所有要被共用的視窗程 式都在這個伺服器上執行,並利用中央集權式的視窗共享機制(centralized application sharing),以提供視窗程式共用服務給連結到這台伺服器的用戶。伺服器端的詳細架構圖 見圖三。
以下分別介紹視窗程式伺服器的各個模組的功能。
共用程式管理者(Session Manager)
session manager 是此伺服器中最核心的模組,扮演了居中協調的角色。每一個 session 負責管理一個被共用的視窗程式,session 在初始化的過程中會開啟一個對應的視窗程 式,當 session 上所有的使用者都離開時,便會自動終止正在執行的程式。每個 session
裡面還有三個小模組:訊息產生、發言權控制、遠距游標,稍後會再詳細介紹。
訊息產生(message generator)
這個模組用來將客戶端送過來的訊息經過一系列的處理後再傳遞給相對應的視窗 應用程式。在視窗程式伺服器可能同時會有好幾個 session 也就是好幾個視窗程式同時 在執行,因此我們必須不斷的產生出假的訊息給正被共用的視窗程式,製造出伺服器上 同時有好幾組滑鼠鍵盤在運作的假象,如此才能讓所有被共用的視窗程式都能同時正常 運作,以避免同一個時間點只有一個session 可以接受用戶端的輸入訊息的窘境發生。
發言權控制(Floor control)
在應用程式共享此項技術下,因為要被共用的視窗程式背後的邏輯是為了單人而設 計的,若是不將多使用者送過來的訊息作某種程度的管理,在共用的過程中便會發生不 可預期的結果,如圖<四>所示。
為了解決這樣子的問題,應用程式共享系統通常會提供發言權控制這項機制以讓同 一時間點,只會有一個使用者掌握到控制權。發言權控制的實做方式又可分為顯著式 (explicit)或隱含式(implicit)兩種,大部分提供程式共享服務的商業軟體採用顯著式的實 做方式。在我們的系統裡,我們希望能讓控制權轉移更為平順,不需作一些多餘的選取 動作,因此我們採用隱含式策略。並利用以下三點基本原則來做控制權的轉移:
1. 若是控制權並沒有被任何人佔住,則第一個送出輸入訊息的使用者會自動掌握 到控制權。
2. 一旦控制權被某個人佔住後,系統會每隔一段時間檢查這個人是不是有持續送 出訊息,如果在某個時間間隔裡都沒有訊息產生,則控制權會被釋放掉。
3. 如果佔住控制權的人有按下滑鼠按鈕而沒有放開,即使他已經隔了一段時間都 沒送出訊息,控制權還是不會被釋放掉。
圖<四>
遠距游標(Tele-pointer)
遠距游標是群體合作軟體系統(collaborative system)很常用到的一項介面元件。在我 們的系統裡,我們為每一個共享視窗程式提供了一個遠距游標,以表示每個共享視窗程 式想像中的滑鼠游標位置。並且利用遠距游標來顯示出發言權控制的一些資訊,包括了 發言權是否被某個用戶佔住,以及佔住發言權的用戶名稱。如圖五所示,左邊的遠距游 標表示發言權並沒有被任何人佔住,右邊的顯示出發言權已經被 kychen 這個用戶佔住。
圖<五>
記錄重播模組(record & replay)
在某些多人群體合作應用下,紀錄重播是很有用的一項功能。例如在線上虛擬會議
的問題,我們提出了一個較簡單的演算法(見圖<八>),這個演算法雖然並不保證能達到 最有效利用螢幕空間,但在實際運作上提供了一個可接受的解決方案。
圖<八>
[2] 用戶端
圖<九>
圖<九>是用戶端的詳細架構圖。在用戶端這邊,我們採用了原本的 MPEG-4 播放引 擎(MPEG-4 presentation engine)為基礎架構,並加入了幾個必要的模組以接受應用程式 伺服器送過來的視窗畫面資料,然後將視窗畫面畫在MPEG-4 場景中,呈現出視窗程式 在3D 世界運作的視覺效果。
以下分別介紹用戶端的各個模組的功能。
應用程式視窗(application window)之呈現(render)
近來多媒體內容已不再滿足於單純 2D的畫面,3D的設計提供更多可能的感觀效 果。本實驗室開發之MPEG-4 播放器本身就支援自然與合成的多媒體物件,可以播放 2D/3D混合的場景。而MPEG-4 採用一種叫做場景樹(scene tree)的樹狀資料結構來描述場 景中影音物件如何組織構成整個場景。 在這樣子的樹狀資料結構下,我們加入了一個 新的場景樹節點(node):應用程式視窗(applicatino window)。在場景繪出時,應用程式視 窗是結合了一個長方形狀的三維網格(3D mesh)以及一張貼圖(texture)。每當伺服端送一 個新的視窗畫面過來,對應的貼圖就會被更新,便能達到讓二維視窗程式在三維環境中 運作的視覺效果。圖十是一個場景樹的範例,以及這個場景樹在我們的播放引擎呈現出 來的效果。
圖<十>
應用程式視窗(application window)之訊息處理
二維視窗程式在被放置到三維場景後,使用者仍然必須可以透過三維介面來控制這 些視窗程式,才能達到使用者與應用程式視窗間的互動性。一旦使用者在MPEG-4 瀏覽 器上發出輸入訊息,必須先判斷這個訊息是不是要發給三維世界中的某個應用程式視 窗,如果是的話再回傳給應用程式伺服器。另外如果使用者發出的是滑鼠訊息的話,必 須先經過座標軸轉換的動作,以將螢幕座標轉為正確的視窗座標(見圖<十一>)。
圖<十一>