本发明涉及远程控制领域,尤其一种云游戏远程控制方法及系统。
背景技术:
1、在现有的远程桌面控制软件中,只能对一些基本的软件进行远程操作,不能对一些大型3d游戏进行远程操作,所以这就导致在云游戏的场景中不能直接使用现有的远程控制软件或技术,导致出现上述问题的因素有如下几点:
2、第一点:目前市面上windows端远程控制技术(sendinput/sendmessage/postmessage)都是通过向windows消息队列发起的键鼠模拟事件,而现有的大型游戏的键鼠输入获取方式不再是简单的windows消息队列,因为消息队列的性能会导致触控的延迟,这是不允许的。
3、第二点:游戏触控输入的多元化,比如有些游戏用的是rawinput,有些又用的是xinput等,这就导致现有的远程控制技术对这类游戏完全是不能进行触控输入的。
4、第三点:游戏触控输入的平滑性,因为在云游戏的场景中,传输控制指令会随着网络波动从而会导致触控抖动,现有的远程软件中也没有做对应优化。
5、第四点:在云游戏场景中,有些游戏因为触控ui元素较多,为了在移动端不再各自开发虚拟触控,所以游戏兼容了触摸屏触控,故在游戏端设计一套通用的ui,避免接入云游戏sdk时再各自单独设计虚拟触控元素。现有的远程桌面控制技术,还达不到触屏touch事件的模拟。
技术实现思路
1、为了实现云游戏输入的多元性和平滑性,本发明提供了一种云游戏远程控制方法,所述方法包括以下步骤:
2、捕获云游戏客户端人机交互设备触发的事件和事件参数,将所述事件发生的序号、所述事件和所述事件参数按照与人机交互设备对应的协议封装成云游戏服务器端可识别的数据包,将所述数据包放入到缓存区域,并通过udp协议发送到所述服务器端;
3、所述服务器端将接收到的所述数据包缓存到jitter buffer中,解析所述数据包并根据所述事件发生的序号确定所述数据包是否丢失,如果丢失,则根据所述序号请求所述客户端从缓存区域中获取所述数据包并重新发送;虚拟驱动解析所述数据包获得解析后的数据;
4、所述虚拟驱动将所述数据发送给服务器端的物理驱动,通过游戏引擎处理对应的事件。
5、优选地,所述方法还包括:
6、预先定义人机交互设备的hid描述符和所述hid描述符下的报告描述符,服务器端获取所述hid描述符和所述报告描述符;其中,不同的人机交互设备对应不同的hid描述符和hid描述符下的报告描述符;
7、所述虚拟驱动在接收到数据包后按照所述hid描述符和所述报告描述符解析数据包,并转换为服务器端物理驱动可识别的数据。
8、优选地,所述服务器端将接收到的所述数据包缓存到jitter buffer中,具体为:
9、根据用户对云游戏的历史操作信息计算得到云游戏当前场景中用户操作频繁程度;
10、其中,所述操作频繁程度的计算方法是:累加以当前时间为中心的预定时间内人机交互设备触发的按下事件和/或释放事件的次数,将所述累加的结果作为用户操作频繁程度;
11、获取当前时刻前所述预定时间内网络延迟,将所述操作频繁程度和所述网络延迟作为目标函数的输入,将目标函数的输出作为jitter buffer大小;
12、其中,所述目标函数满足:目标函数的输出与所述操作频繁程度负相关,且与所述网络延迟正相关;
13、服务器端接收数据包,将所述事件对应的数据包存储到jitter buffer中。
14、优选地,所述根据所述序号请求所述客户端从缓存区域中获取所述数据包并重新发送,具体为:
15、判断请求重新发送的次数,若发送的次数没有超过阈值,则从所述缓存区域中获取所述数据包并重新发送;
16、若超过阈值,则将所述数据包从所述缓存区域中删除,并获取请求重新发送的数据包对应的事件event;根据用户对云游戏的历史操作信息得到所述事件event的事件参数,将所述事件event、所述事件event的事件参数和所述事件event的序号封装为数据包,并根据所述序号将数据包缓存到jitter buffer中。
17、优选地,所述阈值的确定方法为:
18、根据用户对云游戏的历史操作信息计算得到云游戏当前场景中用户操作频繁程度;
19、其中,所述操作频繁程度的计算方法是:累加以当前时间为中心的预定时间内人机交互设备触发的按下事件和/或释放事件的次数,将所述累加的结果作为用户操作频繁程度;
20、基于所述数据包对应的事件event在云游戏当前场景中发生的次数和所述操作频繁程度的比值确定所述阈值。
21、优选地,所述根据用户对云游戏的历史操作信息得到所述事件event的事件参数,具体为:
22、统计历史操作中事件event的参数信息和事件event对应的事件的参数信息,得到事件event的事件参数;
23、所述事件event对应的事件,具体为:
24、若所述事件event为键盘或鼠标按键按下事件,则所述事件event对应的事件为所述按键的释放事件;
25、若所述事件event为键盘或鼠标按键释放事件,则所述事件event对应的事件为所述按键的按下事件;
26、若所述事件event为触摸屏触摸开始事件,则所述事件event对应的事件为触摸屏触摸结束事件;
27、若所述事件event为触摸屏触摸结束事件,则所述事件event对应的事件为触摸屏触摸开始事件。
28、此外,本发明还提供了一种云游戏远程控制系统,所述系统包括以下模块:
29、控制信息获取模块,用于捕获云游戏客户端人机交互设备触发的事件和事件参数,将所述事件发生的序号、所述事件和所述事件参数按照与人机交互设备对应的协议封装成云游戏服务器端可识别的数据包,将所述数据包放入到缓存区域,并通过udp协议发送到所述服务器端;
30、控制信息解析模块,所述服务器端将接收到的所述数据包缓存到jitter buffer中,解析所述数据包并根据所述事件发生的序号确定所述数据包是否丢失,如果丢失,则根据所述序号请求所述客户端从缓存区域中获取所述数据包并重新发送;虚拟驱动解析所述数据包获得解析后的数据;
31、云游戏控制模块,所述虚拟驱动将所述数据发送给服务器端的物理驱动,通过游戏引擎处理对应的事件。
32、优选地,所述系统还包括:
33、描述符定义模块,用于预先定义人机交互设备的hid描述符和所述hid描述符下的报告描述符,服务器端获取所述hid描述符和所述报告描述符;其中,不同的人机交互设备对应不同的hid描述符和hid描述符下的报告描述符;
34、所述虚拟驱动还用于:在接收到数据包后按照所述hid描述符和所述报告描述符解析数据包,并转换为服务器端物理驱动可识别的数据。
35、优选地,所述服务器端将接收到的所述数据包缓存到jitter buffer中,具体为:
36、根据用户对云游戏的历史操作信息计算得到云游戏当前场景中用户操作频繁程度;
37、其中,所述操作频繁程度的计算方法是:累加以当前时间为中心的预定时间内人机交互设备触发的按下事件和/或释放事件的次数,将所述累加的结果作为用户操作频繁程度;
38、获取当前时刻前所述预定时间内网络延迟,将所述操作频繁程度和所述网络延迟作为目标函数的输入,将目标函数的输出作为jitter buffer大小;
39、其中,所述目标函数满足:目标函数的输出与所述操作频繁程度负相关,且与所述网络延迟正相关;
40、服务器端接收数据包,将所述事件对应的数据包存储到jitter buffer中。
41、优选地,所述根据所述序号请求所述客户端从缓存区域中获取所述数据包并重新发送,具体为:
42、判断请求重新发送的次数,若发送的次数没有超过阈值,则从所述缓存区域中获取所述数据包并重新发送;
43、若超过阈值,则将所述数据包从所述缓存区域中删除,并获取请求重新发送的数据包对应的事件event;根据用户对云游戏的历史操作信息得到所述事件event的事件参数,将所述事件event、所述事件event的事件参数和所述事件event的序号封装为数据包,并根据所述序号将数据包缓存到jitter buffer中。
44、优选地,所述阈值的确定方法为:
45、根据用户对云游戏的历史操作信息计算得到云游戏当前场景中用户操作频繁程度;
46、其中,所述操作频繁程度的计算方法是:累加以当前时间为中心的预定时间内人机交互设备触发的按下事件和/或释放事件的次数,将所述累加的结果作为用户操作频繁程度;
47、基于所述数据包对应的事件event在云游戏当前场景中发生的次数和所述操作频繁程度的比值确定所述阈值。
48、优选地,所述根据用户对云游戏的历史操作信息得到所述事件event的事件参数,具体为:
49、统计历史操作中事件event的参数信息和事件event对应的事件的参数信息,得到事件event的事件参数;
50、所述事件event对应的事件,具体为:
51、若所述事件event为键盘或鼠标按键按下事件,则所述事件event对应的事件为所述按键的释放事件;
52、若所述事件event为键盘或鼠标按键释放事件,则所述事件event对应的事件为所述按键的按下事件;
53、若所述事件event为触摸屏触摸开始事件,则所述事件event对应的事件为触摸屏触摸结束事件;
54、若所述事件event为触摸屏触摸结束事件,则所述事件event对应的事件为触摸屏触摸开始事件。
55、最后,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序在被处理器执行时实现如上所述的方法。
56、本发明采用自定义hid描述符和报告描述符实现对不同云游戏输入设备数据的编码和解码,实现了云游戏输入设备的多元性;而且针对网络抖动带来的云游戏不好体验,本发明进一步采用jitter buffer消减网络抖动,提高了云游戏的体验。