具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种,但是不排除包含至少一种的情况。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
应当理解,尽管在本发明实施例中可能采用术语第一、第二、第三等来描述XXX,但这些XXX不应限于这些术语。这些术语仅用来将XXX彼此区分开。例如,在不脱离本发明实施例范围的情况下,第一XXX也可以被称为第二XXX,类似地,第二XXX也可以被称为第一XXX。
取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
在一种典型的场景中,多个用户可通过手机、平板电脑或者VR头显等多媒体播放客户端同时访问同一路由器,以通过该路由器获取服务端的视频资源进行体验和学习。为满足用户的视觉需求,服务端提供的视频具有较高的分辨率,例如目前流行4K(4096×2160)像素分辨率的视频。但是,这些分辨率较高的视频占用的数据传输带宽也很高,一般的路由器无法做到多台客户端同时在线观看且不卡顿的效果。比如,一个100M的路由器,只能提供给一台客户端观看码率为60Mbps的视频,若存在大于等于两台客户端同时观看时,每台客户端都将无法实现流畅的播放效果。
为解决上述缺陷,本发明提供了一种数据获取方法,以下将结合附图,详细说明本发明各实施例提供的技术方案。
图1是本发明一实施例提供的数据获取方法在服务端执行时的方法流程图,结合图1,该方法包括:
步骤101、响应于第一客户端发送的目标数据获取请求,从已访问所述目标数据的客户端中,确定用于响应所述目标数据获取请求的客户端作为响应客户端。
步骤102、通知所述第一客户端向所述响应客户端请求获取所述目标数据。
在本实施例中,第一客户端,指的是任意一台向服务端发起数据访问请求的客户端,例如可以是手机、电脑或VR客户端等。目标数据,指的是第一客户端访问的目标数据,例如视频数据、音频数据或其他可访问的数据等。
已访问所述目标数据的客户端,指的是在第一客户端之前,已经向服务端请求访问过目标数据的客户端。响应客户端,指的是已访问目标数据的客户端中,能够响应目标数据获取请求的客户端。通常,响应客户端具有能够与其他客户端进行通信能力,且该响应客户端的本地缓存有从服务端获取的目标数据。
服务端接收到第一客户端发送的目标数据获取请求之后,可确定一个具有响应能力的客户端作为响应客户端,并通知第一客户端向响应客户端请求获取所述目标数据。进而,多个请求获取目标数据的客户端之间可以形成数据互通的形式,后续请求访问目标数据的客户端不再仅依赖于服务端,极大减小了服务端的压力,解决了多个客户端连接于同一服务端时出现的带宽不够的缺陷。
可选的,在上述或下述实施例中,第一客户端或其他客户端向服务端请求获取数据,可通过与服务端连接的路由器实现,通常,在选取路由器时,可选择带宽大于单位时间内传输的数据位数的路由器,以确保至少有一个客户端能够流畅地获取目标数据。例如,当目标数据为码率为60Mbps的视频数据时,可选择带宽为100M的路由器。
可选的,在上述或下述实施例中,服务端可对访问目标数据的客户端进行记录,例如,可按照访问的时间先后顺序记录下访问目标数据的客户端的地址以及时间。接收到第一客户端发送的目标数据获取请求之后,服务端可查询记录,并确定在第一客户端请求获取目标数据之前,是否存在其他已经请求获取目标数据的客户端。若不存在,则可认为第一客户端是第一个向服务端请求获取目标数据的客户端,此时带宽足够,可由服务端直接响应第一客户端的请求,向第一客户端发送目标数据。若第一客户端请求获取目标数据之前,存在其他已经请求获取目标数据的客户端,则可认为已经有客户端直接与服务端连接并直接从服务端获取目标数据。此时,若第一客户端再直接从服务端获取目标数据,则可能导致带宽不够用。在这种情况下,可以采用本发明提供的数据获取方法,向已经请求获取目标数据的客户端请求获取目标数据,进而避免占用较多数据传输带宽。
图2是本发明另一实施例提供的数据获取方法在服务端执行时的方法流程图,结合图2,该方法包括:
步骤201、接收第一客户端发送的目标数据获取请求。
步骤202、按照访问所述目标数据的时间先后顺序,从所述已访问目标数据的客户端中选取最近一个访问所述目标数据的客户端作为响应客户端。
步骤203、将所述响应客户端的地址发送至所述第一客户端,并指示所述第一客户端向所述响应客户端请求获取所述目标数据。
步骤204、判断所述第一客户端是否反馈请求失败信息;若为否,则执行步骤205;若为是,则执行步骤203。
步骤205、标记所述第一客户端为已访问所述目标数据的客户端,并记录所述第一客户端的地址以及访问时间。
步骤206、确定在所述最近一个访问所述目标数据的客户端之前访问所述目标数据的客户端作为响应客户端,从所述已访问所述目标数据的客户端中删除所述最近一个访问所述目标数据的客户端,并执行步骤203。
在步骤207中、通知所述第一客户端向所述响应客户端请求获取所述目标数据。
在步骤201中,可选的,第一客户端和服务端可位于同一局域网内,第一客户端可通过与服务端连接的路由器建立的局域网访问服务端。当然,在其他可选的实施方式中,第一客户端也可通过蓝牙或者红外通信等方式与提供目标数据的服务端建立通信连接,不再赘述。
在步骤202中,可选的,已访问目标数据的客户端可以是在第一客户端请求获取目标数据之前的指定时间范围内访问目标数据的客户端。例如,可以是在第一客户端请求获取目标数据之前30分钟内或2小时内访问目标数据的客户端。
可选的,已访问目标数据的客户端可以是在第一客户端请求获取目标数据之前访问目标数据的若干个客户端。例如,可以是在第一客户端请求获取目标数据之前访问目标数据的最近10个客户端。
可选的,服务端可以对已访问目标数据的客户端进行记录以及管理。例如,每个客户端向服务端发送目标数据获取请求时,服务端可记录其地址以及请求时间,并在该客户端访问到目标数据之后,按照请求时间的先后顺序,将该客户端添加至一客户端链表中,以生成“已访问目标数据的客户端”对应的链表。
进而,可选的,确定响应客户端时,服务端可查询“已访问目标数据的客户端”对应的链表,确定最近一个访问所述目标数据的客户端作为响应客户端。例如,服务端按照时间由远及近顺序记录的已访问目标数据的客户端为:地址为A1的第N-2个客户端、地址为A2的第N-1个客户端、地址为A3的第N个客户端、地址为A4的第N+1个客户端。如上所述,最近一个访问目标数据的客户端为第N+1个客户端,本步骤中可将第N+1个客户端作为响应客户端。
在这样的实施方式中,上一个请求访问目标数据的客户端可作为下一个请求访问目标数据的客户端的响应客户端,且每个客户端只有一个直接与之相连的下级客户端,进而可以在多个请求访问目标数据的客户端之间形成级联结构。这种级联结构能够在减小服务端带宽压力的同时,确保每一个客户端的带宽压力被控制在合理的范围内。
在步骤203中,确定响应客户端之后,可将响应客户端的地址反馈至第一客户端,并指示第一客户端向响应客户端请求获取目标数据。
在步骤204中,可选的,通知第一客户端向响应客户端请求获取目标数据之后,可等待第一客户端的反馈信息,并对反馈进行解析。
在步骤205中,如果没有接收到第一客户端反馈的请求失败信息,则可认为第一客户端与响应客户端之间成功建立了通信连接,且第一客户端成功访问到了目标数据。此时,可标记第一客户端为已访问目标数据的客户端,例如,将第一客户端添加至“已访问目标数据的客户端”对应的链表中,并记录所述第一客户端的地址以及访问时间。
在步骤206中,可选的,当响应客户端拒绝连接、响应客户端无响应或响应客户端在响应之后突然中断时,第一客户端可向服务端反馈请求失败信息。此时,服务端可将所述最近一个访问所述目标数据的客户端之前访问所述目标数据的客户端作为响应客户端。例如,当响应客户端为第N个客户端时,服务端接收到了第一客户端反馈的请求失败信息,则服务端此时可将第N-1个客户端作为响应客户端。其中,第N个客户端通过第N-1个客户端访问目标数据。
除此之外,本实施例中,还可从所述已访问所述目标数据的客户端中删除所述最近一个访问所述目标数据的客户端,例如,承接上述例子,当响应客户端为第N个客户端时,服务端接收到了第一客户端反馈的请求失败信息,则可将第N个客户端从已访问目标数据的客户端中删除。其目的在于,避免了下一次根据已访问目标数据的客户端的访问时间先后顺序确定响应客户端时,再次将该第N个客户端作为预估响应客户端而带来不必要的计算量。
可选的,本步骤中,服务端接收到第一客户端反馈的请求失败信息,还可通知所述最近一个访问所述目标数据的客户端之前访问所述目标数据的客户端停止对所述最近一个访问所述目标数据的客户端提供目标数据,以节省其带宽资源。
可选的,在确定新的响应客户端之后,可继续执行步骤203,以进一步验证第一客户端是否能顺利地从新的响应客户端处访问到目标数据,不再赘述。
本实施例中,服务端接收到第一客户端发送的目标数据获取请求之后,可确定一个具有响应能力的客户端作为响应客户端,并通知第一客户端向响应客户端请求获取所述目标数据。进而,多个请求获取目标数据的客户端之间可以形成数据互通的形式,后续请求访问目标数据的客户端不再仅依赖于服务端,极大减小了服务端的压力,解决了多个客户端连接于同一服务端时出现的带宽不够的缺陷。
上述实施例以服务端的角度对本发明提供的数据获取方法进行了介绍,以下部分将以客户端为执行主体,对本发明提供的技术方案进行说明。图3是本发明一实施例提供的数据获取方法在客户端执行时的方法流程图,如图3所示,该方法包括:
步骤301、向服务端发送目标数据获取请求。
步骤301、接收所述服务端的通知,以从所述通知中确定用于响应所述目标数据获取请求的响应客户端;所述响应客户端是从已访问所述目标数据的客户端中确定的。
步骤301、向所述响应客户端请求获取所述目标数据。
在本实施例中,客户端想要访问目标数据时,可向服务端发起目标数据获取请求,并接受服务端返回的能够获取目标数据的响应客户端。进而,可向响应客户端发送目标数据获取请求,而不再仅仅依赖于服务端,极大减小了服务端的压力,解决了多个客户端连接于同一服务端时出现的带宽不够的缺陷。
图4是本发明另一实施例提供的数据获取方法在客户端执行时的方法流程图,如图4所示,该方法包括:
步骤401、向服务端发送目标数据获取请求。
步骤402、接收所述服务端的通知,以从所述通知中确定用于响应所述目标数据获取请求的响应客户端的地址;所述响应客户端是从已访问所述目标数据的客户端中确定的。
步骤403、根据所述响应客户端的地址,向所述响应客户端发送通信请求。
步骤404、接收所述响应客户端发送的热点名称和密码。
步骤405、根据所述热点名称和密码,连接所述响应客户端建立的隐藏热点。
步骤406、向所述响应客户端请求获取所述目标数据。
可选的,本实施例提供的数据获取方法能够应用于视频数据共享的应用场景。在这种应用场景中,响应客户端向第一客户端发送目标数据时,可发送已缓冲的目标数据,进而第一客户端接收到目标数据之后可以直接进行播放,避免了重复的解码工作,提高了视频播放效率。
可选的,在一种应用场景中,第一客户端不需与响应客户端同步播放视频数据,此时,目标数据包括:响应客户端发送的从起始播放时刻开始播放的视频数据。在这种实施方式中,第一客户端接收到目标数据并缓冲之后,从起始播放时刻开始播放目标数据。
在另一种场景中,第一客户端需要与响应客户端同步播放视频数据。第一客户端向响应客户端发送目标数据获取请求,响应客户端向第一客户端发送从当前播放时刻开始播放的视频数据。第一客户端播放接收到的目标数据之前,需要进行一段时间的缓冲,这段缓冲时间将导致第一客户端无法实现与响应客户端同步播放。
可选的,在这种需求下,为统一第一客户端和响应客户端的播放进度,目标数据可包括:响应客户端发送的从当前播放时刻之后W秒开始播放的视频数据;其中,当前播放时刻,指的是响应客户端的当前播放时刻,所述W秒为所述第一客户端的播放缓冲阈值。通过这种实施方式,响应客户端向第一客户端发送从当前播放时刻之后W秒开始播放的视频数据,可使得第一客户端接收到目标数据并缓冲W秒之后,恰好能够与响应客户端同步播放目标数据。
例如,针对视频数据而言,响应客户端的当前视频播放时刻为T1(例如5s)时刻,客户端的缓冲阈值为T2(例如3s)。则,响应客户端发送至第一客户端的目标数据可包括:从T1+T2(例如5s+3s)时刻开始播放的视频数据。进而,第一客户端接收到目标数据后,缓冲T3(例如3s)时间后开始播放,此时响应客户端的视频播放时刻正好为T1+T2(例如8s)时刻,第一客户端和响应客户端实现了同步播放。
本实施例中,客户端根据服务端返回的能够获取目标数据的响应客户端的地址,与响应客户端建立通信连接并获取响应客户端已缓冲的目标数据,在解决了多个客户端连接于同一服务端时出现的带宽不够的缺陷的同时,提升了多个客户端获取目标数据的效率。
需要说明的是,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如101、102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。
还需要指出的是,在本发明的系统和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
以上描述了数据获取方法的可选实施方式,实际中,该数据获取方法可通过交互的服务端以及客户端实现,如图5所示,服务端包括:
确定模块501,用于响应于第一客户端发送的目标数据获取请求,从已访问所述目标数据的客户端中,确定用于响应所述目标数据获取请求的客户端作为响应客户端;通知模块502,用于通知所述第一客户端向所述响应客户端请求获取所述目标数据。
进一步可选地,确定模块501具体用于:按照访问所述目标数据的时间先后顺序,从所述已访问目标数据的客户端中选取最近一个访问所述目标数据的客户端作为响应客户端。
进一步可选地,通知模块502具体用于:将所述响应客户端的地址发送至所述第一客户端,并指示所述第一客户端向所述响应客户端请求获取所述目标数据。
进一步可选地,通知模块502还用于:通知所述第一客户端向所述响应客户端请求获取所述目标数据之后,若接收到所述第一客户端反馈的请求失败信息,则:确定在所述最近一个访问所述目标数据的客户端之前访问所述目标数据的客户端作为响应客户端;以及,从所述已访问所述目标数据的客户端中删除所述最近一个访问所述目标数据的客户端。
进一步可选地,通知模块502还用于:接收到所述响应客户端发送的终止数据传输请求时,通知所述第一客户端向在所述响应客户端之前访问所述目标数据的客户端请求获取所述目标数据。
上述服务端可执行本图1以及图2对应的实施例所提供的数据获取方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法,不再赘述。
如图6所示,客户端包括:请求模块601,用于向服务端发送目标数据获取请求;接收模块602,用于接收所述服务端的通知,以从所述通知中确定用于响应所述目标数据获取请求的响应客户端;所述响应客户端是从已访问所述目标数据的客户端中确定的;请求模块601,还用于向所述响应客户端请求获取所述目标数据。
进一步可选地,请求模块601具体用于:向所述响应客户端发送通信请求;接收所述响应客户端发送的热点名称和密码;根据所述热点名称和密码,连接所述响应客户端建立的隐藏热点;向所述响应客户端请求获取所述目标数据。
进一步可选地,所述目标数据包括:所述响应客户端发送的从当前播放时刻之后W秒开始播放的视频数据;其中,所述W秒为所述第一客户端的播放缓冲阈值。
上述客户端可执行本图3以及图4对应的实施例所提供的数据获取方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法,不再赘述。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务端,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。