專利名稱:通過網絡顯示與操作3d游戲的方法、系統、服務器及客戶端的制作方法
技術領域:
本發明涉及計算機網絡遠程控制領域,尤其涉及一種通過網絡顯示與操作3D游戲的方法、系統以及服務器。
背景技術:
計算機3D游戲是使用空間立體計算技術實現操作的游戲,一般而言,3D游戲對顯卡的運算速度和內存容量比其他游戲有更高的要求,如果硬件不能達到要求,游戲時就會運行緩慢甚至是死機。換句話說,3D游戲對于計算機硬件的配置要求很高。另一方面,通過網絡來遠程使用、操作計算機的模式正得到越來越普遍的應用,尤其是隨著云計算模式的發展,人們傾向于將計算資源、存儲資源、軟件資源集中于數據中心進行統一運營與管理,而一般用戶通過網絡來遠程的訪問這些資源,進行軟件使用與操作。但是,對于3D游戲而言,這一操作方式存在如下問題首先,在遠程應用模式下, 軟件(即游戲)實際上是運行在服務器端,而將圖像傳回到客戶端進行顯示,同時客戶端接收用戶的輸入將其傳送到服務器端以完成操作。而3D游戲需要實時的以每秒幾十幀的速度顯示圖像,通過網絡來傳遞這些如此多量的實時圖像是不現實的;其次,需要實時的將客戶端的操作傳回服務器端以控制游戲,這在當前的模式下也是不現實的。與本發明相關的現有技術有遠程桌面技術和RemoteFX技術。1.遠程桌面技術。內置在Windows系統(NT 4. 0以后)中的遠程桌面使用了 RDP (Remote Desktop Protocol)協議,使得用戶可以從其他的電腦上遠程登錄、訪問與使用目標桌面。RDP協議最早微軟用于Windows Server上的"Terminal Service (終端服務)的訪問協議,實現了 Windows Server上的多用戶模式,使得用戶能夠在本地并不安裝任何應用的條件下,遠程使用服務器上的各種應用。這種技術是將目標機上運行界面傳輸到用戶實際的操作機屏幕上,并將鍵盤,鼠標等一系列的外設輸入,傳輸到目標機,實現交互。但是RDP協議不支持遠程3D游戲,換句話說,在這一模式下遠程啟動3D游戲是無法運行的。與RDP類似的遠程桌面協議還包括Citrix開發的ICA協議,通常情況下,ICA協議傳輸效率要高于RDP協議,但是其也無法支持3D游戲的遠程控制。2. RemoteFX 技術。RemoteFX是微軟在Windows 7/2008 R2 SPl中增加的一項桌面虛擬化技術,使得用戶在使用遠程桌面進行游戲應用或者圖形創作時,可以獲得和本地桌面類似的效果。 RemoteFX的核心在于兩方面一是在服務器端采用顯卡虛擬化技術,通過系統內核驅動虛擬出多個顯卡設備,每個遠程的連接桌面使用一個虛擬顯卡;二是通過虛擬顯卡,將顯示數據壓縮后傳到客戶端解壓顯示。這樣就能夠支持遠程的3D游戲顯示。RemoteFX對于系統軟硬件的要求較高,首先必須是windows server 2008 SPl及以上,服務器端處理器必須支持SLAT-enabled processor特性,且在系統的內核層實現。
發明內容
為解決現有技術中存在上述技術問題,本發明提供一種通過網絡顯示與操作3D 游戲的方法與系統。該系統由安裝、運行游戲的服務器,顯示以及用戶操作游戲的客戶端以網絡相連構成。用戶可以通過客戶端(不限于PC機),獲得遠程服務器上運行的3D游戲的圖像的實時數據,在本地顯示后,接收用戶的輸入操作傳輸到遠程服務器,由該3D游戲響應后,生成新的圖像數據并顯示,該過程周而復始,從而進行遠程的游戲控制。根據本發明的第一方面,一種通過網絡顯示與操作3D游戲的方法,該方法包括以下步驟步驟一服務器端應用層顯示裝置實時獲取服務器端的基于DirectX的3D游戲顯示圖像的圖像數據;步驟二 服務器將獲取的3D游戲顯示圖像的圖像數據進行壓縮并將壓縮過的圖像數據傳送至客戶端;步驟三客戶端接收上述壓縮過的圖像數據并解碼顯示,通過輸入設備接收用戶的操作指令并回傳給服務器端的服務器端虛擬輸入裝置;步驟四服務器端虛擬輸入裝置實時接收客戶端回傳的操作指令,將其轉換為 DirectX游戲程序所能獲得的操作信息。其中所述步驟一中基于DirectX的3D游戲顯示圖像的圖像數據的生成與顯示包括如下步驟步驟1. DDirectX運行環境初始化;步驟1. 2) 3D游戲程序創建一個DirectX的服務器端應用層顯示裝置;步驟1. 針對上述顯示裝置進行3D游戲顯示圖像的渲染過程,周而復始,直至退出游戲。其中上述步驟1.3)包括步驟1. 3. 1)清空該顯示裝置的當前內容;步驟1. 3. 2)通知該顯示裝置開始渲染;步驟1. 3. 3)在該顯示裝置上渲染所述圖像;步驟1. 3. 4)通知該顯示裝置渲染過程結束;步驟1. 3. 5)顯示該圖像。其中所述步驟1. 3. 5)是通過服務器端用戶層代碼注入修改DirectX調用函數的默認行為,使其獲取該顯示裝置的當前圖像數據,并將其拷貝到內存中,以完成3D游戲顯示圖像的獲取。其中所述步驟一中獲取的圖像數據是連續的圖像數據,使用視頻壓縮算法對所述獲取的圖像數據進行壓縮。其中步驟三中的所述輸入設備包括鼠標。其中步驟三中的所述輸入設備包括鍵盤。其中步驟四是通過服務器端用戶層代碼注入以修改DirectX中的Directhput接口函數來實現3D游戲實時接收輸入設備的輸入,從而操作3D游戲;其中所述Directhput 接口函數是DirectX游戲用于收集操作輸入的接口函數,其通過DirectlnputDevice對象訪問輸入設備的數據,所述DirecthputDevice對象代表輸入設備。其中所述DirecWnputDevice對象為鍵盤,則DirecWnputDevice (鍵盤)的工作流程如下步驟4. 1)創建一個鍵盤設備;步驟4. 2)將其設定為通過一個256字節的數組返回鍵盤狀態值;步驟4. 3)設定協作模式;步驟4. 4)激活對該鍵盤設備的訪問權限;步驟4. 5)獲取該鍵盤設備的操作信息,其中,步驟4. 5)是一個循環獲取的過程,使得3D游戲實時接收鍵盤設備輸入,從而完成控制。通過以下兩種方式任意之一獲取步驟4. 5)中的鍵盤設備的操作信息立即方式即獲得當前時刻鍵盤設備的狀態,將鍵盤設備看作是具有256不同按鍵的設備,每個按鍵的狀態包括按下狀態或者非按下狀態,且每個按鍵的狀態都由對應的一個256字節數組的一個元素來表示,0表示非按下狀態,0x80表示按下狀態,通過服務器端用戶層代碼注入修改鍵盤設備對應的接口函數的行為,使其不是獲得服務器端本地物理鍵盤的輸入,而是將客戶端的按鍵狀態行為返回;緩沖方式返回上一次獲得鍵盤設備的輸入之后的鍵盤設備的連續變化情況,通過服務器端用戶層代碼注入修改鍵盤設備對應的接口函數的行為,使其不是獲得服務器端本地物理鍵盤的輸入,而是將客戶端的按鍵狀態行為返回。其中所述用戶層代碼注入在3D游戲程序用到的接口函數調用與實際實現的功能之間插入代碼,以截獲程序的調用參數信息。其中所述用戶層代碼注入是一種透明的代碼插入,其將應用程序裝載入內存后再進行函數包裹,直接在內存中改寫相關函數的代碼,而不改變執行文件的大小。根據本發明的另一方面,一種通過網絡顯示與操作3D游戲的系統,該系統包括服務器端應用層顯示裝置,實時獲取服務器端的基于DirectX的3D游戲顯示圖像的圖像數據;服務器端視頻壓縮裝置,將獲取的3D游戲顯示圖像的圖像數據進行壓縮并將壓縮過的圖像數據傳送至客戶端;客戶端視頻回放與用戶操作回傳裝置,接收上述壓縮過的圖像數據并解碼顯示, 通過輸入設備接收用戶的操作指令并回傳給服務器端虛擬輸入裝置;服務器端虛擬輸入裝置,實時接收客戶端回傳的操作指令,將其轉換為DirectX 游戲程序所能獲得的操作信息。其中所述服務器端應用層顯示裝置使用包括如下裝置來生成和顯示基于DirectX 的3D游戲顯示圖像的圖像數據裝置,用于DirectX運行環境初始化;裝置,用于3D游戲程序創建一個DirectX的服務器端應用層顯示裝置;裝置,用于針對上述顯示裝置進行3D游戲顯示圖像的渲染過程,周而復始,直至退出游戲。其中上述用于針對上述顯示裝置進行3D游戲顯示圖像的渲染過程,周而復始,直至退出游戲的裝置包括裝置,用于清空顯示裝置的當前內容;裝置,用于通知該顯示裝置開始渲染;裝置,用于在該顯示裝置上渲染所述圖像;裝置,用于通知該顯示裝置渲染過程結束;上述顯示裝置,用于顯示該圖像。其中用于顯示該圖像的顯示裝置是通過服務器端用戶層代碼注入修改DirectX 調用函數的默認行為,使其獲取該顯示裝置的當前圖像數據,并將其拷貝到內存中,以完成 3D游戲顯示圖像的獲取。其中所述服務器端應用層顯示裝置獲取的圖像數據是連續的圖像數據,使用視頻壓縮算法對所述獲取的圖像數據進行壓縮。其中所述輸入設備包括鼠標。其中所述輸入設備包括鍵盤。其中服務器端虛擬輸入裝置是通過服務器端用戶層代碼注入以修改DirectX中的DirectInput接口函數來實現3D游戲實時接收輸入設備的輸入,從而操作3D游戲; 其中所述Directhput接口函數是DirectX游戲用于收集操作輸入的接口函數,其通過 DirectInputDevice對象訪問輸入設備的數據,所述DirecWnputDevice對象代表輸入設備。其中所述DirecWnputDevice對象為鍵盤,則DirecWnputDevice (鍵盤)包括如下裝置,用于創建一個鍵盤設備;裝置,用于將所述鍵盤設備設定為通過一個256字節的數組返回鍵盤狀態值;裝置,用于設定協作模式;裝置,用于激活對該鍵盤設備的訪問權限;裝置,用于獲取該鍵盤設備的操作信息,其中,用于獲取該鍵盤設備的操作信息的裝置循環獲取操作信息,使得3D游戲實時接收鍵盤設備輸入,從而完成控制。通過以下兩種方式任意之一獲取鍵盤設備的操作信息立即方式即獲得當前時刻鍵盤設備的狀態,將鍵盤設備看作是具有256不同按鍵的設備,每個按鍵的狀態包括按下狀態或者非按下狀態,且每個按鍵的狀態都由對應的一個256字節數組的一個元素來表示,一般0表示非按下狀態,0x80表示按下狀態,通過用戶層代碼注入修改鍵盤設備對應的接口函數的行為,使其不是獲得服務器端本地物理鍵盤的輸入,而是將客戶端的按鍵狀態行為返回;緩沖方式返回上一次獲得鍵盤設備的輸入之后的鍵盤設備的連續變化情況,通過服務器端用戶層代碼注入修改鍵盤設備對應的接口函數的行為,使其不是獲得服務器端本地物理鍵盤的輸入,而是將客戶端的按鍵狀態行為返回。其中所述用戶層代碼注入在3D游戲程序用到的接口函數調用與實際實現的功能之間插入代碼,以截獲程序的調用參數信息。其中所述用戶層代碼注入是一種透明的代碼插入技術,其將應用程序裝載入內存后再進行函數包裹,直接在內存中改寫相關函數的代碼,而不改變執行文件的大小。根據本發明第三方面,提供一種服務器,用于通過網絡顯示與操作3D游戲,該服務器通過網絡與客戶端連接,所述服務器包括服務器端應用層顯示裝置,實時獲取服務器端的基于DirectX的3D游戲顯示圖像的圖像數據;服務器端視頻壓縮裝置,將獲取的3D游戲顯示圖像的圖像數據進行壓縮并將壓縮過的圖像數據傳送至客戶端;服務器端虛擬輸入裝置,實時接收客戶端回傳的操作指令,將其轉換為DirectX 游戲程序所能獲得的操作信息,其中所述客戶端回傳的操作指令是客戶端接收上述壓縮過的圖像數據并解碼顯示,并通過輸入設備接收用戶的操作指令并回傳給該服務器端虛擬輸入裝置。其中通過服務器端用戶層代碼注入修改DirectX調用函數的默認行為,使其獲取 3D游戲顯示圖像的圖像數據,并將其拷貝到內存中,以完成3D游戲顯示圖像的獲取其中該服務器進一步包括DirectX顯示設備接口和DirectInput設備接口。其中服務器端虛擬輸入裝置是通過服務器端用戶層代碼注入以修改DirectX中的DirectInput接口函數來實現3D游戲實時接收輸入設備的輸入,從而操作3D游戲; 其中所述DirectInput接口函數是DirectX游戲用于收集操作輸入的接口函數,其通過 DirectInputDevice對象訪問輸入設備的數據,所述DirecWnputDevice對象代表輸入設備。其中所述用戶層代碼注入在3D游戲程序用到的接口函數調用與實際實現的功能之間插入代碼,以截獲程序的調用參數信息。其中所述用戶層代碼注入是一種透明的代碼插入技術,其將應用程序裝載入內存后再進行函數包裹,直接在內存中改寫相關函數的代碼,而不改變執行文件的大小。根據本發明的第四方面,提供一種客戶端,用于通過網絡顯示與操作3D游戲,該客戶端通過網絡與如權利要求25所述的運行3D游戲的服務器連接,所述客戶端包括客戶端視頻回放與用戶操作回傳裝置,接收服務器傳送給客戶端的壓縮過的3D 游戲圖像數據,并解碼顯示,通過輸入設備接收用戶的操作指令并回傳給服務器。本發明技術方案帶來的有益效果第一,可以在不支持大型3D游戲的客戶端設備上(除了便攜式設備外,還可包括顯卡能力較弱的PC與筆記本電腦)支持此類游戲;第二,可以在原先不支持現有網游的客戶端設備上(尤其是便攜式設備)支持網游操控,大大擴展了受眾范圍;第三,提供統一的各類PC游戲的發布與運營平臺,用戶可以以按時/按次/包月計費等靈活的形式在各類設備上操控各類游戲。進一步的,提出的游戲模式符合“軟件即服務模式(Software as krvice)”這一未來的主流軟件發布與使用模式,且利于保護游戲軟件著作權——采用服務器集中運行模式,客戶端不需要安裝游戲,可以幫助制止盜版行為,有利于我國的知識產權保護政策的實施。四
圖1示出了根據本發明系統的方塊示意圖;圖2示出了根據本發明方法的方法流程圖;圖3示出了根據本發明方法的3D圖像渲染流程圖;圖4示出了根據本發明方法的客戶端回傳鍵盤設備操作信息的流程圖。圖5示出了根據本發明方法的遠程顯示與操控3D游戲的總體運行流程圖。
五具體實施例方式如圖1所示那樣,本發明系統的核心部分包括如下四部分服務器端應用層顯示裝置和虛擬輸入裝置,服務器端視頻壓縮裝置,客戶端視頻回放與用戶操作回傳裝置。同樣,如圖2所示,根據本發明方法的核心部分也包括四個步驟,即步驟一服務器端應用層顯示裝置實時獲取服務器端的基于DirectX的3D游戲顯示圖像的圖像數據;步驟二 服務器將獲取的3D游戲顯示圖像的圖像數據進行壓縮并將壓縮過的圖像數據傳送至客戶端; 步驟三客戶端接收上述壓縮過的圖像數據并解碼顯示,通過輸入設備接收用戶的操作指令并回傳給服務器端的服務器端虛擬輸入裝置;步驟四服務器端虛擬輸入裝置實時接收客戶端回傳的操作指令,將其轉換為DirectX游戲程序所能獲得的操作信息。接下來,參考圖1-4具體描述本發明的具體實現方案1)服務器端應用層顯示裝置實時獲取服務器端的基于DirectX的3D游戲顯示圖像的圖像數據。服務器端應用層顯示裝置實時的獲得服務器端的游戲顯示畫面(在不修改游戲代碼的前提下)。我們采用應用層虛擬化的方法來實施。一般的,3D游戲開發依賴于系統提供的多媒體編程接口,目前Windows平臺下的主流開發接口就是微軟的DirectX與0PENGL。但是DirectX目前占據絕對優勢——2002 年以后開發的絕大部分WindoWS3D游戲都是DirectX的。因此這一實施方案主要是針對 DirectX的,但是也可以用于0PENGL。DirectX的游戲圖像生成與顯示過程如下Step DDirectX運行環境初始化;Step幻游戲程序創建一個DirectX的服務器端應用層顯示裝置,以DirectX 9為例(下同),相關的創建設備調用是——HRESULT IDirect3D9:CreateDevice(UINT adapter, D3DDEVTYPE deviceType, HWND focusffindow, DffORDbehaviourFlags, D3DPRESENT_PARAMETERS*presentationParame ters, IDirect3DDevice9氺氺device);Step 3)針對這個設備開始3D圖像的渲染過程,周而復始,直至游戲退出。Step 3. 1)清空顯示設備的當前內容;Step 3. 2)通知該設備開始渲染;Step 3. 3)在該設備上渲染圖像;Step 3. 4)通知該設備渲染過程結束;St印3. 顯示該圖像;與本發明相關的主要步驟是乂印3. 5,這是通過Direct X調用
HRESULT IDirect3DDevice9:SCPresent(IDirect3DSwapChain9*pSwapChain, const RECT^src, const RECT氺dest,HWND hffnd, LPVOID unused, DWORD dwFlags)來實現的。本發明通過用戶層代碼注入方法(具體的代碼注入方法在“幻用戶層代碼注入” 一節闡述),修改了這個函數的默認行為,使得其可以獲取該顯示設備的當前圖像數據,并將其拷貝到內存中,具體的實現方法如下 獲得該顯示設備,使用的DirectX調用是IDirect3DSwapChain9:GetDevice(IDirect3DDevice9**ppDevice); 獲得該設備上圖像的屬性,包括大小等。使用的DirectX調用是IDirect3DDevice9:GetBackBuffer(UINT iSwapChain, UINT BackBuffer, D3DBACKBUFFER_TYPEType, IDirect3DSurface9**ppBackBuffer);與IDirect3DSurface9GetDesc(D3DSURFACE_DESC*pDesc); 然后創建一個新的Surface,將該設備的圖像數據拷貝到該surface上,并鎖住該Surface,并將圖像數據拷貝到內存中;IDirect3DDevice9:CreateOffscreenPlainSurface(UINT Width, UINT Height, D3DF0RMAT Format, D3DP00L Pool, IDirect3DSurface9**ppSurface, HANDLE^pSharedHandle) -J/ 創建一個新的 SurfaceIDirect3DDevice9::GetRenderTargetData(IDirect3DSurface9*pRenderTarge t, IDirect3DSurface9*pDestSurface) -J/ 將該設備的圖像數據拷貝到該 surface 上IDirect3DSurface9: LockRect (D3DL0CKED_RECT 氺 pLockedRect, const RECT^pRect, DWORD Flags) ;//鎖住該 SurfaceLockRect的返回值之一,pLockedRect,是一個指向顯示設備內圖像內容的指針, 可以將其拷貝至內存,從而完成這一游戲顯示畫面的獲取過程。2)服務器將獲取的3D游戲顯示圖像的圖像數據進行壓縮并將壓縮過的圖像數據傳送至客戶端通過1)獲得的圖像數據是BMP格式的,本發明通過對其進行壓縮,將壓縮后的視頻數據傳送至客戶端,完成顯示。因為1)中圖像數據的截獲是連續進行的,因此實際上就獲得了連續的圖像數據。具體的視頻壓縮算法可以采用MPEG4或者H264(但不限于),這一方面是成熟技術。3)客戶端接收上述壓縮過的圖像數據并解碼顯示客戶端軟件接收到視頻數據后解碼顯示,其工作原理與一般的視頻播放軟件相同。不同之處在于,客戶端軟件還必須接受用戶對于游戲視頻的操作,將其傳遞給服務器端的虛擬設備層。這一類操作分為兩個類別 鍵盤主要是接收用戶的按鍵操作,將其傳送給服務器端。即只要客戶端截獲到本地的某個按鍵的狀態變化了(比如從正常狀態到被按下,或者從按下到釋放)就需要將其傳到服務器端; 指針設備,如鼠標接收用戶的移動操作以及按鍵操作,傳送給服務器端。移動信息包括指針在水平與豎直方向的位移量。
4)服務器端虛擬輸入裝置實時接收客戶端回傳的操作指令,將其轉換為DirectX 游戲程序所能獲得的操作信息接收到客戶端的操作回傳信息后,服務器端需要將其轉換為DirectX游戲程序所能獲得的操作信息。這兒主要通過用戶層代碼注入方法,修改了 DirectX中DirectInput 接口的行為-DirectX游戲用于接收操作輸入的接口是DirectInput接口,其通過 DirectInputDevice對象訪問每個輸入設備的數據。一個DirecWnputDevice對象代表一個輸入設備,如鼠標、鍵盤或游戲桿。以鍵盤為例,本發明修改了 DirectlnputDevice對象的一些方法,來達到將客戶端傳送過來的操控信息傳遞給游戲的目的。DirectlnputDevice (鍵盤)的工作流程如下Step 1)創建一個鍵盤設備;Step 2)將其設定為通過一個256字節的數組返回鍵盤狀態值;Step 3)設定協作模式;Step 4)激活對設備的訪問權限;Step 5)獲取設備的操作信息;Step 5)是一個循環獲取的過程,使得游戲可以實時的接收設備輸入,從而完成控制。與本發明相關的主要步驟也是這一步。 可以通過兩種方式來獲得設備輸入一 立即方式即獲得當前時刻鍵盤的狀態。這兒將鍵盤看作是具有256不同按鍵的設備,每個按鍵的狀態(“按下”或者“非按下”)都由對應的一個256字節數組的每一個元素來表示,一般0表示“非按下”,0x80表示“按下”。相應的接口函數是IDirectlnputDe vice8: GetDeviceState (DWORD cbData, LPVOID IpvData)。本發明通過代碼注入修改了這個函數的行為,使其不是獲得服務器端本地物理鍵盤的輸入,而是將客戶端的按鍵狀態行為返回。 緩沖方式返回上一次獲得鍵盤輸入后,鍵盤的連續的變化情況。如,在兩次獲得鍵盤輸入的調用間,用戶按下空格鍵、彈起空格鍵、按下“X”鍵,又彈起“X”鍵。那么通過 “立即方式”,返回的是彈起“X”鍵后鍵盤的狀態,也即“X”與空格鍵的按下/彈起這一過程無法返回;而在此模式下,則可以返回一系列操作狀態,包括上述的“X”與空格鍵的按下/ 彈起過程。本發明通過代碼注入修改了這個函數的行為,使其不是獲得服務器端本地物理鍵盤的輸入,而是將客戶端的按鍵狀態行為返回。5)用戶層代碼注入用戶層代碼注入的實質就是在游戲程序用到的接口調用與實際實現的功能之間插入代碼,以便截獲程序的調用參數等信息。本發明采用了透明的代碼插入技術,其將應用程序裝載入內存后再進行函數包裹,直接在內存中改寫相關函數的代碼,這樣可以不改變執行文件的大小,而效果是一樣的。這種技術能在用戶無需修改源代碼,無需重新編譯連接,及不替換任何動態連接庫的前提下實現所需的功能。具體的方法如下——下圖顯示了 Windows下執行文件的組成,包括文件頭,PE頭, 正文段包括程序代碼,數據段包括初始化數據、所用到的動態連接庫與系統調用的輸入鏈
13表,輸出(Exported)函數表與調試符號。為修改Windows執行代碼,本發明在調試符號與輸出函數表之間創建了一個新的段——含有原先的PE頭的拷貝與一個新的函數輸入表,同時修改了原先的PE頭使之指向新的輸入表。最后是插入的代碼。插入新的輸入表有兩個目的首先它保留了原先的輸入表以便在需要時將修改過的執行文件改回去。其次,新的輸入表可以包括新的動態連接庫用以完成所需的額外功能。 這樣當目標程序調用DirectX的相關接口時,實際上查詢的是插入的新的函數輸入表,從而調用了插入代碼,從而改變了相關接口的默認行為。
權利要求
1.一種通過網絡顯示與操作3D游戲的方法,該方法包括以下步驟步驟一服務器端應用層顯示裝置實時獲取服務器端的基于DirectX的3D游戲顯示圖像的圖像數據;步驟二 服務器將獲取的3D游戲顯示圖像的圖像數據進行壓縮并將壓縮過的圖像數據傳送至客戶端;步驟三客戶端接收上述壓縮過的圖像數據并解碼顯示,通過輸入設備接收用戶的操作指令并回傳給服務器端的服務器端虛擬輸入裝置;步驟四服務器端虛擬輸入裝置實時接收客戶端回傳的操作指令,將其轉換為 DirectX游戲程序所能獲得的操作信息。
2.如權利要求1所述的方法,其中所述步驟一中基于DirectX的3D游戲顯示圖像的圖像數據的生成與顯示包括如下步驟步驟1. DDirectX運行環境初始化;步驟1. 2) 3D游戲程序創建一個DirectX的服務器端應用層顯示裝置;步驟1. 3)針對上述顯示裝置進行3D游戲顯示圖像的渲染過程,周而復始,直至退出游戲。
3.如權利要求2所述的方法,其中上述步驟1.3)包括 步驟1. 3. 1)清空上述顯示裝置的當前內容;步驟1. 3. 2)通知該顯示裝置開始渲染; 步驟1. 3. 3)在該顯示裝置上渲染所述圖像; 步驟1. 3. 4)通知該顯示裝置渲染過程結束; 步驟1.3. 5)顯示該圖像。
4.如權利要求3所述的方法其中所述步驟1.3. 5)是通過服務器端用戶層代碼注入修改DirectX調用函數的默認行為,使其獲取該顯示裝置的當前圖像數據,并將其拷貝到內存中,以完成3D游戲顯示圖像的獲取。
5.如權利要求1所述的方法,其中所述步驟一中獲取的圖像數據是連續的圖像數據, 使用視頻壓縮算法對所述獲取的圖像數據進行壓縮。
6.如權利要求1所述的方法,其中步驟三中的所述輸入設備包括鼠標。
7.如權利要求1所述的方法,其中步驟三中的所述輸入設備包括鍵盤。
8.如權利要求1所述的方法,其中步驟四是通過服務器端用戶層代碼注入以修改 DirectX中的Directhput接口函數來實現3D游戲實時接收輸入設備的輸入,從而操作3D 游戲;其中所述Directhput接口函數是DirectX游戲用于收集操作輸入的接口函數,其通過DirecUnputDevice對象訪問輸入設備的數據,所述DirecWnputDevice對象代表輸入設備。
9.如權利要求8所述的方法,其中所述DirectlnputDevice對象為鍵盤,則 DirectInputDevice (鍵盤)的工作流程如下步驟4. 1)創建一個鍵盤設備;步驟4. 2)將其設定為通過一個256字節的數組返回鍵盤狀態值; 步驟4. 3)設定協作模式; 步驟4. 4)激活對該鍵盤設備的訪問權限;步驟4. 5)獲取該鍵盤設備的操作信息,其中,步驟4. 5)是一個循環獲取的過程,使得3D游戲實時接收鍵盤設備輸入,從而完成控制。
10.如權利要求9所述的方法,通過以下兩種方式任意之一獲取步驟4. 中的鍵盤設備的操作信息立即方式即獲得當前時刻鍵盤設備的狀態,將鍵盤設備看作是具有256不同按鍵的設備,每個按鍵的狀態包括按下狀態或者非按下狀態,且每個按鍵的狀態都由對應的一個 256字節數組的一個元素來表示,0表示非按下狀態,0x80表示按下狀態,通過服務器端用戶層代碼注入修改鍵盤設備對應的接口函數的行為,使其不是獲得服務器端本地物理鍵盤的輸入,而是將客戶端的按鍵狀態行為返回;緩沖方式返回上一次獲得鍵盤設備的輸入之后的鍵盤設備的連續變化情況,通過服務器端用戶層代碼注入修改鍵盤設備對應的接口函數的行為,使其不是獲得服務端本地物理鍵盤的輸入,而是將客戶端的按鍵狀態行為返回。
11.如權利要求4、8或10任一所述的方法,其中所述用戶層代碼注入在3D游戲程序用到的接口函數調用與實際實現的功能之間插入代碼,以截獲程序的調用參數信息。
12.如權利要求4、8或10任一所述的方法,其中所述用戶層代碼注入是一種透明的代碼插入,其將應用程序裝載入內存后再進行函數包裹,直接在內存中改寫相關函數的代碼, 而不改變執行文件的大小。
13.一種通過網絡顯示與操作3D游戲的系統,該系統包括服務器端應用層顯示裝置,實時獲取服務器端的基于DirectX的3D游戲顯示圖像的圖像數據;服務器端視頻壓縮裝置,將獲取的3D游戲顯示圖像的圖像數據進行壓縮并將壓縮過的圖像數據傳送至客戶端;客戶端視頻回放與用戶操作回傳裝置,接收上述壓縮過的圖像數據并解碼顯示,通過輸入設備接收用戶的操作指令并回傳給服務器端虛擬輸入裝置;服務器端虛擬輸入裝置,實時接收客戶端回傳的操作指令,將其轉換為DirectX游戲程序所能獲得的操作信息。
14.如權利要求13所述的系統,其中所述服務器端應用層顯示裝置使用包括如下裝置來生成和顯示基于DirectX的3D游戲顯示圖像的圖像數據裝置,用于DirectX運行環境初始化;裝置,用于3D游戲程序創建一個DirectX的服務器端應用層顯示裝置; 裝置,用于針對上述顯示裝置進行3D游戲顯示圖像的渲染過程,周而復始,直至退出游戲。
15.如權利要求14所述的系統,其中上述用于針對上述顯示裝置進行3D游戲顯示圖像的渲染過程,周而復始,直至退出游戲的裝置包括裝置,用于清空上述顯示裝置的當前內容; 裝置,用于通知該顯示裝置開始渲染; 裝置,用于在該顯示裝置上渲染所述圖像; 裝置,用于通知該顯示裝置渲染過程結束;上述3D顯示裝置,用于顯示該圖像。
16.如權利要求15所述的系統其中用于顯示該圖像的顯示裝置是通過服務器端用戶層代碼注入修改DirectX調用函數的默認行為,使其獲取該顯示裝置的當前圖像數據,并將其拷貝到內存中,以完成3D游戲顯示圖像的獲取。
17.如權利要求13所述的系統,其中所述服務器端應用層顯示裝置獲取的圖像數據是連續的圖像數據,使用視頻壓縮算法對所述獲取的圖像數據進行壓縮。
18.如權利要求13所述的系統,其中所述輸入設備包括鼠標。
19.如權利要求13所述的系統,其中所述輸入設備包括鍵盤。
20.如權利要求19所述的系統,其中服務器端虛擬輸入裝置是通過服務器端用戶層代碼注入以修改DirectX中的DirectInput接口函數來實現3D游戲實時接收輸入設備的輸入,從而操作3D游戲;其中所述Directhput接口函數是DirectX游戲用于收集操作輸入的接口函數,其通過DirectlnputDevice對象訪問輸入設備的數據,所述 DirectInputDevice對象代表輸入設備。
21.如權利要求20所述的系統,其中所述DirectlnputDevice對象為鍵盤,則 DirectInputDevice (鍵盤)包括如下裝置,用于創建一個鍵盤設備;裝置,用于將所述鍵盤設備設定為通過一個256字節的數組返回鍵盤狀態值;裝置,用于設定協作模式;裝置,用于激活對該鍵盤設備的訪問權限;裝置,用于獲取該鍵盤設備的操作信息,其中,用于獲取該鍵盤設備的操作信息的裝置循環獲取操作信息,使得3D游戲實時接收鍵盤設備輸入,從而完成控制。
22.如權利要求21所述的系統,通過以下兩種方式任意之一獲取鍵盤設備的操作信息立即方式即獲得當前時刻鍵盤設備的狀態,將鍵盤設備看作是具有256不同按鍵的設備,每個按鍵的狀態包括按下狀態或者非按下狀態,且每個按鍵的狀態都由對應的一個 256字節數組的一個元素來表示,一般0表示非按下狀態,0x80表示按下狀態,通過用戶層代碼注入修改鍵盤設備對應的接口函數的行為,使其不是獲得服務器端本地物理鍵盤的輸入,而是將客戶端的按鍵狀態行為返回;緩沖方式返回上一次獲得鍵盤設備的輸入之后的鍵盤設備的連續變化情況,通過服務器端用戶層代碼注入修改鍵盤設備對應的接口函數的行為,使其不是獲得服務端本地物理鍵盤的輸入,而是將客戶端的按鍵狀態行為返回。
23.如權利要求14、20或22任一所述的系統,其中所述用戶層代碼注入在3D游戲程序用到的接口函數調用與實際實現的功能之間插入代碼,以截獲程序的調用參數信息。
24.如權利要求14、20或22任一所述的系統,其中所述用戶層代碼注入是一種透明的代碼插入技術,其將應用程序裝載入內存后再進行函數包裹,直接在內存中改寫相關函數的代碼,而不改變執行文件的大小。
25.一種服務器,用于通過網絡顯示與操作3D游戲,該服務器通過網絡與客戶端連接, 所述服務器包括服務器端應用層顯示裝置,實時獲取服務器端的基于DirectX的3D游戲顯示圖像的圖像數據;服務器端視頻壓縮裝置,將獲取的3D游戲顯示圖像的圖像數據進行壓縮并將壓縮過的圖像數據傳送至客戶端;服務器端虛擬輸入裝置,實時接收客戶端回傳的操作指令,將其轉換為DirectX游戲程序所能獲得的操作信息,其中所述客戶端回傳的操作指令是客戶端接收上述壓縮過的圖像數據并解碼顯示,并通過輸入設備接收用戶的操作指令并回傳給該服務器端虛擬輸入裝置。
26.如權利要求25所述的服務器,其中通過服務器端用戶層代碼注入修改DirectX調用函數的默認行為,使其獲取3D游戲顯示圖像的圖像數據,并將其拷貝到內存中,以完成 3D游戲顯示圖像的獲取
27.如權利要求25所述的服務器,其中該服務器進一步包括DirectX顯示設備接口和 DirectInput 設備接口。
28.如權利要求27所述的服務器,其中服務器端虛擬輸入裝置是通過服務器端用戶層代碼注入以修改DirectX中的DirectInput接口函數來實現3D游戲實時接收輸入設備的輸入,從而操作3D游戲;其中所述DirectInput接口函數是DirectX游戲用于收集操作輸入的接口函數,其通過DirectlnputDevice對象訪問輸入設備的數據,所述 DirectInputDevice對象代表輸入設備。
29.如權利要求沈或28所述的服務器,其中所述用戶層代碼注入在3D游戲程序用到的接口函數調用與實際實現的功能之間插入代碼,以截獲程序的調用參數信息。
30.如權利要求沈或觀所述的服務器,其中所述用戶層代碼注入是一種透明的代碼插入技術,其將應用程序裝載入內存后再進行函數包裹,直接在內存中改寫相關函數的代碼, 而不改變執行文件的大小。
31.一種客戶端,用于通過網絡顯示與操作3D游戲,該客戶端通過網絡與如權利要求 25所述的運行3D游戲的服務器連接,所述客戶端包括客戶端視頻回放與用戶操作回傳裝置,接收服務器傳送給客戶端的壓縮過的3D游戲圖像數據,并解碼顯示,通過輸入設備接收用戶的操作指令并回傳給服務器。
全文摘要
本發明提供一種通過網絡遠程顯示與操作3D游戲的方法、系統、服務器和客戶端。所述該方法包括以下步驟步驟一服務器端應用層顯示裝置實時獲取服務器端的基于DirectX的3D游戲顯示圖像的圖像數據;步驟二服務器將獲取的3D游戲顯示圖像的圖像數據進行壓縮并將壓縮過的圖像數據傳送至客戶端;步驟三客戶端接收上述壓縮過的圖像數據并解碼顯示,通過輸入設備接收用戶的操作指令并回傳給服務器端的服務器端虛擬輸入裝置;步驟四服務器端虛擬輸入裝置實時接收客戶端回傳的操作指令,將其轉換為DirectX游戲程序所能獲得的操作信息。根據本發明的方法和系統,在不對現有游戲做出任何修改的前提下,通過用戶層代碼注入的方式實時的獲得3D游戲的圖像數據;在不對現有游戲做出任何修改的前提下,通過用戶層代碼注入的方式將客戶端回傳的用戶輸入提供給游戲。
文檔編號H04L29/06GK102355489SQ20111023507
公開日2012年2月15日 申請日期2011年8月17日 優先權日2011年8月17日
發明者焦秀琴 申請人:焦秀琴