本發(fā)明涉及全景視頻播放技術(shù)領(lǐng)域,特別是涉及一種視頻分屏播放方法、裝置及播放終端。
背景技術(shù):
隨著計算機(jī)技術(shù)的飛速發(fā)展,多媒體所包含的種類和表現(xiàn)效果也越來越多。一些比較傳統(tǒng)的表現(xiàn)方式,越來越無法滿足大部分客戶的要求。所以在我們需要真實(shí)、全面、直觀地表現(xiàn)某一場景時,360度全景視頻無疑是最好的選擇。360度全景視頻技術(shù)可以被用到房產(chǎn)展示、觀光景點(diǎn)、汽車、酒店、校園、文化和體育館、公司辦公環(huán)境等。
目前,感受360全景視頻最低成本最便捷的方式,就是采用手機(jī)加頭盔顯示設(shè)備的方式。將手機(jī)放置在頭盔顯示設(shè)備中,在手機(jī)上播放360度全景視頻,用戶可以身臨其境地感受到全景帶來的感官震撼體驗(yàn)。由于手機(jī)播放畫面離人眼很近,根據(jù)人眼看物體的原理,要想看清畫面,必須對播放畫面進(jìn)行左右分屏,所以在360度全景視屏中,進(jìn)行左右分屏播放是很重要的一種技術(shù)。
當(dāng)前,左右分屏播放的實(shí)現(xiàn)方案主要是采用兩個控件顯示層(View)進(jìn)行實(shí)現(xiàn),將與顯示屏幕對應(yīng)的顯示區(qū)域平均分成左右兩塊區(qū)域,每個區(qū)域顯示一個View,每個View中都做同樣的事情,即在每個View中采用OpenGL繪制一個球體模型,將播放器輸出的視頻畫面作為紋理分別繪制在兩個球體的表面。通過控制其中一個View的顯示和隱藏來實(shí)現(xiàn)全屏分屏模式的切換。
目前通用的分屏播放的實(shí)現(xiàn)方案,需要兩個View來實(shí)現(xiàn),使系統(tǒng)資源開銷增加了一倍以上,造成了極大的浪費(fèi),同時,基于此方案,實(shí)現(xiàn)360度全景視頻全屏和分屏播放動態(tài)切換時,通常的做法是動態(tài)隱藏或者顯示其中的一個顯示層(View),隱藏或者顯示View會導(dǎo)致Android系統(tǒng)的View體系進(jìn)行重繪,不僅會導(dǎo)致極大的系統(tǒng)資源開銷,而且由于延時的存在,導(dǎo)致切換過程中會閃現(xiàn)黑屏,同時切換不夠平滑,用戶體驗(yàn)很差。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是針對現(xiàn)有技術(shù)中存在的技術(shù)缺陷,而提供一種視頻分屏播放方法、裝置及播放終端。
為實(shí)現(xiàn)本發(fā)明的目的所采用的技術(shù)方案是:
一種視頻分屏播放方法,包括,
播放器輸出的視頻畫面數(shù)據(jù)繪制到紋理A上,將紋理A貼到球體模型上,紋理A隨視頻畫面數(shù)據(jù)不斷進(jìn)行刷新;
判斷是否分屏模式,如是則,
將視口設(shè)置成顯示區(qū)域的一半,將球體模型整體同時繪制到左平面模型關(guān)聯(lián)的紋理B上和右平面模型關(guān)聯(lián)的紋理C上,所述的左平面模型和右平面模型分別對應(yīng)顯示區(qū)域的一半;
將視口設(shè)置為顯示區(qū)域大小,將左、右平面模型繪制到顯示屏幕上。
若不是分屏模式則將球體模型整體繪制到顯示屏幕上。
在Android系統(tǒng)框架中,利用onDrawFrame方法會不斷回調(diào)用于刷新當(dāng)前視頻幀。
所述的顯示屏幕為真實(shí)屏幕,所述的視頻為360度全景視頻。
一種視頻分屏播放的裝置,包括,
播放模塊,用以將播放器輸出的視頻畫面數(shù)據(jù)繪制到紋理A上,將紋理A貼到球體模型上,紋理A隨視頻畫面數(shù)據(jù)不斷進(jìn)行刷新;
判斷模塊,用以判斷是否分屏模式,
映射模塊,用以在分屏模式下將視口設(shè)置成顯示區(qū)域的一半,將球體模型整體繪制到左平面模型關(guān)聯(lián)的紋理B上和右平面模型關(guān)聯(lián)的紋理C上,所述的左平面模型和右平面模型分別對應(yīng)顯示區(qū)域的一半;
繪制模塊,用以將視口設(shè)置為顯示區(qū)域的大小,將左、右平面模型繪制到顯示屏幕上。
在Android系統(tǒng)框架中,利用onDrawFrame方法會不斷回調(diào)用于刷新當(dāng)前幀。
所述的顯示屏幕為真實(shí)屏幕。
一種具有所述的視頻分屏播放裝置的播放終端。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
本發(fā)明的播放方法,僅運(yùn)行一個顯示層(view),可以選擇控制將渲染了播放畫面的球體模型繪制到左右平面模型關(guān)聯(lián)的紋理上然后將左右平面模型再繪制到屏幕上,還是將渲染了播放畫面的球體模型直接繪制到真實(shí)屏幕上,該分屏技術(shù)不僅消耗系統(tǒng)資源低,有效地減少系統(tǒng)資源開銷,解決了分屏播放導(dǎo)致系統(tǒng)資源消耗成倍增加、全屏和分屏模式切換時會黑屏卡頓用戶體驗(yàn)差的問題。而且能夠?qū)崿F(xiàn)全屏分屏播放的平滑快速切換,極大地提高了用戶體驗(yàn)。
附圖說明
圖1所示為本發(fā)明的視頻分屏播放方法的結(jié)構(gòu)示意圖。
具體實(shí)施方式
以下結(jié)合附圖和具體實(shí)施例對本發(fā)明作進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,本發(fā)明視頻分屏播放方法,包括,
步驟101,播放器輸出的視頻畫面數(shù)據(jù)繪制到紋理A上,將紋理A貼到球體模型上,紋理A隨視頻畫面數(shù)據(jù)不斷進(jìn)行刷新;
步驟102,判斷是否分屏模式,如是則,若不是分屏模式,則將球體模型整體繪制到顯示屏幕上;
步驟103,將視口設(shè)置成顯示區(qū)域的一半,將球體模型整體同時繪制到左平面模型關(guān)聯(lián)的紋理B上和右平面模型關(guān)聯(lián)的紋理C上,所述的左平面模型和右平面模型分別對應(yīng)顯示區(qū)域的一半;
其中,球體模型、左平面模型和右平面模型為實(shí)例化的模型,左平面模型和右平面模型即分別對應(yīng)顯示區(qū)域的左右兩部分,所述的顯示區(qū)域與顯示屏幕相對應(yīng),所述的顯示屏幕一般為真實(shí)屏幕。左平面模型和右平面模型各自對應(yīng)顯示區(qū)域的一半,在進(jìn)行繪制時將視口對應(yīng)地調(diào)整,保證顯示正常。
步驟104將視口設(shè)置為顯示區(qū)域的大小,將左、右平面模型分別對應(yīng)繪制到顯示屏幕上預(yù)設(shè)區(qū)域。
該步驟中,直接將左平面模型和右平面模型繪制到真實(shí)的顯示屏幕上進(jìn)行顯示,左、右平面模型各占屏幕的一半實(shí)現(xiàn)分屏顯示。
OpenGL(Open Graphics Library)是指定義了一個跨編程語言、跨平臺的編程接口規(guī)格的專業(yè)的圖形程序接口。它用于三維圖像(二維的亦可),是一個功能強(qiáng)大,調(diào)用方便的底層圖形庫。本發(fā)明是基于opengl實(shí)現(xiàn)的,F(xiàn)rame Buffer Object(FBO)幀緩存對象技術(shù)也是opengl范疇內(nèi)的一個技術(shù)。具體來說,onDrawFrame的處理流程為:首先刷新紋理A上繪制的畫面數(shù)據(jù),然后,判斷“是否是分屏模式”這個變量,如果是分屏模式,就執(zhí)行:將視口設(shè)置成顯示區(qū)域的一半(width/2、heigth),使用FBO技術(shù)將球體模型同時繪制到左平面模型關(guān)聯(lián)的紋理B上和右平面模型關(guān)聯(lián)的紋理C上,將視口設(shè)置成顯示區(qū)域的原大小,將左、右平面模型繪制到真實(shí)的顯示屏幕上,左右平面模型各占屏幕的一半。如果不是分屏模式,就把球體模型整體繪制到真實(shí)屏幕上。也就是說可以通過一個變量,動態(tài)切換全屏和分屏模式。onDrawFrame方法是不斷回調(diào)執(zhí)行的,籍以實(shí)現(xiàn)視頻的不斷播放。
以是否是分屏模式作為唯一變量,視頻播放及渲染和繪制僅有一個實(shí)例,僅一個變量就可以控制全屏和分屏全景視頻播放,系統(tǒng)資源消耗少而且很快速,用戶體驗(yàn)很好。
同時,本發(fā)明還公開了一種視頻分屏播放的裝置,包括,
播放模塊,用以將播放器輸出的視頻畫面數(shù)據(jù)繪制到紋理A上,將紋理A貼到球體模型上,紋理A隨視頻畫面數(shù)據(jù)不斷進(jìn)行刷新;
判斷模塊,用以判斷是否分屏模式,
映射模塊,用以在分屏模式下將視口設(shè)置成顯示區(qū)域的一半,將球體模型繪制到左平面模型關(guān)聯(lián)的紋理B上和右平面模型關(guān)聯(lián)的紋理C上,所述的左平面模型和右平面模型分別對應(yīng)顯示區(qū)域的一半;
繪制模塊,用以將視口設(shè)置為顯示區(qū)域的大小,將左、右平面模型整體繪制到顯示屏幕上。
本發(fā)明是在Android系統(tǒng)框架中實(shí)現(xiàn)的,采用的是Android系統(tǒng)中對OpenGL ES提供支持的控件GLSurfaceView進(jìn)行實(shí)現(xiàn)的,但是本發(fā)明的原理可以應(yīng)用到任何支持OpenGL的平臺上。
在Android系統(tǒng)中實(shí)現(xiàn)如下:
在GLSurfaceView.Render的onSurfaceCreated回調(diào)方法中,球體模型(Sphere)、左平面模型(ScreenQuad)、右平面模型分別進(jìn)行實(shí)例化,在onSurfaceChanged回調(diào)方法中將視口(view port)設(shè)置成回調(diào)方法中返回的寬(width)高(height),onDrawFrame方法會不斷回調(diào)用于刷新當(dāng)前幀。
具有所述的視頻分屏播放裝置的播放終端,如手機(jī),采用FBO技術(shù),在同一個View中,可以動態(tài)控制是將球體模型繪制到左右平面模型關(guān)聯(lián)的紋理上還是直接繪制到真實(shí)的屏幕上,通過這種控制可以低成本高效率地實(shí)現(xiàn)視頻,尤其是360度全景視頻全屏分屏的快速切換,提高了用戶體驗(yàn)。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出的是,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。