发明内容
本申请所要解决的技术问题是提供一种流媒体处理方法,包括:
在服务器端启动生成流媒体图像的进程,保持所述进程处于运行状态;
实时检测客户端获取流媒体图像的请求,当收到所述请求时,从所述处于运行状态的进程中获取所述流媒体图像,并返回至所述客户端;
接收所述客户端发出的操作指令,并根据所述操作指令生成相应的流媒体图像。
优选地,所述保持所述进程处于运行状态进一步包括检测所述客户端与所述服务器之间的流媒体图像传输状况,当检测出所述客户端与所述服务器之间的流媒体图像传输断开时,所述服务器重新启动所述生成流媒体图像的程序。
优选地,所述检测所述客户端与所述服务器之间的流媒体图像传输状况进一步包括所述客户端定时向所述服务器发送一数据包,所述服务器针对所述数据包返回一数据包,若所述客户端在阈值时间内收到所述返回的数据包,则视所述客户端与所述服务器之间的流媒体图像传输正在进行;若所述客户端在阈值时间内未收到所述返回的数据包,则视所述客户端与所述服务器之间的流媒体图像传输断开。
优选地,还包括所述客户端将关闭播放流媒体图像的进程的指令发送至所述服务器,所述服务器根据所述指令重新启动所述生成流媒体图像的进程。
优选地,所述从所述处于运行状态的进程中获取所述流媒体图像,并返回至所述客户端进一步包括从所述处于运行状态的进程中抓取、压缩所述流媒体图像,并将所述流媒体图像返回至所述客户端;所述客户端解压缩并显示所述流媒体图像。
相应地,本申请还提供了一种流媒体处理***,包括:
启动装置,用于在服务器端启动生成流媒体图像的进程,保持所述进程处于运行状态;
流媒体图像获取装置,用于实时检测客户端获取流媒体图像的请求,当收到所述请求时,从所述处于运行状态的进程中获取所述流媒体图像,并返回至所述客户端;
操作指令处理装置,用于接收所述客户端发出的操作指令,并根据所述操作指令生成相应的流媒体图像。
优选地,所述启动装置进一步包括检测模块,用于检测所述客户端与所述服务器之间的流媒体图像传输状况;以及重启模块,用于当检测出所述客户端与所述服务器之间的流媒体图像传输断开时,所述服务器重新启动所述生成流媒体图像的程序。
优选地,所述流媒体图像获取装置进一步包括流媒体图像返回模块,用于从所述处于运行状态的进程中抓取、压缩所述流媒体图像,并将所述流媒体图像返回至所述客户端;以及流媒体图像显示模块,用于在所述客户端解压缩并显示所述流媒体图像。
与现有技术相比,本申请有如下优点:
1.生成流媒体图像的进程在服务器端始终处于开启状态,当用户打开某一流媒体时,服务器接收到请求后会立即将流媒体图像传输给客户端,大大缩短了用户打开流媒体时等待生成流媒体图像的进程启动耗费的时间,提升了用户的体验。
2.本申请在客户端与服务器之间通过传递数据包检测客户端与服务器之间的流媒体图像传输状况,当检测出流媒体图像传输断开时,服务器会重新启动所述生成流媒体图像的进程,从而有效地保证了生成流媒体图像的进程在服务器上始终保持开启状态。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参照图1,示出了本申请流媒体处理方法的实施例流程图。
步骤101:在服务器端启动生成流媒体图像的进程,保持所述进程处于运行状态。
所述流媒体图像包括声音流、视频流、文本流、图像流、动画流等,如电视会议、游戏、广播新闻、影视、会议、演讲。流媒体在播放前并不下载整个文件,只将开始部分内容存入内存,流式媒体的数据流随时传送随时播放,只是在开始时有一些延迟。流媒体的传输主要有两种方法:实时流式传输(Real time streaming)和顺序流式传输(progressive streaming)。一般说来,如视频为实时广播,或使用流式传输媒体服务器,或应用如RTSP的实时协议,即为实时流式传输。如使用HTTP服务器,文件即通过顺序流发送。
所述服务器可以是普通的服务器,也可以是云服务器,其中云服务器是一种类似VPS服务器的虚拟化技术,VPS是采用虚拟软件,VZ或VM在一台服务器上虚拟出多个类似独立服务器的部分,每个部分都有云服务器的一个镜像,都可以做单独的操作***,管理方法同服务器一样。
在本发明一实施例中,流媒体为云游戏。云游戏服务器端包括两个主要模块,第一模块中存储了云游戏程序,通过运行该程序生成云游戏画面;第二模块用于接收客户端指令,根据该指令抓取云游戏画面,将该画面进行压缩并传输至客户端。
在服务器端,由第二模块对第一模块发出启动指令,从而启动生成流媒体图像的进程。其中,该指令使用的是windows***自带的API函数。启动该生成流媒体图像的进程后,若不对该进程发送指令,则该进程将始终处于运行状态,相当于服务器端始终处于打开游戏初始页面的状态。参照图2,示出了本申请客户端、web服务器及流媒体服务器之间的交互过程示意图。
在本发明一实施例中,服务器分为两种类型:web服务器和流媒体服务器。当用户通过安装在客户端上的播放器或网页浏览器选定一流媒体图像之后,客户端将该流媒体图像的ID发送至web服务器,web服务器根据流媒体图像的ID将运行该流媒体图像的流媒体服务器地址发送给客户端,客户端根据该地址向流媒体服务器请求流媒体图像,正在运行该流媒体图像的流媒体服务器将该流媒体图像传输至客户端,并由播放器播放该流媒体图像。
web服务器也称为网页服务器,主要功能是提供网上信息浏览服务。Web服务器可以解析HTTP协议。当Web服务器接收到一个HTTP请求,会返回一个HTTP响应,例如送回一个HTML页面。为了处理一个请求,Web服务器可以响应一个静态页面或图片,进行页面跳转,或者把动态响应的产生委托给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本、servlets、ASP(Active Server Pages)脚本、服务器端JavaScript,或者一些其它的服务器端技术。无论这些脚本的目的如何,这些服务器端的程序通常产生一个HTML的响应来让浏览器可以浏览。Web服务器的代理模型是当一个请求被送到Web服务器里来时,它只单纯的把请求传递给可以很好的处理请求的程序(服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端程序和返回程序所产生的响应的环境,而不会超出职能范围。服务器端程序通常具有事务处理,数据库连接和消息等功能。在本发明一实施例中,web服务器负责控制客户端和服务器之间的交互,包括接收服务器发送的运行的流媒体图像的ID和该服务器地址,以及向发出请求的客户端提供服务器地址。
步骤102:实时检测客户端获取流媒体图像的请求,当收到所述请求时,从所述处于运行状态的进程中获取所述流媒体图像,并返回至所述客户端。
所述客户端包括PC机、电视、便携终端、平板、投影机等具有显示和解码功能的装置。
获取流媒体图像请求可以通过安装在客户端上的播放器发出,也可以通过网页浏览器发出,例如通过加载于网页浏览器页面上的flash播放器播放流媒体图像或通过点击网页浏览器页面上的链接,连接到flash播放器,从而获取流媒体图像。
所述从所述处于运行状态的进程中获取所述流媒体图像,并返回至所述客户端进一步包括从所述处于运行状态的进程中抓取、压缩所述流媒体图像,并将所述流媒体图像返回至所述客户端;所述客户端解压缩并显示所述流媒体图像。
服务器端包括检测模块,用于实时检测客户端获取流媒体图像的请求。当收到该请求时,第二模块根据该请求抓取初始云游戏画面,将该画面进行压缩并传输至客户端。客户端解码后通过用户界面呈现给用户。
对每一块图像进行压缩包括按一定频率分别对属于同一帧图像的所述图像块进行帧内预测编码和帧间预测编码。
例如,每隔10帧图像进行帧内预测编码,压缩为I帧,I帧与I帧之间进行帧间预测编码,压缩为P帧,即按照IPPPPPPPPPPIPPPPPPPPPPI的编码形式对图像进行编码。可以使用MPEG系列标准(MPEG-1—MPEG-7)、H.261、H.262、H.263、H.264等标准进行编码,优选地,使用H.264进行编码。
在本发明一实施例中,初始图像是RGB图像,对图像进行压缩时将该帧图像分成R帧、G帧和B帧三帧图像分别进行处理,解压缩时合为一帧图像。也可以先将初始RGB图像转换为YCrCb图像,再对YCrCb图像进行压缩和解压缩处理。
具体地,对I帧图像进行帧内预测编码包括将分割出的每一块图像划分宏块。如图3所示,可以将每一块图像划分成16×16像素、16×8像素或8×8像素的宏块,或划分成更小的子宏块8×4像素、4×8像素、4×4像素,再预测每一个宏块的像素值。以16×16宏块帧内预测为例,使用与当前宏块相邻的33个像素生成预测值。如图4所示,共有4种预测模式:模式0(垂直预测)、模式1(水平预测)、模式2(DC预测)、模式3(平面预测),分别利用当前宏块上方(H)、左方(V)和左上方已编码的像素来预测当前宏块的像素值。
对P帧图像进行帧间预测编码包括以图3的方式对分割出的每一块图像划分宏块,优选地,将分割出的每一块图像分割成子宏块,估计子宏块由前一帧图像到当前帧图像的运动矢量。运动估计完成后,将获得的运动矢量信息和预测残差量化编码发送到解压缩端,一同发送到解压缩端的还有宏块划分模式的标识。
之后进行变换,变换方法包括傅里叶变换(DFT)、沃-哈变换(WHT)或离散余弦变换(DCT),优选地,对每一个宏块进行离散余弦变换(DCT)。DCT变换是将空间像素的几何分布变换为空间频率分布,例如,对于一个N×N图像f(x,y)的二维DCT变换公式为:
随后,针对上述的结果数据进行熵编码。熵编码可采用基于指数型Golomb码的统一变字长编码对除了变换系数之外的所有语法流元素进行编码,或采用基于上下文的自适应二进制算术编码。最后对宏块进行滤波处理。
将一帧图像的多个图像块编码压缩完成后,将所述多个图像块的标识信息和所述压缩数据封装成数据包并发送至解压缩端。
数据压缩完后,将压缩数据封装成数据包,该数据包中包括每个图像块的标识,如ID,以及压缩数据,该压缩数据是由数据包长度、起始地址、时间戳等信息表示的。
在对当前帧图像处理完后,服务器自动或者通过程序设定对下一帧图像以上述方法进行压缩,以实现视频流的实时压缩。该服务器可以是普通服务器或服务器。
客户端接收数据包后,将数据包拆开,获取压缩数据以及每个图像块的ID。
对压缩数据解压缩的过程是压缩过程的逆向过程,即对压缩数据分别按照熵解码、逆量化、逆变换,还原图像。
步骤103:接收所述客户端发出的操作指令,并根据所述操作指令生成相应的流媒体图像。
生成流媒体图像的进程是根据客户端发出的操作指令生成相应的流媒体图像。在本发明一实施例中,该流媒体为云游戏,客户端发出的操作指令为游戏指令,当用户开始游戏时,客户端将用户的指令发送给生成流媒体图像的进程,该进程根据该指令生成相应的游戏画面。该指令可以为鼠标或键盘指令,对于安装windows操作***的客户端,云服务器通过调用directX库中的getdevicestate函数及相关windows***通用的命令便可获得光标在用户界面上的坐标及鼠标的物理坐标。
客户端获取流媒体图像的请求首先发送给web服务器;所述web服务器将实时运行所述生成流媒体图像的进程的服务器地址发送至所述客户端;所述客户端根据所述服务器地址向所述服务器发送获取所述流媒体图像的请求;所述服务器根据所述请求返回所述流媒体图像。
web服务器负责控制客户端和服务器之间的交互,客户端向web服务器发送的获取请求中携带了流媒体图像的ID,同时web服务器不断接收流媒体服务器报告的地址及。web服务器将客户端发送的流媒体图像的ID与流媒体服务器报告的正在运行的流媒体图像的ID进行对照,选择正在运行相同ID的流媒体图像的服务器地址,并把该地址发送给客户端。客户端根据该地址向流媒体服务器发送获取该流媒体图像的请求,该流媒体服务器根据所述请求返回所述流媒体图像。
当遇到用户主动退出生成流媒体图像的进程或者网络断开等情况时,流媒体服务器的生成流媒体图像的进程会停止,因此需要重新启动该生成流媒体图像的进程,以便于该用户或其他用户获取该流媒体图像。
还包括所述客户端将关闭播放流媒体图像的进程的指令发送至所述服务器,所述服务器根据所述指令重新启动所述生成流媒体图像的进程。
当用户主动退出生成流媒体图像的进程时,所述客户端将关闭生成流媒体图像的进程的命令发送至所述服务器,所述服务器根据所述命令重新启动所述生成流媒体图像的进程。
当用户关闭流媒体播放窗口时,windows***会调用onclose函数以及关闭播放窗口的一系列的相关函数,其中包括将关闭窗口的命令发送给服务器的函数,服务器收到该命令后会重新启动流媒体播放程序。
网络断开时,服务器可以通过心跳机制检测到,之后重新启动流媒体播放程序。
参照图3,示出了本申请检测客户端与服务器之间流媒体图像传输状况的示意图。
本发明在客户端和服务器之间设置了心跳机制,用于检测所述客户端与所述服务器之间的流媒体图像传输状况,当检测出所述客户端与所述服务器之间的流媒体图像传输断开时,所述服务器重新启动所述生成流媒体图像的进程。心跳机制通常用于TCP协议中,可以由客户端发起,也可以由服务器端发起。
当心跳机制由客户端发起时,客户端定时向所述服务器发送一数据包,所述服务器针对所述数据包返回一数据包,若所述客户端在阈值时间内收到所述返回的数据包,则视所述客户端与所述服务器之间的流媒体图像传输正在进行;若所述客户端在阈值时间内未收到所述返回的数据包,则视所述客户端与所述服务器之间的流媒体图像传输断开。
所述数据包中包含着固定信息,固定信息没有特别的规定,数据包一般都是很小的包,或者只包含包头的一个空包。客户端每隔一段时间发送一个固定信息给流媒体服务器,流媒体服务器收到后回复一个固定信息,如果流媒体服务器在阈值时间内,客户端发送的数据包与流媒体服务器回复的数据包可以相同,也可以不同。如3分钟内没有收到客户端发送的信息,则视客户端与该流媒体服务器之间的流媒体图像传输断开。
当心跳机制由流媒体服务器发起时,所述服务器定时向所述客户端发送一数据包,所述客户端针对所述数据包返回一数据包,若所述服务器在阈值时间内收到所述返回的数据包,则视所述客户端与所述服务器之间的流媒体图像传输正在进行;若所述服务器在阈值时间内未收到所述返回的数据包,则视所述客户端与所述服务器之间的流媒体图像传输断开。
心跳机制由流媒体服务器发起的原理与由客户端发起的原理类似,优选地,由客户端发起心跳机制。
参照图4,示出了本申请流媒体处理***的实施例示意图。
该流媒体处理***400包括:
启动装置401,用于在服务器端启动生成流媒体图像的进程,保持所述进程处于运行状态;
流媒体图像获取装置402,用于实时检测客户端获取流媒体图像的请求,当收到所述请求时,从所述处于运行状态的进程中获取所述流媒体图像,并返回至所述客户端;
操作指令处理装置403,用于接收所述客户端发出的操作指令,并根据所述操作指令生成相应的流媒体图像。
优选地,所述启动装置401进一步包括检测模块404,用于检测所述客户端与所述服务器之间的流媒体图像传输状况;以及重启模块405,用于当检测出所述客户端与所述服务器之间的流媒体图像传输断开时,所述服务器重新启动所述生成流媒体图像的程序。
优选地,所述流媒体图像获取装置402进一步包括流媒体图像返回模块406,用于从所述处于运行状态的进程中抓取、压缩所述流媒体图像,并将所述流媒体图像返回至所述客户端;以及流媒体图像显示模块407,用于在所述客户端解压缩并显示所述流媒体图像。
对于***实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明可用于众多通用或专用的计算***环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器***、基于微处理器的***、网络PC、小型计算机、大型计算机、包括以上任何***或设备的分布式计算环境等等。
以上对本申请所提供的一种流媒体处理方法及***进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。