通过网络显示与操作3d游戏的方法、系统、服务器及客户端的制作方法

文档序号:7753559阅读:260来源:国知局
专利名称:通过网络显示与操作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日
发明者焦秀琴 申请人:焦秀琴
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1