本发明涉及全景视频播放技术领域,特别是涉及一种视频分屏播放方法、装置及播放终端。
背景技术:
随着计算机技术的飞速发展,多媒体所包含的种类和表现效果也越来越多。一些比较传统的表现方式,越来越无法满足大部分客户的要求。所以在我们需要真实、全面、直观地表现某一场景时,360度全景视频无疑是最好的选择。360度全景视频技术可以被用到房产展示、观光景点、汽车、酒店、校园、文化和体育馆、公司办公环境等。
目前,感受360全景视频最低成本最便捷的方式,就是采用手机加头盔显示设备的方式。将手机放置在头盔显示设备中,在手机上播放360度全景视频,用户可以身临其境地感受到全景带来的感官震撼体验。由于手机播放画面离人眼很近,根据人眼看物体的原理,要想看清画面,必须对播放画面进行左右分屏,所以在360度全景视屏中,进行左右分屏播放是很重要的一种技术。
当前,左右分屏播放的实现方案主要是采用两个控件显示层(View)进行实现,将与显示屏幕对应的显示区域平均分成左右两块区域,每个区域显示一个View,每个View中都做同样的事情,即在每个View中采用OpenGL绘制一个球体模型,将播放器输出的视频画面作为纹理分别绘制在两个球体的表面。通过控制其中一个View的显示和隐藏来实现全屏分屏模式的切换。
目前通用的分屏播放的实现方案,需要两个View来实现,使系统资源开销增加了一倍以上,造成了极大的浪费,同时,基于此方案,实现360度全景视频全屏和分屏播放动态切换时,通常的做法是动态隐藏或者显示其中的一个显示层(View),隐藏或者显示View会导致Android系统的View体系进行重绘,不仅会导致极大的系统资源开销,而且由于延时的存在,导致切换过程中会闪现黑屏,同时切换不够平滑,用户体验很差。
技术实现要素:
本发明的目的是针对现有技术中存在的技术缺陷,而提供一种视频分屏播放方法、装置及播放终端。
为实现本发明的目的所采用的技术方案是:
一种视频分屏播放方法,包括,
播放器输出的视频画面数据绘制到纹理A上,将纹理A贴到球体模型上,纹理A随视频画面数据不断进行刷新;
判断是否分屏模式,如是则,
将视口设置成显示区域的一半,将球体模型整体同时绘制到左平面模型关联的纹理B上和右平面模型关联的纹理C上,所述的左平面模型和右平面模型分别对应显示区域的一半;
将视口设置为显示区域大小,将左、右平面模型绘制到显示屏幕上。
若不是分屏模式则将球体模型整体绘制到显示屏幕上。
在Android系统框架中,利用onDrawFrame方法会不断回调用于刷新当前视频帧。
所述的显示屏幕为真实屏幕,所述的视频为360度全景视频。
一种视频分屏播放的装置,包括,
播放模块,用以将播放器输出的视频画面数据绘制到纹理A上,将纹理A贴到球体模型上,纹理A随视频画面数据不断进行刷新;
判断模块,用以判断是否分屏模式,
映射模块,用以在分屏模式下将视口设置成显示区域的一半,将球体模型整体绘制到左平面模型关联的纹理B上和右平面模型关联的纹理C上,所述的左平面模型和右平面模型分别对应显示区域的一半;
绘制模块,用以将视口设置为显示区域的大小,将左、右平面模型绘制到显示屏幕上。
在Android系统框架中,利用onDrawFrame方法会不断回调用于刷新当前帧。
所述的显示屏幕为真实屏幕。
一种具有所述的视频分屏播放装置的播放终端。
与现有技术相比,本发明的有益效果是:
本发明的播放方法,仅运行一个显示层(view),可以选择控制将渲染了播放画面的球体模型绘制到左右平面模型关联的纹理上然后将左右平面模型再绘制到屏幕上,还是将渲染了播放画面的球体模型直接绘制到真实屏幕上,该分屏技术不仅消耗系统资源低,有效地减少系统资源开销,解决了分屏播放导致系统资源消耗成倍增加、全屏和分屏模式切换时会黑屏卡顿用户体验差的问题。而且能够实现全屏分屏播放的平滑快速切换,极大地提高了用户体验。
附图说明
图1所示为本发明的视频分屏播放方法的结构示意图。
具体实施方式
以下结合附图和具体实施例对本发明作进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明视频分屏播放方法,包括,
步骤101,播放器输出的视频画面数据绘制到纹理A上,将纹理A贴到球体模型上,纹理A随视频画面数据不断进行刷新;
步骤102,判断是否分屏模式,如是则,若不是分屏模式,则将球体模型整体绘制到显示屏幕上;
步骤103,将视口设置成显示区域的一半,将球体模型整体同时绘制到左平面模型关联的纹理B上和右平面模型关联的纹理C上,所述的左平面模型和右平面模型分别对应显示区域的一半;
其中,球体模型、左平面模型和右平面模型为实例化的模型,左平面模型和右平面模型即分别对应显示区域的左右两部分,所述的显示区域与显示屏幕相对应,所述的显示屏幕一般为真实屏幕。左平面模型和右平面模型各自对应显示区域的一半,在进行绘制时将视口对应地调整,保证显示正常。
步骤104将视口设置为显示区域的大小,将左、右平面模型分别对应绘制到显示屏幕上预设区域。
该步骤中,直接将左平面模型和右平面模型绘制到真实的显示屏幕上进行显示,左、右平面模型各占屏幕的一半实现分屏显示。
OpenGL(Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。本发明是基于opengl实现的,Frame Buffer Object(FBO)帧缓存对象技术也是opengl范畴内的一个技术。具体来说,onDrawFrame的处理流程为:首先刷新纹理A上绘制的画面数据,然后,判断“是否是分屏模式”这个变量,如果是分屏模式,就执行:将视口设置成显示区域的一半(width/2、heigth),使用FBO技术将球体模型同时绘制到左平面模型关联的纹理B上和右平面模型关联的纹理C上,将视口设置成显示区域的原大小,将左、右平面模型绘制到真实的显示屏幕上,左右平面模型各占屏幕的一半。如果不是分屏模式,就把球体模型整体绘制到真实屏幕上。也就是说可以通过一个变量,动态切换全屏和分屏模式。onDrawFrame方法是不断回调执行的,籍以实现视频的不断播放。
以是否是分屏模式作为唯一变量,视频播放及渲染和绘制仅有一个实例,仅一个变量就可以控制全屏和分屏全景视频播放,系统资源消耗少而且很快速,用户体验很好。
同时,本发明还公开了一种视频分屏播放的装置,包括,
播放模块,用以将播放器输出的视频画面数据绘制到纹理A上,将纹理A贴到球体模型上,纹理A随视频画面数据不断进行刷新;
判断模块,用以判断是否分屏模式,
映射模块,用以在分屏模式下将视口设置成显示区域的一半,将球体模型绘制到左平面模型关联的纹理B上和右平面模型关联的纹理C上,所述的左平面模型和右平面模型分别对应显示区域的一半;
绘制模块,用以将视口设置为显示区域的大小,将左、右平面模型整体绘制到显示屏幕上。
本发明是在Android系统框架中实现的,采用的是Android系统中对OpenGL ES提供支持的控件GLSurfaceView进行实现的,但是本发明的原理可以应用到任何支持OpenGL的平台上。
在Android系统中实现如下:
在GLSurfaceView.Render的onSurfaceCreated回调方法中,球体模型(Sphere)、左平面模型(ScreenQuad)、右平面模型分别进行实例化,在onSurfaceChanged回调方法中将视口(view port)设置成回调方法中返回的宽(width)高(height),onDrawFrame方法会不断回调用于刷新当前帧。
具有所述的视频分屏播放装置的播放终端,如手机,采用FBO技术,在同一个View中,可以动态控制是将球体模型绘制到左右平面模型关联的纹理上还是直接绘制到真实的屏幕上,通过这种控制可以低成本高效率地实现视频,尤其是360度全景视频全屏分屏的快速切换,提高了用户体验。
以上所述仅是本发明的优选实施方式,应当指出的是,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。