视频播放方法、装置、电子设备及存储介质
技术领域
本发明涉及视频播放技术领域,尤其涉及一种视频播放方法、装置、电子设备及存储介质。
背景技术
现有的移动终端通常安装有摄像头,通过摄像头可拍摄到现实场景中的图像(如移动终端用户的图像)。移动终端用户可利用移动终端来播放和观看电影、电视剧等视频。为了增加娱乐性和用户对所观看视频的参与度,在移动终端播放视频的时候,通过摄像头拍摄的用户的图像可同时显示在当前正在播放的视频画面上,大体而言,是一方面从所述摄像头获取其所拍摄的用户图像的预览图像流,另一方面从视频解码器获取视频流,将所述预览图像流的图像帧和所述视频流的视频帧合成后显示在移动终端的屏幕上。
发明内容
在实现本发明的过程中,发明人发现现有的这种视频播放方法存在如下问题:在将从摄像头获取的预览图像流的图像帧和从视频解码器获取的视频流的视频帧进行合成时,是直接通过一次渲染完成的。然而,当移动终端用户在光线较暗的环境中用移动终端观看视频时,由于环境光线较暗,受环境光线的影响,从摄像头获取预览图像流可能会花费较长的时间,从而导致用户的图像在移动终端播放的视频画面上显示时会出现明显的延迟或卡顿现象。
有鉴于此,本发明实施例提供一种视频播放方法、装置、电子设备及存储介质,能够使从摄像头获取的图像在播放的视频画面上显示得更加流畅。
第一方面,本发明实施例提供一种视频播放方法,用于安装有摄像头和视频解码器的电子设备,所述方法包括:
通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧渲染至第一缓存;
从所述第一缓存复制图像帧,并将复制的所述图像帧交替写入第二缓存和第三缓存;
通过第二渲染线程从所述视频解码器获取视频流,从所述第二缓存和所述第三缓存交替读取所述图像帧,将所述图像帧与所述视频流的视频帧进行合成,合成后的视频流在所述电子设备的显示屏上显示。
结合第一方面,在第一方面的第一种实施方式中,所述从所述第一缓存复制图像帧,并将复制的所述图像帧交替写入第二缓存和第三缓存包括:
从所述第一缓存复制包括预定帧数的图像的第一图像帧集,并将所述第一图像帧集中的每帧图像写入第二缓存;
从所述第一缓存再次复制包括预定帧数的图像的第二图像帧集,并将所述第二图像帧集中的每帧图像写入第三缓存,其中,所述第二图像帧不同于所述第一图像帧。
结合第一方面的第一种实施方式,在第一方面的第二种实施方式中,所述通过第二渲染线程从所述第二缓存和所述第三缓存交替读取所述图像帧包括:
在所述第一图像帧集中的每帧图像写入第二缓存后,通过第二渲染线程从所述第二缓存读取所述第一图像帧集中的图像;
在所述第二图像帧集中的每帧图像写入第三缓存后,通过第二渲染线程从所述第三缓存读取所述第二图像帧集中的图像。
结合第一方面,在第一方面的第三种实施方式中,在通过第一渲染线程从所述摄像头获取预览图像流之前,所述方法还包括:
创建第一渲染线程和第二渲染线程。
结合第一方面,在第一方面的第四种实施方式中,在所述图像帧与所述视频流合成之前,所述方法还包括:
对所述图像帧进行特效处理,得到特效处理后的图像帧;
其中,所述将所述图像帧与所述视频流的视频帧进行合成包括:将特效处理后的图像帧与所述视频流进行合成。
第二方面,本发明实施例提供一种视频播放方法,用于安装有摄像头和视频解码器的电子设备,所述方法包括:
通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧交替渲染至第一缓存和第二缓存;
通过第二渲染线程从所述视频解码器获取视频流,从所述第一缓存和第二缓存交替读取所述图像帧,将所述图像帧与所述视频流的视频帧进行合成,合成后的视频流在所述电子设备的显示屏上显示。
结合第二方面,在第二方面的第一种实施方式中,所述通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧交替渲染至第一缓存和第二缓存包括:
通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的包括预定帧数的图像的第一图像帧集中的每帧图像渲染至第一缓存;
在所述第一图像帧集中的每帧图像渲染至第一缓存后,通过所述第一渲染线程将所述预览图像流的包括预定帧数的图像的第二图像帧集中的每帧图像渲染至第二缓存,其中,所述第二图像帧不同于所述第一图像帧。
结合第二方面的第一种实施方式,在第二方面的第二种实施方式中,所述通过第二渲染线程从所述第一缓存和第二缓存交替读取所述图像帧包括:
在所述第一图像帧集中的每帧图像渲染至第一缓存后,通过第二渲染线程从所述第一缓存读取所述第一图像帧集中的图像;
在所述第二图像帧集中的每帧图像渲染至第二缓存后,通过第二渲染线程从所述第二缓存读取所述第二图像帧集中的图像。
结合第二方面,在第二方面的第三种实施方式中,在通过第一渲染线程从所述摄像头获取预览图像流之前,所述方法还包括:
创建第一渲染线程和第二渲染线程。
结合第二方面,在第二方面的第四种实施方式中,在所述图像帧与所述视频流合成之前,所述方法还包括:
对所述图像帧进行特效处理,得到特效处理后的图像帧;
其中,将所述图像帧与所述视频流的视频帧进行合成包括:将特效处理后的图像帧与所述视频流进行合成。
第三方面,本发明实施例提供一种播放视频装置,用于安装有摄像头和视频解码器的电子设备,所述装置包括:
第一渲染单元,用于通过第一线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧渲染至第一缓存;
复制单元,用于从所述第一缓存复制图像帧,并将复制的所述图像帧交替写入第二缓存和第三缓存;
第二渲染单元,用于通过第二渲染线程从所述视频解码器获取视频流,从所述第二缓存和所述第三缓存交替读取所述图像帧,将所述图像帧与所述视频流的视频帧进行合成,合成后的视频流在所述电子设备的显示屏上显示。
结合第三方面,在第三方面的第一种实施方式中,所述复制单元,具体用于从所述第一缓存复制包括预定帧数的图像的第一图像帧集,并将所述第一图像帧集中的每帧图像写入第二缓存;从所述第一缓存再次复制包括预定帧数的图像的第二图像帧集,并将所述第二图像帧集中的每帧图像写入第三缓存,其中,所述第二图像帧不同于所述第一图像帧。
结合第三方面的第一种实施方式,在第三方面的第二种实施方式中,所述第二渲染单元,具体用于在所述第一图像帧集中的每帧图像写入第二缓存后,通过所述第二渲染线程从所述第二缓存读取所述第一图像帧集中的图像;在所述第二图像帧集中的每帧图像写入第三缓存后,通过所述第二渲染线程从所述第三缓存读取所述第二图像帧集中的图像。
结合第三方面,在第三方面的第三种实施方式中,所述装置还包括:
线程创建单元,用于创建所述第一渲染线程和第二渲染线程,所述第二渲染线程包括所述第一渲染线程的渲染设置参数,所述渲染设置参数包括绘制区域的顶点坐标数组、纹理坐标数据组和纹理绘制次序。
结合第三方面,在第三方面的第四种实施方式中,所述装置还包括:
特效处理单元,用于在所述图像帧与所述视频流合成之前,对所述图像帧进行特效处理,得到特效处理后的图像帧;
其中,所述第二渲染单元,具体用于将特效处理后的图像帧与所述视频流进行合成。
第四方面,本发明实施例提供一种播放视频装置,用于安装有摄像头和视频解码器的电子设备,所述装置包括:
第一渲染单元,用于通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧交替渲染至第一缓存和第二缓存;
第二渲染单元,用于通过第二渲染线程从所述视频解码器获取视频流,从所述第一缓存和第二缓存交替读取所述图像帧,将所述图像帧与所述视频流的视频帧进行合成,合成后的视频流在所述电子设备的显示屏上显示。
结合第四方面,在第四方面的第一种实施方式中,所述第一渲染单元,具体用于通过所述第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的包括预定帧数的图像的第一图像帧集中的每帧图像渲染至第一缓存;在所述第一图像帧集中的每帧图像渲染至第一缓存后,通过所述第一渲染线程将所述预览图像流的包括预定帧数的图像的第二图像帧集中的每帧图像渲染至第二缓存,其中,所述第二图像帧不同于所述第一图像帧。
结合第四方面的第一种实施方式,在第四方面的第二种实施方式中,所述第二渲染单元,具体用于在所述第一图像帧集中的每帧图像渲染至第一缓存后,通过所述第二渲染线程从所述第一缓存读取所述第一图像帧集中的图像;在所述第二图像帧集中的每帧图像渲染至第二缓存后,通过所述第二渲染线程从所述第二缓存读取所述第二图像帧集中的图像。
结合第四方面,在第四方面的第三种实施方式中,所述装置还包括:线程创建单元,用于创建第一渲染线程和第二渲染线程。
结合第四方面,在第四方面的第四种实施方式中,所述装置还包括:特效处理单元,用于在所述图像帧与所述视频流合成之前,对所述图像帧进行特效处理,得到特效处理后的图像帧;
其中,所述第二渲染单元,具体用于将特效处理后的图像帧与所述视频流进行合成。
第五方面,本发明实施例提供一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施方式所述的方法。
第六方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述任一实施方式所述的方法。
第七方面,本发明的实施例还提供一种应用程序,所述应用程序被执行以实现本发明任一实施方式提供的方法。
本发明实施例提供的一种视频播放方法、装置、电子设备及存储介质,通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧先渲染至第一缓存,可得到第一渲染图像,第一缓存中的图像帧(即第一渲染图像)再交替写入第二缓存和第三缓存;通过第二渲染线程从所述第二缓存和所述第三缓存交替读取所述图像帧(第一渲染图像),将所述图像帧(第一渲染图像)与从所述视频解码器所述视频流的视频帧进行合成,可得到第二渲染图像,合成后的视频流在所述电子设备的显示屏上显示,这样,通过两次渲染,并将第一次渲染获得的图像(第一渲染图像)交替写入两个缓存,然后再从这两个缓存中交替读取第一次渲染获得的图像,与视频流中的视频帧合成(即进行第二次渲染),这样可提高从所述摄像头获取预览图像流的图像帧在所播放的视频画面上的显示速度,能够使从摄像头获取的图像在播放的视频画面上显示得更加流畅。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明一实施例视频播放方法的流程示意图;
图2a为本发明另一实施例视频播放方法的流程示意图;
图2b为本发明一实施例中从摄像头获取预览图像流的图像帧在第一时刻的传递示意图;
图2c为本发明一实施例中从摄像头获取预览图像流的图像帧在第二时刻的传递示意图;
图3为本发明一实施例播放视频装置的结构示意图;
图4为本发明另一实施例播放视频装置的结构示意图;
图5为本发明另一实施例视频播放方法的流程示意图;
图6a为本发明另一实施例视频播放方法的流程示意图;
图6b为本发明另一实施例中从摄像头获取预览图像流的图像帧在第一时刻的传递示意图;
图6c为本发明另一实施例中从摄像头获取预览图像流的图像帧在第二时刻的传递示意图;
图7为本发明另一实施例播放视频装置的流程示意图;
图8为本发明另一实施例播放视频装置的流程示意图;
图9为本发明电子设备一个实施例的结构示意图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例提供一种视频播放方法,以在播放视频时,可在视频画面中显示摄像头实时采集的图像。本实施例可应用于安装有摄像头和视频解码器的电子设备,所述电子设备可以是安装有安卓或iOS等操作系统的手机、便携式计算机等移动终端,也可以是桌面计算机等。
图1为本发明一实施例视频播放方法的流程示意图,如图1所示,本实施例的方法可以包括:
步骤101、通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧渲染至第一缓存。
本实施例中,第一缓存可以是CPU缓存。电子设备(如手机)的摄像头开启后可实时采集现实场景中的图像(如手机使用者的面部图像)产生预览图像流,该预览图像流的图像帧不直接显示在电子设备的屏幕上,而是通过第一渲染线程渲染至第一缓存。
本实施例中,第一渲染线程可通过调用OpenGL的接口实现图像帧的渲染。OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。
第一渲染线程根据预先设置的渲染设置参数,将所述预览图像流的图像帧渲染至第一缓存。渲染设置参数包括绘制区域的顶点坐标数组、纹理坐标数据组和纹理绘制次序等。
步骤102、从所述第一缓存复制图像帧,并将复制的所述图像帧交替写入第二缓存和第三缓存。
所述第二缓存和第三缓存可以是GPU缓存。由于图像帧渲染到系统默认的缓存后会直接在电子设备屏幕上显示出来,而本实施例中,无论将所述图像帧写入到第二缓存还是第三缓存,均不会直接在电子设备屏幕上显示出来,因此本实施例中的第二缓存和第三缓存并不采用系统默认的缓存。
步骤103、通过第二渲染线程从所述视频解码器获取视频流,从所述第二缓存和所述第三缓存交替读取所述图像帧,将所述图像帧与所述视频流的视频帧进行合成,合成后的视频流在所述电子设备的显示屏上显示。
本实施例中,第二渲染线程根据所述第一渲染线程的渲染设置参数,将所述图像帧与所述视频流的视频帧的视频帧数据进行合成,这里的合成即意味着利用从所述摄像头获取的图像流的图像帧,贴在从所述视频解码器获取的视频流的视频帧的预定位置处,该预定位置通过所述渲染设置参数来控制。从所述视频解码器获取的视频流的视频帧,在所述预定位置处的画面内容不渲染显示,或者虽然渲染显示但被从所述摄像头获取的图像流的图像帧所遮盖。
用来被视频解码器解码的源视频可以是保存在电子设备本地的视频,也可以是从互联网上在线获得的视频,所述视频可以是电影、游戏或直播等。
本实施例中,通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧先渲染至第一缓存,可得到第一渲染图像,第一缓存中的图像帧(即第一渲染图像)再交替写入第二缓存和第三缓存;通过第二渲染线程从所述第二缓存和所述第三缓存交替读取所述图像帧(第一渲染图像),将所述图像帧(第一渲染图像)与从所述视频解码器所述视频流的视频帧进行合成,可得到第二渲染图像,合成后的视频流在所述电子设备的显示屏上显示,这样,通过两次渲染,并将第一次渲染获得的图像(第一渲染图像)交替写入两个缓存,然后再从这两个缓存中交替读取第一次渲染获得的图像,与视频流中的视频帧合成(即进行第二次渲染),这样可提高从所述摄像头获取预览图像流的图像帧在所播放的视频画面上的显示速度,能够使从摄像头获取的图像在播放的视频画面上显示得更加流畅。
图2a为本发明另一实施例视频播放方法的流程示意图,图2b为本发明一实施例中从摄像头获取预览图像流的图像帧在第一时刻的传递示意图,图2c为本发明一实施例中从摄像头获取预览图像流的图像帧在第二时刻的传递示意图。
如图2a所示,本实施例的方法可以包括:
步骤201、创建第一渲染线程。
本实施例中,创建的第一渲染线程用来从摄像头获取预览图像流,并对获取的预览图像流进行渲染。
步骤202、创建第二渲染线程。
本实施例中,创建的第二渲染线程用来从视频解码器获取视频流,并对获取的视频流进行渲染。
步骤203、通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧渲染至第一缓存。
所述预定帧数可以是一帧或多帧,具体的帧数可视缓存的大小而定,本实施例对此不做具体限定。
本实施例中,第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧渲染至第一缓存的过程和上述方法实施例的步骤101类似,此处不再赘述。
步骤204、从所述第一缓存复制包括预定帧数的图像的第一图像帧集,并将所述第一图像帧集中的每帧图像写入第二缓存。
所述预定帧数可以是连续的3帧、4帧或5帧等。本发明不限于此,所述预定帧数也可以是相间隔的几帧,当所述预定帧数是3帧时,该3帧可以由第1帧、第3帧和第5帧组成。
本实施例中,在所述第一图像帧集中的每帧图像写入第二缓存后,分别执行步骤205和步骤207。
步骤205、从所述第一缓存再次复制包括预定帧数的图像的第二图像帧集,并将所述第二图像帧集中的每帧图像写入第三缓存。
本实施例中,从所述第一缓存复制预定帧数的第一图像帧和第二图像帧,是按所述摄像头采集的现实场景中的图像的时序来进行的,由此使得所述第二图像帧可能不同于所述第一图像帧。应当理解的是,第一图像帧集和第二图像帧集中的图像帧的数量可以相同,也可以不相同。
在所述第二图像帧集中的每帧图像写入第三缓存后,返回执行步骤204并执行步骤208。
步骤206、通过第二渲染线程从视频解码器获取视频流。
视频解码器对源视频进行解码得到解码后的视频流。用来被视频解码器解码的源视频可以是保存在电子设备本地的视频,也可以是从互联网上在线获得的视频,所述视频可以是电影、游戏或直播等。
步骤207、通过第二渲染线程从所述第二缓存读取所述第一图像帧集中的图像。
示例性的,所述述第二渲染线程可从所述第二缓存逐帧读取所述第一图像帧集中的图像。
本步骤207可与步骤205同步进行。
步骤208、通过第二渲染线程从所述第三缓存读取所述第二图像帧集中的图像。
示例性的,所述第二渲染线程可从所述第三缓存逐帧读取所述第二图像帧集中的图像。
步骤209、通过第二渲染线程将所述图像帧与所述视频流的视频帧进行合成。本实施例中,所述图像帧即为所述摄像机所拍摄的预览图像流中的图像,所述视频帧即为所述视频流中的图像。
本实施例中,通过第二渲染线程将所述图像帧与所述视频流的视频帧进行合成的过程和上述方法实施例的步骤103类似,此处不再赘述。
步骤210、合成后的视频流在所述电子设备的显示屏上显示。
合成后的视频流通过电子设备(如手机)上的视频播放器(如MediaPlayer)播放,从而显示在手机上的屏幕上。
应当理解的是,本实施例不限于采用上述三个缓存来对从所述摄像头获取的图像流进行传输,也可采用四个、五个或更多的缓存来实现。
作为一可选实施方式,在所述图像帧与所述视频流合成之前,所述方法还可包括:对从所述摄像头获取的图像流的所述图像帧进行特效处理,得到特效处理后的图像帧。特效处理可以包括:旋转、拉伸、压缩变形、黑白或雾化处理等。其中,所述将所述图像帧与所述视频流的视频帧进行合成包括:将特效处理后的图像帧与所述视频流进行合成。这样,在屏幕上显示的从所述摄像头获取的图像流的图像就会具有相应的特效,以增强用户体验。
所述特效的处理可由第一渲染线程执行,也可由所述第二渲染线程执行。
本实施例中,通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧先渲染至第一缓存,可得到第一渲染图像,第一缓存中的图像帧(即第一渲染图像)再交替写入第二缓存和第三缓存;通过第二渲染线程从所述第二缓存和所述第三缓存交替读取所述图像帧(第一渲染图像),将所述图像帧(第一渲染图像)与从所述视频解码器所述视频流的视频帧进行合成,可得到第二渲染图像,合成后的视频流在所述电子设备的显示屏上显示,这样,通过两次渲染,并将第一次渲染获得的图像(第一渲染图像)交替写入两个缓存,然后再从这两个缓存中交替读取第一次渲染获得的图像,与视频流中的视频帧合成(即进行第二次渲染),这样可提高从所述摄像头获取预览图像流的图像帧在所播放的视频画面上的显示速度,能够使从摄像头获取的图像在播放的视频画面上显示得更加流畅。
图3为本发明一实施例播放视频装置的结构示意图,如图3所示,本实施例的装置可以包括:第一渲染单元301、复制单元302和第二渲染单元303。
其中,所述第一渲染单元301,用于通过第一线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧渲染至第一缓存。
所述复制单元302,从所述第一缓存复制图像帧,并将复制的所述图像帧交替写入第二缓存和第三缓存。
所述第二渲染单元303,用于通过第二渲染线程从所述视频解码器获取视频流,从所述第二缓存和所述第三缓存交替读取所述图像帧,将所述图像帧与所述视频流的视频帧进行合成,合成后的视频流在所述电子设备的显示屏上显示。
本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图4为本发明另一实施例播放视频装置的结构示意图,如图4所示,本实施例的装置在图3所示装置的基础上,进一步地,所述复制单元302,具体用于从所述第一缓存复制包括预定帧数的图像的第一图像帧集,并将所述第一图像帧集中的每帧图像写入第二缓存;从所述第一缓存再次复制包括预定帧数的图像的第二图像帧集,并将所述第二图像帧集中的每帧图像写入第三缓存,其中,所述第二图像帧不同于所述第一图像帧。
所述第二渲染单元303,具体用于在所述第一图像帧集中的每帧图像写入第二缓存后,通过所述第二渲染线程从所述第二缓存读取所述第一图像帧集中的图像;在所述第二图像帧集中的每帧图像写入第三缓存后,通过所述第二渲染线程从所述第三缓存读取所述第二图像帧集中的图像。
可选地,本实施例中,所述装置还可包括:线程创建单元304,用于创建所述第一渲染线程和第二渲染线程,所述第二渲染线程包括所述第一渲染线程的渲染设置参数,所述渲染设置参数包括绘制区域的顶点坐标数组、纹理坐标数据组和纹理绘制次序。
可选地,本实施例中,所述装置还可包括:特效处理单元305,用于在所述图像帧与所述视频流合成之前,对所述图像帧进行特效处理,得到特效处理后的图像帧;其中,所述第二渲染单元303,具体用于将特效处理后的图像帧与所述视频流进行合成。
本实施例的装置,可以用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图5为本发明另一实施例视频播放方法的流程示意图,如图5所示,本实施例的方法可以包括:
步骤501、通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧交替渲染至第一缓存和第二缓存。
本实施例中,电子设备(如手机)的摄像头开启后可实时采集现实场景中的图像(如手机使用者的面部图像)产生预览图像流,该预览图像流的图像帧不直接显示在电子设备的屏幕上,而是通过第一渲染线程交替渲染至第一缓存和第二缓存。
本实施例中,第一渲染线程可通过调用OpenGL的接口实现图像帧的渲染。OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。
本实施例中,所述第一缓存和第二缓存可以是GPU缓存。由于图像帧渲染到系统默认的缓存后会直接在电子设备屏幕上显示出来,而本实施例中,无论将所述图像帧写入到第二缓存还是第三缓存,均不会直接在电子设备屏幕上显示出来,因此本实施例中的第二缓存和第三缓存并不采用系统默认的缓存。
步骤502、通过第二渲染线程从所述视频解码器获取视频流,从所述第一缓存和第二缓存交替读取所述图像帧,将所述图像帧与所述视频流的视频帧进行合成,合成后的视频流在所述电子设备的显示屏上显示。
用来被视频解码器解码的源视频可以是保存在电子设备本地的视频,也可以是从互联网上在线获得的视频,所述视频可以是电影、游戏或直播等。
本实施例中,通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧交替渲染至第一缓存和第二缓存,可得到第一渲染图像;通过第二渲染线程从所述第一缓存和第二缓存交替读取所述图像帧(第一渲染图像),将所述图像帧(第一渲染图像)与从所述视频解码器所述视频流的视频帧进行合成,可得到第二渲染图像,合成后的视频流在所述电子设备的显示屏上显示,这样,通过两次渲染,并将第一次渲染获得的图像(第一渲染图像)交替写入两个缓存,然后再从这两个缓存中交替读取第一次渲染获得的图像,与视频流中的视频帧合成(即进行第二次渲染),这样可提高从所述摄像头获取预览图像流的图像帧在所播放的视频画面上的显示速度,能够使从摄像头获取的图像在播放的视频画面上显示得更加流畅。
图6a为本发明另一实施例视频播放方法的流程示意图,图6b为本发明另一实施例中从摄像头获取预览图像流的图像帧在第一时刻的传递示意图,图6c为本发明另一实施例中从摄像头获取预览图像流的图像帧在第二时刻的传递示意图。
如图6a所示,本实施例的方法可以包括:
步骤601、创建第一渲染线程。
步骤602、创建第二渲染线程。
本实施例中,创建第一渲染线程和第二渲染线程的过程分别和上述方法实施例的步骤201和步骤202类似,此处不再赘述。
步骤603、所述第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的第一图像帧集中的每帧图像渲染至第一缓存。
所述第一图像帧集中包括预定帧数的图像。所述预定帧数可以是一帧或多帧,具体的帧数可视缓存的大小而定,本实施例对此不做具体限定。
所述预定帧数可以是连续的3帧、4帧或5帧等。本发明不限于此,所述预定帧数也可以是相间隔的几帧,当所述预定帧数是3帧时,该3帧可以由第1帧、第3帧和第5帧组成。
本实施例中,通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的包括预定帧数的图像的第一图像帧集中的每帧图像渲染至第一缓存的过程和上述方法实施例的步骤101类似,此处不再赘述。
在所述第一图像帧集中的每帧图像渲染至第一缓存后,执行步骤604和步骤606。
步骤604、所述第一渲染线程将所述预览图像流的第二图像帧集中的每帧图像渲染至第二缓存。
所述第二图像帧集中包括预定帧数的图像。
本实施例中,通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的包括预定帧数的图像的第二图像帧集中的每帧图像渲染至第二缓存的过程和上述方法实施例的步骤101类似,此处不再赘述。
本实施例中,交替写入所述第一缓存和第二缓存中的第一图像帧集中的图像和第二图像帧集中的图像,是按所述摄像头采集的现实场景中的图像的时序来进行的,由此使得所述第二图像帧集中的图像可能不同于所述第一图像帧集中的图像。
在所述第二图像帧集中的每帧图像渲染至第二缓存后,返回执行步骤603,并执行步骤607。
步骤605、通过第二渲染线程从视频解码器获取视频流。
本实施例中,通过第二渲染线程从视频解码器获取视频流的过程和上述方法实施例的步骤206类似,此处不再赘述。
步骤606、所述第二渲染线程从所述第一缓存读取所述第一图像帧集中的图像。
步骤607、所述第二渲染线程从所述第二缓存读取所述第二图像帧集中的图像。
步骤608、通过第二渲染线程将所述图像帧与所述视频流的视频帧进行合成。
本实施例中,通过第二渲染线程将所述图像帧与所述视频流的视频帧进行合成的过程和上述方法实施例的步骤209类似,此处不再赘述。
步骤609、合成后的视频流在所述电子设备的显示屏上显示。
本实施例中,合成后的视频流在所述电子设备的显示屏上显示的过程和上述方法实施例的步骤210类似,此处不再赘述。
应当理解的是,第一渲染线程将从所述摄像头获取的图像流的不同图像帧写入第一缓存和第二缓存是不断交替进行的,相应地,通过第二渲染线程从第一缓存和第二缓存中读取所述图像帧也是不断交替进行的。
作为一可选实施方式,在所述图像帧与所述视频流合成之前,所述方法还包括:
对从所述摄像头获取的图像流的所述图像帧进行特效处理,得到特效处理后的图像帧。特效处理可以包括:旋转、拉伸、压缩变形、黑白或雾化处理等。
其中,通过第二渲染线程将所述图像帧与所述视频流的视频帧进行合成包括:通过第二渲染线程将特效处理后的图像帧与所述视频流进行合成。这样,在屏幕上显示的从所述摄像头获取的图像流的图像就会具有相应的特效,以增强用户体验。
所述特效的处理可由第一渲染线程执行,也可由所述第二渲染线程执行。
本实施例中,通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧交替渲染至第一缓存和第二缓存,可得到第一渲染图像;通过第二渲染线程从所述第一缓存和第二缓存交替读取所述图像帧(第一渲染图像),将所述图像帧(第一渲染图像)与从所述视频解码器所述视频流的视频帧进行合成,可得到第二渲染图像,合成后的视频流在所述电子设备的显示屏上显示,这样,通过两次渲染,并将第一次渲染获得的图像(第一渲染图像)交替写入两个缓存,然后再从这两个缓存中交替读取第一次渲染获得的图像,与视频流中的视频帧合成(即进行第二次渲染),这样可提高从所述摄像头获取预览图像流的图像帧在所播放的视频画面上的显示速度,能够使从摄像头获取的图像在播放的视频画面上显示得更加流畅。
图7为本发明另一实施例播放视频装置的流程示意图,如图7所示,本实施例的装置可以包括第一渲染单元701和第二渲染单元702。
其中,所述第一渲染单元701,用于通过第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的图像帧交替渲染至第一缓存和第二缓存。
所述第二渲染单元702,用于通过第二渲染线程从所述视频解码器获取视频流,从所述第一缓存和第二缓存交替读取所述图像帧,将所述图像帧与所述视频流的视频帧进行合成,合成后的视频流在所述电子设备的显示屏上显示。
本实施例的装置,可以用于执行图5所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图8为本发明另一实施例播放视频装置的流程示意图,如图8所示,本实施例的装置在图7所示装置实施例的基础上,所述第一渲染单元701,可具体用于通过所述第一渲染线程从所述摄像头获取预览图像流,并将所述预览图像流的包括预定帧数的图像的第一图像帧集中的每帧图像渲染至第一缓存;在所述第一图像帧集中的每帧图像渲染至第一缓存后,通过所述第一渲染线程将所述预览图像流的包括预定帧数的图像的第二图像帧集中的每帧图像渲染至第二缓存,其中,所述第二图像帧不同于所述第一图像帧。
可选地,所述第二渲染单元702,可具体用于在所述第一图像帧集中的每帧图像渲染至第一缓存后,通过所述第二渲染线程从所述第一缓存读取所述第一图像帧集中的图像;在所述第二图像帧集中的每帧图像渲染至第二缓存后,通过所述第二渲染线程从所述第二缓存读取所述第二图像帧集中的图像。
可选地,本实施例中,所述装置还可包括线程创建单元703,用于创建第一渲染线程和第二渲染线程。
可选地,本实施例中,所述装置还可包括特效处理单元704,用于在所述图像帧与所述视频流合成之前,对所述图像帧进行特效处理,得到特效处理后的图像帧;其中,所述第二渲染单元702,可具体用于将特效处理后的图像帧与所述视频流进行合成。
本实施例的装置,可以用于执行图6所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图9为本发明电子设备一个实施例的结构示意图,可以实现本发明图1及图2,或图5及图6所示实施例的流程,如图9所示,上述电子设备可以包括:壳体41、处理器42、存储器43、电路板44和电源电路45,其中,电路板44安置在壳体41围成的空间内部,处理器42和存储器43设置在电路板44上;电源电路45,用于为上述电子设备的各个电路或器件供电;存储器43用于存储可执行程序代码;处理器42通过读取存储器43中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施例所述的方法。
处理器42对上述步骤的具体执行过程以及处理器42通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1及图2,或图5及图6所示实施例的描述,在此不再赘述。
该电子设备以多种形式存在,包括但不限于:
(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。
(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。
(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
(5)其他具有数据交互功能的电子设备。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述任一实施例所述的方法。
本发明的实施例还提供一种应用程序,所述应用程序被执行以实现本发明任一实施例提供的方法。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。