视频处理方法、装置、电子设备及计算机可读介质与流程

文档序号:16547333发布日期:2019-01-08 20:55阅读:184来源:国知局
视频处理方法、装置、电子设备及计算机可读介质与流程
本申请涉及视频处理
技术领域
,更具体地,涉及一种视频处理方法、装置、电子设备及计算机可读介质。
背景技术
:随着电子技术和信息技术的发展,越来越多的设备能够播放视频。设备在视频播放的过程中,需要对视频执行解码、渲染以及合成等操作,再在显示屏上显示,但是,现有的视频播放技术中,所播放的视频的画质效果已经无法满足用户的需求,导致用户体验较差。技术实现要素:本申请提出了一种视频处理方法、装置、电子设备及计算机可读介质,以改善上述缺陷。第一方面,本申请实施例提供了一种视频处理方法,应用于电子设备,所述电子设备还包括屏幕,所述方法包括:拦截客户端发送至所述屏幕对应的帧缓冲区的待渲染的多帧图像数据,所述待渲染的多帧图像数据与所述视频文件对应;将所述多帧图像数据存储至离屏渲染缓冲区;根据预设视频增强算法对所述离屏渲染缓冲区内的多帧图像数据进行优化;将优化后的多帧图像数据发送至所述屏幕对应的帧缓冲区;由所述帧缓冲区内读取优化后的多帧图像数据,并在所述屏幕上显示。第二方面,本申请实施例还提供了一种视频处理装置,应用于电子设备,所述电子设备还包括屏幕。所述视频处理装置包括:获取单元、第一存储单元、优化单元、第二存储单元和显示单元。获取单元,用于拦截客户端发送至所述屏幕对应的帧缓冲区的待渲染的多帧图像数据,所述待渲染的多帧图像数据与所述视频文件对应。第一存储单元,用于将所述多帧图像数据存储至离屏渲染缓冲区。优化单元,用于根据预设视频增强算法对所述离屏渲染缓冲区内的多帧图像数据进行优化。第二存储单元,用于将优化后的多帧图像数据发送至所述屏幕对应的帧缓冲区。显示单元,用于由所述帧缓冲区内读取优化后的多帧图像数据,并在所述屏幕上显示。第三方面,本申请实施例还提供了一种电子设备,包括:处理器、存储器、屏幕和一个或多个客户端。其中所述一个或多个客户端被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个程序配置用于执行上述方法。第四方面,本申请实施例还提供了一种计算机可读取存储介质,计算机可读取存储介质中存储有程序代码,所述程序代码可被处理器调用执行上述方法。相对于现有技术,本申请提供的方案,在客户端获取到视频文件对应的待渲染的多帧图像数据,未直接将多帧图像数据存储至帧缓冲区进行渲染等处理之后再进行渲染,而是,将多帧图像数据发送至离屏渲染缓冲区,在离屏渲染缓冲区内对多帧图像数据优化,再将优化后的多帧图像数据发送至帧缓冲区,再从帧缓冲区内读取优化后的多帧图像数据,并在所述屏幕上显示。因此,能够通过在另外一个缓冲区内对视频文件优化,能够提高视频文件播放时的画质,提高用户体验度。附图说明为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1示出了本申请一实施例提供的视频播放架构的框图;图2示出了本申请实施例提供的图像渲染架构的框图;图3示出了本申请一实施例提供的视频处理方法的方法流程图;图4示出了本申请实施例提供的客户端的视频列表界面的示意图;图5示出了图3对应的方法中的s302至s305的具体方法流程图;图6示出了本申请另一实施例提供的视频处理方法的方法流程图;图7示出了本申请又一实施例提供的视频处理方法的方法流程图;图8示出了本申请另一实施例提供的视频播放架构的框图;图9示出了本申请实施例提供的视频处理装置的模块框图;图10示出了本申请实施例提供的电子设备的结构框图;图11示出了本申请实施例的用于保存或者携带实现根据本申请实施例的视频处理方法的程序代码的存储单元。具体实施方式为了使本
技术领域
的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。请参阅图1,示出了视频播放架构的框图。具体地,操作系统在获取到待播放的数据的时候,接下来的工作就是解析音视频数据了。一般的视频文件都有视频流和音频流两部分组成,不同的视频格式音视频的封装格式肯定不一样。将音频流和视频流合成文件的过程称为muxer,反之从媒体文件中分离音频流和视频流的过程称为demuxer.播放视频文件就需要从文件流中分离出音频流和视频流,分别对其进行解码,解码后的视频帧可以直接渲染,音频帧可以送到音频输出设备的缓冲区进行播放,当然,视频渲染和音频播放的时间戳一定要控制同步。具体地,视频解码可以包括硬解码和软解码,硬件解码是将原来全部交由中央处理器(centralprocessingunit,cpu)来处理的视频数据的一部分交由图像处理器(graphicsprocessingunit,gpu)来做,而gpu的并行运算能力要远远高于cpu,这样可以大大的降低对cpu的负载,cpu的占用率较低了之后就可以同时运行一些其他的程序了,当然,对于较好的处理器来说,比如i52320,或者amd任何一款四核心处理器来说,硬解和软件的区别只是个人偏好问题了吧。具体地,如图1所示,mediaframework通过与客户端的api接口获取客户端待播放的视频文件,并交由videodecode,其中,mediaframework为android系统中多媒体框架,mediaplayer、mediaplayerservice和stagefrightplayer三个部分构成了android多媒体的基本框架。多媒体框架部分采用了c/s的结构,mediaplayer作为c/s结构的client端,mediaplayerservice和stagefrightplayer作为c/s结构server端,承担着播放多媒体文件的责任,通过stagefrightplayer,server端完成client端的请求并作出响应。videodecode是一款集成了最常用的音频和视频解码与播放的超级解码器,用于将视频数据解码。软解码,即通过软件让cpu来对视频进行解码处理,解码之后再调用gpu对视频渲染合并之后在屏幕上显示。而硬解码,指不借助于cpu,而通过专用的子卡设备来独立完成视频解码任务。不论是硬解码还是软解码,在将视频数据解码之后,会将解码后的视频数据发送至surfaceflinger,由surfaceflinger将解码后的视频数据渲染和合成之后,在显示屏上显示。其中,surfaceflinger是一个独立的service,它接收所有window的surface作为输入,根据zorder、透明度、大小、位置等参数,计算出每个surface在最终合成图像中的位置,然后交由hwcomposer或opengl生成最终的显示buffer,然后显示到特定的显示设备上。如图1所示,软解码中,cpu将视频数据解码之后交给surfaceflinger渲染和合成,而硬解码由gpu解码之后,交由surfaceflinger渲染和合成。而surfaceflinger会调用gpu实现图像的渲染和合成,并在显示屏上显示。具体地,图像渲染的过程如图2所示,cpu获取客户端发送的待播放的视频文件,解码之后获取解码之后的视频数据,将视频数据发送至gpu,gpu渲染完成后将渲染结果放入帧缓冲区(如图2中的framebuffer),随后视频控制器会按照hsync信号逐行读取帧缓冲区的数据,经过数模转换传递给显示器显示。但是,现有的视频播放,所播放的视频画质效果不佳,发明人研究其不佳的原因,是因为缺少对视频数据的增强优化。因此,为了解决该技术问题,本申请实施例提供了一种视频处理方法,该方法应用于电子设备,用于提高视频播放时的画质效果,具体地,请参阅图3所示的视频处理方法,该方法包括:s301至s305。s301:拦截客户端发送至所述屏幕对应的帧缓冲区的待渲染的多帧图像数据,所述待渲染的多帧图像数据与所述视频文件对应。具体地,当电子设备的客户端播放视频的时候,电子设备能够获取欲播放的视频文件,然后再对视频文件解码,具体地,可以采用上述的软解码或者硬解码对视频文件解码,在解码之后就能够获取视频文件对应的待渲染的多帧图像数据,之后需要将多帧图像数据渲染之后才能够在显示屏上显示。具体地,客户端获取到待播放的视频文件之后,客户端调用中央处理器或者图像处理器对待播放视频文件解码,以获取待播放的视频文件对应的待渲染的图像数据。作为一种实施方式,客户端采用软解码的方式,对视频文件界面,从而获取该视频文件对应的待渲染的图像数据,具体地,客户端将待播放的视频文件发送至中央处理器,指示中央处理器对视频文件解码并将解码后的结果返回给客户端。作为一种实施方式,中央处理器获取客户端发送的视频播放请求,该视频播放请求包括待播放的视频文件,具体地,可以是视频播放请求包括待播放的视频文件的身份信息,该身份信息可以是视频文件的名称,基于该视频文件的身份信息能够由存储该视频文件的存储空间内查找到该视频文件。具体地,可以对客户端的界面上的不同的视频文件对应的播放按钮的触控状态,获取视频播放请求,具体地,如图4所示,客户端的视频列表界面内显示有多个视频对应的显示内容,如图1中所示,多个视频对应的显示内容包括每个视频对应的缩略图,该缩略图可以作为一个触摸按键使用,用户点击该缩略图,客户端能够检测到用户所选点击的缩略图,也就能够确定欲播放的视频文件。客户端响应用户在视频列表内选中的视频,进入视频的播放界面,点击该播放界面的播放按钮,客户端通过对用户触控操作的监听,能够检测到用户当前所点击的视频文件,然后,客户端将视频文件发送至cpu,由cpu选择硬解码或者软解码对该视频文件进行解码。于本申请实施例中,中央处理器获取待播放的视频文件,并根据软解码算法对所述视频文件处理,以获取到所述视频文件对应的多帧图像数据,然后将解码之后的多帧图像数据返回至客户端。客户端获取到待渲染的多帧图像数据之后,需要将待渲染的多帧图像数据发送至帧缓冲区,以便在帧缓冲区完成图像的渲染之后下屏幕上显示,其中,帧缓冲区对应图像处理器的显存内的存储空间,并且,帧缓冲区与屏幕对应。具体地,可以是电子设备的操作系统来拦截客户端发送至所述屏幕对应的帧缓冲区的待渲染的多帧图像数据,所述待渲染的多帧图像数据与所述视频文件对应,具体地,可以是电子设备的操作系统内设置一个数据拦截模块,该模块可以是操作系统内的一个应用程序,例如,可以是一个service。则该应用程序可以调用中央处理器执行拦截客户端发送至所述屏幕对应的帧缓冲区的待渲染的多帧图像数据,所述待渲染的多帧图像数据与所述视频文件对应的操作,也可以是调用图像处理器执行拦截客户端发送至所述屏幕对应的帧缓冲区的待渲染的多帧图像数据,所述待渲染的多帧图像数据与所述视频文件对应的操作。在一些实施例中,该数据拦截模块可以是在电子设备安装客户端的时候,自动与客户端绑定,即作为客户端的第三方插件安装在客户端的架构内。s302:将所述多帧图像数据存储至离屏渲染缓冲区。具体地,可以是数据拦截模块将所述多帧图像数据存储至离屏渲染缓冲区,即数据拦截模块在拦截客户端发送至所述屏幕对应的帧缓冲区的待渲染的多帧图像数据,所述待渲染的多帧图像数据与所述视频文件对应之后,将所述多帧图像数据存储至离屏渲染缓冲区。作为一种实施方式,预先在gpu内设置一个离屏渲染缓冲区,具体地,gpu会调用渲染客户端模块对待渲染的多帧图像数据渲染合成之后发送至显示屏上显示,具体地,该渲染客户端模块可以是opengl模块。opengl渲染管线的最终位置是在帧缓冲区中。帧缓冲区是一系列二维的像素存储数组,包括了颜色缓冲区、深度缓冲区、模板缓冲区以及累积缓冲区。默认情况下opengl使用的是窗口系统提供的帧缓冲区。opengl的gl_arb_framebuffer_object这个扩展提供了一种方式来创建额外的帧缓冲区对象(framebufferobject,fbo)。使用帧缓冲区对象,opengl可以将原先绘制到窗口提供的帧缓冲区重定向到fbo之中。则通过fbo在帧缓冲区之外再设置一个缓冲区,即离屏渲染缓冲区。然后,将所获取的多帧图像数据存储至离屏渲染缓冲区。具体地,离屏渲染缓冲区可以是对应图像处理器的一个存储空间,即离屏渲染缓冲区本身没有用于存储图像的空间,而是与图像处理器内的一个存储空间映射之后,图像实际存储在离屏渲染缓冲区对应的图像处理器内的一个存储空间内。将多帧图像数据与离屏渲染缓冲区绑定的方式,就能够将多帧图像数据存储至离屏渲染缓冲区,即在离屏渲染缓冲区能够查找到多帧图像数据。s303:根据预设视频增强算法对所述离屏渲染缓冲区内的多帧图像数据进行优化。作为一种实施方式,对多帧图像数据的优化可以包括在图像数据内增加新的特效,例如,将特效图层加在图像数据,以实现特效的效果。作为另一种实施方式,根据预设视频增强算法对所述离屏渲染缓冲区内的多帧图像数据进行优化,包括:对所述离屏渲染缓冲区内的多帧图像数据的图像参数优化,其中,所述图像参数优化包括曝光度增强、去噪、边缘锐化、对比度增加或饱和度增加的至少一种。具体地,由于经过解码之后的图像数据为rgba格式的数据,为了对图像数据优化,需要将rgba格式的数据转换为hsv格式,具体地,获取图像数据的直方图,对直方图统计从而获取将rgba格式的数据转换为hsv格式的参数,在根据该参数将rgba格式的数据转换为hsv格式。其中,曝光度增强,用于提高图像的亮度,则可以通过图像的直方图,将亮度值交底的区域增加亮度值,另外,也可以是通过非线性叠加,增加图像亮度,具体地,i表示要处理的较暗图像,t表示处理后的比较亮的图像,则曝光度增强的方式为t(x)=i(x)+(1-i(x))*i(x)。其中,t和i都是[0,1]取值的图像。如果一次效果不好算法可以多次迭代。其中,对图像数据去噪用于去除图像的噪声,具体地,图像在生成和传输过程中常常因受到各种噪声的干扰和影响而是图像降质,这对后续图像的处理和图像视觉效应将产生不利影响。噪声种类很多,比如:电噪声,机械噪声,信道噪声和其他噪声。因此,为了抑制噪声,改善图像质量,便于更高层次的处理,必须对图像进行去噪预处理。从噪声的概率分布情况来看,可分为高斯噪声、瑞利噪声、伽马噪声、指数噪声和均匀噪声。具体地,可以通过高斯滤波器对图像去噪,其中,高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数都是相同的为1;而高斯滤波器的模板系数,则随着距离模板中心的增大而系数减小。所以,高斯滤波器相比于均值滤波器对图像模糊程度较小。例如,产生一个5×5的高斯滤波窗口,以模板的中心位置为坐标原点进行取样。将模板各个位置的坐标带入高斯函数,得到的值就是模板的系数。再将该高斯滤波窗口与图像卷积就能够对图像去噪。其中,边缘锐化用于使模糊的图像变得更加清晰起来。图像锐化一般有两种方法:一种是微分法,另外一种是高通滤波法。其中,对比度增加用于增强图像的画质,使得图像内的颜色更加鲜明,具体地,对比度拉伸是图像增强的一种方法,也属于灰度变换操作。通过灰度变换,将灰度值拉伸到整个0-255的区间,那么其对比度显然是大幅增强的。可以用如下的公式来将某个像素的灰度值映射到更大的灰度空间:i(x,y)=[(i(x,y)-imin)/(imax-imin)](max-min)+min;其中imin,imax是原始图像的最小灰度值和最大灰度值,min和max是要拉伸到的灰度空间的灰度最小值和最大值。通过视频增强算法能够增加图像的画质,另外,还可以基于视频文件选择对应的视频增强算法,具体地,根据预设视频增强算法对所述离屏渲染缓冲区内的多帧图像数据进行优化之前,所述方法还包括:获取所述视频文件对应的视频类型;基于所述视频类型确定视频增强算法。具体地,获取视频文件内预设数量的图像,作为图像样本,分析图像样本内每个图像的所有对象,由此,就能够确定图像样本中各个对象所占的比例,具体地,对象可以包括动物、人、食物等,基于所确定的各个对象的占比能够确定图像的类别,从而确定视频文件的类别,其中,图像的类别包括人物类、动物类、食物类、风景类等。再根据视频类型与视频增强算法的对应关系,确定视频文件对应的视频增强算法,具体地,该视频增强算法可以包括曝光度增强、去噪、边缘锐化、对比度增加或饱和度增加的至少一种,则不同类型的视频对应的曝光度增强、去噪、边缘锐化、对比度增加或饱和度增加的不同,例如,如表1所示:表1根据表1所示的对应关系,就能够确定视频文件对应的视频增强算法。s304:将优化后的多帧图像数据发送至所述屏幕对应的帧缓冲区。其中,帧缓冲区对应于屏幕,用于存放需要在屏幕上显示的数据,例如图2所示的framebuffer,framebuffer是出现在操作系统内核当中的一种驱动程序接口。以安卓系统为例,linux是工作在保护模式下,所以用户态进程是无法像dos系统那样,使用显卡bios里提供的中断调用来实现直接将数据写入并在屏幕上显示,linux抽象出framebuffer这个设备来供用户进程实现直接将数据写入并在屏幕上显示。framebuffer机制模仿显卡的功能,可以通过framebuffer的读写直接对显存进行操作。具体地,可以将framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写入的数据可以在屏幕上显示。则帧缓冲区可以看作是一个存放数据的空间,cpu或者gpu将要显示的数据放入该帧缓冲区,而framebuffer本身不具备任何运算数据的能力,由视频控制器按照屏幕刷新频率读取framebuffer内的数据在屏幕上显示。则将优化后的多帧图像数据发送至所述帧缓冲区,可以是该数据拦截模块执行,即该数据拦截模块在拦截到客户端发送至所述屏幕对应的帧缓冲区的视频文件对应的待渲染的多帧图像数据之后,将所述待渲染的多帧图像数据发送至离屏渲染缓冲区,然后调用图像处理器执行根据预设视频增强算法对所述离屏渲染缓冲区内的多帧图像数据进行优化的操作,然后,图像处理器将结果返回给数据拦截模块,数据拦截模块再将优化后的多帧图像数据发送至所述帧缓冲区。具体地,所述将优化后的多帧图像数据发送至所述帧缓冲区,包括:将优化后的多帧图像数据发送至所述客户端;所述客户端将所述优化后的多帧图像数据存储至所述帧缓冲区。也就是说,在数据拦截模块获取到优化后的多帧图像数据之后,将优化后的多帧图像数据发送至客户端,客户端则继续执行将所述优化后的多帧图像数据存储至所述帧缓冲区的操作,由此,可以在客户端执行将待渲染的多帧图像数据发送至帧缓冲区的操作中,通过将待渲染的多帧图像数据的截获以及优化之后,将客户端要发送给帧缓冲区的待渲染的多帧图像数据替换为优化后的多帧图像数据。s305:由所述帧缓冲区内读取优化后的多帧图像数据,并在所述屏幕上显示。具体地,将优化后的多帧图像数据存入帧缓冲区内之后,图像处理器检测到帧缓冲区内写入数据之后,就由所述帧缓冲区内读取优化后的多帧图像数据,并在所述屏幕上显示。作为一种实施方式,图像处理器会根据屏幕的刷新频率由所述帧缓冲区内逐帧读取优化后的多帧图像数据,并经渲染合成处理后在所述屏幕上显示。下面基于安卓系统的fbo机制描述本视频处理方法的具体实施方式,如图5所示,具体地,该方法为图3对应的方法中的s302至s305的进一步描述,则该方法包括:s501至s516。s501:新建一个临时纹理并绑定到fbo。其中,fbo可以看作为上述的离屏渲染缓冲区。在gpu的显存中顶点缓存、索引缓存、纹理缓存、模板缓存,而纹理缓存即为用于存放纹理数据的存储空间,而由于fbo没有真是的存储空间,则新建一个临时纹理,并将临时纹理绑定到fbo,则就可以实现临时纹理与fbo之间的映射关系,由于临时纹理作为一个变量,在显存内具有一定的存储空间,因此,fbo的实际存储空间就是临时纹理的存储空间。由此,就能够为fbo分配一定的显存。s502:将渲染对象绑定到fbo。其中,渲染对象就是视频文件对应的待渲染的多帧图像数据,具体地,可以通过渲染对象将多帧图像数据存储到fbo内,其中,渲染对象可以作为一个变量,将多帧图像数据赋给渲染对象,再将渲染对象于fbo绑定,就可以实现将视频文件对应的待渲染的多帧图像数据存储至离屏渲染缓冲区。例如,在fbo内设置一个句柄,该句柄指向多帧图像数据,则该句柄就可以是渲染对象。s503:清空fbo。在渲染之前,需要清空fbo内的旧数据,包括颜色缓存、深度缓存和模板缓存。需要说明的是,由于视频文件对应的待渲染的多帧图像数据是存储在渲染对象对应的存储空间内的,而多帧图像数据是通过映射的方式写入fbo,而非真实存储在fbo内,因此,清空fbo不会将多帧图像数据删除。s504:绑定hqv算法至shaderprogram。shader为着色器的代码(包括顶点着色器、片段着色器等)。着色器程序(shaderprogram):负责执行shader的引擎(程序)。用于执行前面shader代码指定的操作。其中,hqv算法即为上述的视频增强算法,将视频增强算法与shaderprogram绑定,并在程序内定义如何执行该视频增强算法,即具体的算法的执行过程可以在shaderprogram内写入对应的程序,以便gpu能够执行该视频增强算法。s505:判断是否首次执行优化。具体地,针对该视频文件的每次优化都会被记录,例如,设置一个次数变量,每次优化的时候,为次数变量加1。判断是否是首次执行该优化操作,即是否首次使用视频增强算法对视频文件的图像数据优化,如果是,则执行s506,若否,则执行s507。s506:绑定初始纹理。s507:绑定临时纹理。除了设置了临时纹理,还设置了初始纹理,具体地,初始纹理作为将数据输入临时纹理的变量,而临时纹理的内容直接映射到fbo内。而初始纹理和临时纹理均作为数据存储的变量,具体地,将视频增强算法对应的特征数据写入数据纹理对象,其中,数据纹理对象即为该临时纹理。由于,在首次执行优化的时候,临时纹理内未存储有任何数据,因为在初始化的时候,临时纹理被清空。则在判定为首次执行优化的时候,将视频增强算法赋值给初始纹理,再由初始纹理将视频增强算法对应的特征数据传递给临时纹理,具体地,将初始纹理赋予临时纹理,其中,视频增强算法对应的特征数据即为视频增强算法的参数,例如,去噪中的中值滤波的各个参数值。如果非首次优化,则临时纹理内存储有任何数据,则不需要从初始纹理内获取视频增强算法对应的特征数据,可以直接从临时纹理获取之前所存储的视频增强算法对应的特征数据。s508:卷积渲染。将视频增强算法对应的特征数据与待渲染的多帧图像数据卷积,以对待渲染的多帧图像数据优化,具体地,通过将所述渲染对象和数据纹理对象渲染,对所述离屏渲染缓冲区内的多帧图像数据进行优化。即执行渲染到纹理(rendertotexture,rtt)的操作。s509:是否需要迭代下一次优化。如果需要下一次迭代,则将次数变量加1,并返回执行s505,如果不需要迭代下一次优化,则继续执行s509。s510:将渲染对象绑定到framebuffer。则此时的渲染对象已经被视频增强算法优化,即渲染对象为优化后的多帧图像数据。则将优化后的多帧图像数据发送至framebuffer以存储。s511:清空framebuffer。s512:绑定绘制纹理至shaderprogram。其中,绘制纹理为用于绘制图像的纹理,其存储有效果参数,具体地,用于增加在图像数据的效果,例如,阴影等。s513:纹理渲染。同上,执行渲染到纹理的操作,只是此步骤中的渲染对象为优化后的多帧图像数据,而纹理对象为绘制纹理。s514:是否需要绘制下一帧图像。在绘制一帧图像数据之后,如果,还需要绘制下一帧在返回执行s502,否则执行s515。s515:输出结果。s516:回收数据。将渲染后的图像数据回收之后,控制屏幕将图像数据显示。需要说明的是,上述步骤中未详细描述的部分,可参考前述实施例,在此不再赘述。另外,考虑到采用视频增强算法对图像数据优化的时候,会导致视频播放的过程出现延时甚至卡顿的现象,因此,针对一些播放视频的客户端可以降低屏幕刷新率从而降低延时,具体地,请参阅图6,示出了本申请实施例提供的一种视频处理方法,该方法包括:s601至s607。s601:获取客户端发送的视频播放请求,所述视频播放请求包括所述视频文件。s602:若所述客户端满足预设标准,则降低所述屏幕的刷新频率。在获取到视频播放请求之后,确定请求播放视频的客户端,从而获取该客户端的标识,具体地,客户端为安装在电子设备内的客户端,具有视频播放的功能。客户端在系统桌面设有图标,用户点击该客户端的图标,能够将该客户端打开,例如,从用户点击的应用的包名来确认,视频应用的包名可以系统后台从代码中获取,包名格式为:com.android.video。判断客户端是否满足预设标准,如果满足,则降低屏幕的刷新频率,如果不满足,则不执行降低屏幕的刷新频率的操作。具体地,预设标准可以是用户根据实际使用需求而设定的标准,例如,可以是客户端的名称需要符合某个类别,也可以是客户端的安装时间需要位于预设时间段内,还可以是,客户端的开发商属于预设名单内,根据不同的应用场景,可以设置不同的预设标准。如果客户端满足预设标准,则表示该客户端播放的视频清晰度比较低或者视频文件大小比较低,不需要大概的屏幕刷新频率,则可以将屏幕的刷新频率降低。作为一种实施方式,满足预设标准的客户端所对应的屏幕的刷新频率为预设频率,则电子设备获取当前的屏幕的刷新频率,如果当前的屏幕的刷新频率大于预设频率,则将当前的屏幕的刷新频率降低至预设频率,如果当前的屏幕的刷新频率小于或等于预设频率,则保持当前的屏幕的刷新频率不变。具体地,如果当前的屏幕的刷新频率等于预设频率,则保持当前的屏幕的刷新频率不变,如果当前的屏幕的刷新频率小于预设频率,则将当前的屏幕的刷新频率提高至预设频率。则如果客户端不满足预设标准,则将判断当前的屏幕的刷新频率与预设频率之间的大小关系,如果当前的屏幕的刷新频率小于默认频率,则将当前的屏幕的刷新频率提高至默认频率,其中,默认频率大于预设频率。具体地,若所述客户端满足预设标准,则降低所述屏幕的刷新频率的具体实施方式为:获取所述客户端的身份标识;判断所述客户端的身份标识是否满足预设标识,如果满足,则降低所述屏幕的刷新频率。其中,客户端的身份信息可以是客户端的名称或者包名,在电子设备内预先存储预设标识,其中,预设标识中包括多个预设客户端的身份标识,该预设客户端所播放的视频文件较小或者清晰度较低,不需要太高的屏幕的刷新频率,从而通过降低刷新频率的方式可以减少电子设备的功耗。作为另一种实施方式,若所述客户端满足预设标准,则降低所述屏幕的刷新频率的具体实施方式为:获取客户端的类别,判断所述客户端的类别是否为预设类别,如果是,则降低所述屏幕的刷新频率。其中,预设类别可以是用户根据需求而设定的类别,例如,可以是自媒体视频类客户端。其中,自媒体视频类客户端相比用于播放电影的客户端或者游戏类客户端,所播放的视频的文件较小或者清晰度较低,则需要对客户端是否为视频类客户端判定。具体地,在获取到客户端的标识之后,根据该标识确定客户端的类型,其中,客户端的标识可以是客户端的包名、名称等。例如,电子设备内预先存储有客户端的标识和客户端的类别的对应关系,如下表2所示:表2客户端的标识客户端的类别apk1游戏apk2视频apk3音频由此,根据上述表2所示的客户端的标识和和客户端的类别的对应关系,就能够确定视频文件所对应的客户端的类别。作为一种实施方式,上述客户端的类别,可以是客户端的开发商在开放的时候为客户端设定的类别,也可以是客户端在安装在电子设备上之后,用户为客户端设定的类别,例如,用户在电子设备上安装某个客户端,在安装完成并进入该客户端之后,会显示一个对话框,指示用户为客户端设定类别。则客户端具体属于哪个类别,可以由用户根据需求而设定,例如,用户可以将某社交软件设置为音频类,或者设置为视频类,或者设置为社交类。另外,电子设备内安装有客户端安装软件。则在该客户端安装软件内设置有客户端列表,在该列表内用户能够下载客户端并且能够更新和打开客户端,而且该客户端安装软件可以将不同的客户端按照类别显示,比如,音频类、视频类或者游戏类等。因此,用户在使用该客户端安装软件安装客户端的时候,就已经能够知道该客户端的类别。再者,如果有些客户端能够播放视频,也能够播放音频,则如果该客户端支持视频播放的功能,就将该客户端的类型设置为视频类型,如果不支持视频播放的功能,而仅仅支持音频播放的功能,则就将该客户端的类型设置为音频类型。而具体地,客户端是否支持视频播放功能,可以通过该客户端的功能描述信息中,所包含的功能描述,例如,所支持的播放格式来判断是否支持视频格式的播放,也可以通过检测该客户端的程序模块内是否播放视频播放模块,例如,某个视频播放的编解码算法等,从而能够确定该客户端是否支持视频播放功能。作为另一种实施方式,如果有些客户端能够播放视频,也能够播放音频,例如一些视频播放软件,可以播放纯音频文件,也可以播放视频,则该客户端的类别可以根据客户端的使用记录而确定,即根据该客户端的一定时间段内的使用记录,确定用户使用该客户端是倾向于播放视频还是更倾向于播放音频。具体地,获取该客户端在预设时间段内的所有用户的操作行为数据,其中,所有用户是指安装过该客户端的所有用户,则该操作行为数据可以由客户端对应的服务器内获取,也就是说,用户在使用该客户端的时候会使用用户对应的用户账号登录该客户端,而用户账号对应的操作行为数据会发送至客户端对应的服务器,则服务器将所获取的操作行为数据与用户账号对应存储。在一些实施例中,电子设备发送针对客户端的操作行为查询请求发送至该客户端对应的服务器,服务器将一定预设时间段内的所有用户的操作行为数据发送至电子设备。该操作行为数据包括所播放的音频文件的名称和时间、以及所播放的视频文件的名称和时间,通过分析该操作行为数据就能够确定在一定预设时间段内该客户端播放的音频文件的数量以及总的时间,也可以得到该客户端播放的视频文件的数量以及总的时间,则根据音频和视频文件的播放总时长在该预定时间段内的占比,确定客户端的类别,具体地,获取音频和视频文件的播放总时长在该预定时间段内的占比,为方便描述,将音频文件的播放总时长在该预定时间段内的占比记为音频播放占比,将视频文件的播放总时长在该预定时间段内的占比记为视频播放占比,如果视频播放占比大于音频播放占比,则将客户端的类别设定为视频类型,如果音频播放占比大于视频播放占比,则将客户端的类别设定为音频类型。例如,预设时间段为30天,即720小时,而音频文件的播放总时长为200小时,则音频播放占比为27.8%,视频文件的播放总时长为330小时,则视频播放占比为45.8%,则视频播放占比大于音频播放占比,则将客户端的类别设定为视频类型。在另一些实施例中,电子设备发送针对客户端的类别查询请求至服务器,服务器根据预先获取的客户端所对应的操作行为数据确定上述的音频播放占比和视频播放占比,并根据音频播放占比和视频播放占比之间的大小关系而确定客户端的类别,具体地,可参考前述描述。由此,通过客户端的播放数据的记录,就能够确定客户端大部分时间所播放的视频的清晰度和类型,由此就可以确定该客户端是否为自媒体视频类客户端,如果是,就判定所述客户端的身份标识满足预设标识。s603:拦截客户端发送至所述屏幕对应的帧缓冲区的待渲染的多帧图像数据,所述待渲染的多帧图像数据与所述视频文件对应。s604:将所述多帧图像数据存储至离屏渲染缓冲区。s605:根据预设视频增强算法对所述离屏渲染缓冲区内的多帧图像数据进行优化。s606:将优化后的多帧图像数据发送至所述屏幕对应的帧缓冲区。s607:基于所述屏幕的刷新频率由所述帧缓冲区内逐帧读取优化后的多帧图像数据,并经渲染合成处理后在所述屏幕上显示。则视频播放的时候,gpu内的视频控制器按照屏幕的刷新频率由所述帧缓冲区内逐帧读取优化后的多帧图像数据,并经渲染合成处理后在所述屏幕上显示,其中,屏幕的刷新频率可以看作是一个时钟信号,每当一个时钟信号到来的时候,就由帧缓冲区内逐帧读取优化后的多帧图像数据,并经渲染合成处理后在所述屏幕上显示。因此,采用离屏渲染的方式,而非在屏渲染的方式,能够避免如果通过在屏渲染在帧缓冲区对图像数据优化,会导致可能数据还未优化的时候就已经被视频控制器按照屏幕的刷新频率由所述帧缓冲区内取出而在屏幕上显示。需要说明的是,上述的s601和s602的步骤不限定在s603之前执行,也可以是在s607之后执行,即可以先按照当前的屏幕的刷新频率对视频播放,而后再对当前的屏幕的刷新频率调整。另外,上述步骤中未详细描述的部分,可参考前述实施例,在此不再赘述。请参阅图7,示出了本申请实施例提供的一种视频处理方法,该方法包括:s701至s706。s701:拦截客户端发送至所述屏幕对应的帧缓冲区的待渲染的多帧图像数据,所述待渲染的多帧图像数据与所述视频文件对应。s702:判断所述视频文件是否满足预设条件。其中,预设条件为用户根据实际使用而设定的条件,例如,可以是获取视频文件的类别,如果该视频文件的类别为预设类别,则判定该视频文件满足预设条件,具体地,视频文件的类别的确定方式可以参考前述实施例。另外,还可以是确定视频文件的实时性,因为,采用本申请的方法对视频文件做视频增强的优化处理,由于在帧缓冲区之外新设定一个缓冲区,能够避免视频未增强好就被显示在屏幕上,该过程对视频文件播放的实时性具有一定的要求,因此可以根据实时性确定是否要执行视频增强算法,具体地,确定所述视频文件对应的实时性级别,判断所述视频文件的实时性级别是否属于满足预设级别,如果满足,则执行s703,否则,结束本方法。具体地,若接收到视频文件的播放请求,则确定视频文件的实时性级别。作为一种实施方式,确定视频文件对应的客户端的标识,再根据该客户端的标识确定视频文件的实时性级别。具体地,确定发送该视频文件的播放请求的客户端的标识,在确定该客户端的标识所对应的客户端的类型,具体地,可以参考上述的实施例。然后,再根据该客户端的类型确定视频文件对应的实时性级别。具体地,电子设备内存储有客户端的类型所对应实时性级别,如下表3所示:表3根据上述的对应关系,就能够确定视频文件所对应的实时性级别。例如,视频文件对应的客户端的标识为apk4,则所对应的类别为社交,所对应的实时性级别为j1。其中,j1的级别最高,其次,j2、j3依次减小。然后,再判断所述视频文件的实时性级别是否属于满足预设级别。其中,预设级别为预先设定的需要视频增强算法对应的实时性级别,可以是用户根据需求而设定的。例如,预设级别为j2及以下。则如果视频文件对应的实时性级别为j3,则视频文件的实时性级别满足预设级别,也就是说,针对实时性要求比较高的视频文件,可以不执行视频增强算法,避免视频增强导致视频播放的延时,而影响用户体验。s703:将所述多帧图像数据存储至离屏渲染缓冲区。其中,具体的实施方式可以参考前述实施例。进一步地,还可以增加根据观看视频的用户来确定是否需要将所述多帧图像数据存储至离屏渲染缓冲区的操作。具体地,电子设备设置有摄像头,该摄像头与屏幕设置在电子设备的同一面,则获取摄像头采集的人物图像,判断所述人物图像是否满足预设人物标准,如果满足,则将所述多帧图像数据存储至离屏渲染缓冲区。在一些实施例中,判断所述人物图像是否满足预设人物标准的操作可以代替上述步骤s702,在另一些实施例中,判断所述人物图像是否满足预设人物标准的操作可以与上述步骤s702结合,例如,判断所述人物图像是否满足预设人物标准,如果满足预设人物标准,则判断所述视频文件是否满足预设条件,如果满足预设条件,则将所述多帧图像数据存储至离屏渲染缓冲区。或者,先判断所述视频文件是否满足预设条件,如果满足预设条件,则再判断所述人物图像是否满足预设人物标准,如果满足预设人物标准,则将所述多帧图像数据存储至离屏渲染缓冲区。其中,判断所述人物图像是否满足预设人物标准的具体实施方式可以是:在一些实施例中,可以提取人物图像内的人脸图像,确定所述人脸图像对应的身份信息,再判断身份信息与预设身份信息是否匹配,如果匹配,则判定人物图像满足预设人物标准。其中,预设身份信息为预先存储的身份信息,而身份信息为用于区分不同的用户的标识。具体地,对人脸图像分析以获取特征信息,其中,特征信息可以是五官或者脸型轮廓等,基于该特征信息确定身份信息。在另一些实施例中,还可以是基于所述人脸图像确定用户的年龄阶段,具体地,对所获取的人脸图像信息进行人脸识别,识别出当前用户的脸部特征,系统将人脸图像进行预处理,即在图像中准确标定出人脸的位置,检测出包括人脸的轮廓,肤色,纹理,质地,色彩特征,根据不同的模式特征如直方图特征、颜色特征、模板特征、结构特征及haar特征等把上述脸部特征中有用的信息挑出来,分析出当前用户的年龄阶段。例如,使用视觉特征、像素统计特征、人脸图像变换系数特征、人脸图像代数特征等,基于知识的表征方法或基于代数特征或统计学习的表征方法针对人脸的某些特征进行特征建模,并根据特征判断当前使用移动终端用户所属年龄类别。其中,年龄阶段可以包括儿童阶段、少年阶段、青年阶段、中年阶段和老年阶段等,也可以是从10岁开始,每10岁划分一个年龄段,还可以是,指划分两个年龄段,即老年阶段和非老年阶段。而每个年龄阶段对视频增强的要求可能不同,例如,老年阶段对视频的显示效果需要不高。在确定用户的年龄阶段之后,确定该年龄阶段是否属于预设阶段范围内,如果是,则执行将所述多帧图像数据存储至离屏渲染缓冲区以及后续的视频增强算法操作,如果不是,则结束本次方法。其中,预设阶段范围可以是青年阶段和中年阶段,即针对儿童阶段、少年阶段和老年阶段可以不需要对视频做增强处理。s704:根据预设视频增强算法对所述离屏渲染缓冲区内的多帧图像数据进行优化。s705:将优化后的多帧图像数据发送至所述屏幕对应的帧缓冲区。s706:由所述帧缓冲区内读取优化后的多帧图像数据,并在所述屏幕上显示。则如图8所示,在gpu内增加了hqv算法模块,该hqv算法模块为用户执行本视频处理方法的模块,与图2相比,软解码之后将待渲染的图像数据发送至surfaceflinger的时候,被hqv算法模块拦截并优化之后再发送给surfaceflinger做渲染以及后续在屏幕上的显示操作。另外,上述步骤中未详细描述的部分,可参考前述实施例,在此不再赘述。请参阅图9,其示出了本申请实施例提供的一种视频处理装置800的结构框图,该装置可以包括:获取单元901、第一存储单元902、优化单元903、第二存储单元904和显示单元905。获取单元901,用于拦截客户端发送至所述屏幕对应的帧缓冲区的待渲染的多帧图像数据,所述待渲染的多帧图像数据与所述视频文件对应。第一存储单元902,用于将所述多帧图像数据存储至离屏渲染缓冲区。优化单元903,用于根据预设视频增强算法对所述离屏渲染缓冲区内的多帧图像数据进行优化。第二存储单元904,用于将优化后的多帧图像数据发送至所述屏幕对应的帧缓冲区。显示单元905,用于由所述帧缓冲区内读取优化后的多帧图像数据,并在所述屏幕上显示。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,模块相互之间的耦合可以是电性,机械或其它形式的耦合。另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。请参考图10,其示出了本申请实施例提供的一种电子设备的结构框图。该电子设备100可以是智能手机、平板电脑、电子书等能够运行客户端的电子设备。本申请中的电子设备100可以包括一个或多个如下部件:处理器110、存储器120、屏幕140以及一个或多个客户端,其中一个或多个客户端可以被存储在存储器120中并被配置为由一个或多个处理器110执行,一个或多个程序配置用于执行如前述方法实施例所描述的方法。处理器110可以包括一个或者多个处理核。处理器110利用各种接口和线路连接整个电子设备100内的各个部分,通过运行或执行存储在存储器120内的指令、程序、代码集或指令集,以及调用存储在存储器120内的数据,执行电子设备100的各种功能和处理数据。可选地,处理器110可以采用数字信号处理(digitalsignalprocessing,dsp)、现场可编程门阵列(field-programmablegatearray,fpga)、可编程逻辑阵列(programmablelogicarray,pla)中的至少一种硬件形式来实现。具体地,处理器110可以包括中央处理器111(centralprocessingunit,cpu)、图像处理器112(graphicsprocessingunit,gpu)和调制解调器等中的一种或几种的组合。其中,cpu主要处理操作系统、用户界面和客户端等;gpu用于负责显示内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器110中,单独通过一块通信芯片进行实现。存储器120可以包括随机存储器(randomaccessmemory,ram),也可以包括只读存储器(read-onlymemory)。存储器120可用于存储指令、程序、代码、代码集或指令集。存储器120可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等。存储数据区还可以存储终端100在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。所述屏幕120用于显示由用户输入的信息、提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、数字、视频和其任意组合来构成,在一个实例中,触摸屏可设置于所述显示面板上从而与所述显示面板构成一个整体。请参考图11,其示出了本申请实施例提供的一种计算机可读存储介质的结构框图。该计算机可读介质1100中存储有程序代码,所述程序代码可被处理器调用执行上述方法实施例中所描述的方法。计算机可读存储介质1100可以是诸如闪存、eeprom(电可擦除可编程只读存储器)、eprom、硬盘或者rom之类的电子存储器。可选地,计算机可读存储介质1100包括非易失性计算机可读介质(non-transitorycomputer-readablestoragemedium)。计算机可读存储介质1100具有执行上述方法中的任何方法步骤的程序代码1111的存储空间。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。程序代码1111可以例如以适当形式进行压缩。最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1