本發(fā)明涉及視頻播放的技術領域,更具體地,涉及一種基于D3D播放全景視頻的方法及系統(tǒng)。
背景技術:
全景視頻,即720度或者360度全景視頻,它是在720度或者360度全景的技術之上發(fā)展延伸而來,將靜態(tài)的全景圖片轉化為動態(tài)的視頻圖像,全景視頻可以在拍攝角度上下左右360度范圍內任意觀看動態(tài)視頻,讓用戶有一種身臨其境的感覺。在制作全景視頻時使用一組攝像機在拍攝點周圍同時拍攝360度(或720度)的畫面,并經過后期的圖像拼接后使之能夠在任意時刻無失真地展現(xiàn)拍攝點周圍畫面的視頻。
Direct3D,簡稱D3D,是微軟為提高3D顯示性能而開發(fā)的一套顯示程序接口,它提供了豐富的3D功能庫,是游戲和視頻播放器在Windows操作系統(tǒng)上廣泛采用的標準。
D3D作為操作系統(tǒng)和各種應用軟件(比如視頻播放器)調用顯卡的媒介,對下可以通過顯卡驅動程序操作顯卡,對上可以為操作系統(tǒng)和各種應用程序提供各種顯示用的接口函數和顯示功能。操作系統(tǒng)和應用軟件(比如視頻播放器)只需要調用D3D提供的接口函數和功能就能實現(xiàn)圖像顯示功能,通過這種分工合作,極大的降低了軟件開發(fā)周期和成本。在視頻播放領域,普通的平面視頻及全景視頻都可以利用D3D作為調用顯卡的媒介進行播放。
現(xiàn)有的普通的播放器只能播放平面的視頻圖像,普通播放器的播放流程是:加載視頻—獲取視頻信息—進行視頻分離—解碼視頻幀—顯示解碼后的視頻圖像,按照普通視頻圖像的形式播放全景視頻只能得到不準確的平面視頻圖像的畫面,根本不能達到全景視頻播放的效果。而現(xiàn)有的全景播放器只能播放全景視頻文件,若使用全景播放器播放平面視頻得到的只能是失真的畫面。因為全景播放器播放的是經過拼接處理的以拍攝點為中心的球面投影面上的畫面,目前對這種球面投影不方便存儲,而是常常將球面投影變換存儲為矩形圖像,在全景播放器播放該全景視頻時將存儲的矩形圖像重新映射貼合到球面上,再選取用戶視野可見的部分視頻部分進行播放,要是通過這種方式將平面視頻貼合到球面上進行播放就肯定會造成失真現(xiàn)象。因此,現(xiàn)有技術中還沒有一種既可以播放平面視頻又可以播放全景視頻的方案。
因此,提供一種在播放器中既可以播放平面視頻又可以播放全景視頻的方法是本領域亟待解決的問題。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種基于D3D播放全景視頻的方法及系統(tǒng),解決了現(xiàn)有技術在播放器中不能既支持平面視頻播放又支持全景視頻播放的技術問題。
為了解決上述技術問題,本發(fā)明提出一種基于D3D播放全景視頻的方法,包括:
在播放器中設置用于觸發(fā)全景視頻播放的觸發(fā)指令;
在所述播放器中加載視頻,并對所述視頻進行分離、解碼后獲得視頻圖像;
所述播放器檢測到全景視頻播放請求時,激活所述觸發(fā)指令;
根據所述觸發(fā)指令基于D3D獲取所述視頻圖像并制作成D3D全景紋理矩形圖片,根據所述D3D全景紋理矩形圖片在所述播放器中生成對應的全景映射球面,并將所述D3D全景紋理矩形圖片貼圖到所述全景映射球面上;
檢測所述播放器中預先設置的顯示視窗在所述全景映射球面上的位置,并獲取所述顯示視窗在所述全景映射球面上對應的內容在所述顯示視窗中進行顯示。
進一步地,其中,檢測所述播放器中預先設置的顯示視窗在所述全景映射球面上的位置,并獲取所述顯示視窗在所述全景映射球面上對應的內容在所述顯示視窗中進行顯示,進一步為:
檢測所述播放器中預先設置的顯示視窗在所述全景映射球面上的位置,并獲取所述顯示視窗在所述全景映射球面上對應的內容在所述顯示視窗中進行顯示;
根據光標的移動控制所述顯示視窗在所述全景映射球面上的位置移動,并將所述顯示視窗位置移動后在所述全景映射球面上對應的視頻內容顯示在所述顯示視窗中。
進一步地,其中,根據光標的移動控制所述顯示視窗在所述全景映射球面上的位置移動,并將所述顯示視窗移動后對應的視頻內容顯示在所述顯示視窗中,進一步為:
根據光標的移動控制所述顯示視窗在所述全景映射球面上的歐拉角的變化,根據所述顯示視窗在全景映射球面上歐拉角的變化移動所述顯示視窗在所述全景映射球面上的位置;
將所述顯示視窗位置移動后在所述全景映射球面上對應的視頻內容顯示在所述顯示視窗中。
進一步地,其中,根據所述觸發(fā)指令基于D3D獲取所述視頻圖像并制作成D3D全景紋理矩形圖片,根據所述D3D全景紋理矩形圖片在所述播放器中生成對應的全景映射球面,并將所述D3D全景紋理矩形圖片貼圖到所述全景映射球面上,進一步為:
根據所述觸發(fā)指令基于D3D獲取所述視頻圖像并制作成D3D全景紋理矩形圖片,將所述D3D全景紋理矩形圖片的側邊作為球面半圓弧生成對應的全景映射球面,并將所述D3D全景紋理矩形圖片貼圖到所述全景映射球面上。
進一步地,其中,所述播放器檢測到全景視頻播放請求時,根據所述全景視頻播放請求激活所述觸發(fā)指令,進一步為:
所述播放器檢測到全景視頻的關閉請求時,根據所述關閉請求禁用所述觸發(fā)指令;
基于D3D獲取所述視頻圖像,并將所述顯示視窗在所述視頻圖像上對應位置的視頻圖像內容發(fā)送至播放器進行平面視頻渲染后,顯示在所述顯示視窗內。
另一方面,本發(fā)明還提供一種基于D3D播放全景視頻的系統(tǒng),包括:全景視頻觸發(fā)設置模塊、視頻圖像獲取模塊、全景視頻播放激活模塊、全景視頻貼圖模塊及全景視頻顯示模塊;其中,
所述全景視頻觸發(fā)設置模塊,用于在播放器中設置用于觸發(fā)全景視頻播放的觸發(fā)指令;
所述視頻圖像獲取模塊,用于在所述播放器中加載視頻,并對所述視頻進行分離、解碼后獲得視頻圖像;
所述全景視頻播放激活模塊,用于所述播放器檢測到全景視頻播放請求時,激活所述觸發(fā)指令;
所述全景視頻貼圖模塊,用于根據所述觸發(fā)指令基于D3D獲取所述視頻圖像并制作成D3D全景紋理矩形圖片,根據所述D3D全景紋理矩形圖片在所述播放器中生成對應的全景映射球面,并將所述D3D全景紋理矩形圖片貼圖到所述全景映射球面上;
所述全景視頻顯示模塊,用于檢測所述播放器中預先設置的顯示視窗在所述全景映射球面上的位置,并獲取所述顯示視窗在所述全景映射球面上對應的內容在所述顯示視窗中進行顯示。
進一步地,其中,所述全景視頻顯示模塊,進一步用于:
檢測所述播放器中預先設置的顯示視窗在所述全景映射球面上的位置,并獲取所述顯示視窗在所述全景映射球面上對應的內容在所述顯示視窗中進行顯示;
根據光標的移動控制所述顯示視窗在所述全景映射球面上的位置移動,并將所述顯示視窗位置移動后在所述全景映射球面上對應的視頻內容顯示在所述顯示視窗中。
進一步地,其中,所述全景視頻顯示模塊,進一步用于:
根據光標的移動控制所述顯示視窗在所述全景映射球面上的歐拉角的變化,根據所述顯示視窗在全景映射球面上歐拉角的變化移動所述顯示視窗在所述全景映射球面上的位置;
將所述顯示視窗位置移動后在所述全景映射球面上對應的視頻內容顯示在所述顯示視窗中。
進一步地,其中,全景視頻貼圖模塊,進一步用于:
根據所述觸發(fā)指令基于D3D獲取所述視頻圖像并制作成D3D全景紋理矩形圖片,將所述D3D全景紋理矩形圖片的側邊作為球面半圓弧生成對應的全景映射球面,并將所述D3D全景紋理矩形圖片貼圖到所述全景映射球面上。
進一步地,其中,所述全景視頻播放激活模塊,進一步用于:
所述播放器檢測到全景視頻的關閉請求時,根據所述關閉請求禁用所述觸發(fā)指令;
基于D3D獲取所述視頻圖像,并將所述顯示視窗在所述視頻圖像上對應位置的視頻圖像內容發(fā)送至播放器進行平面視頻渲染后,顯示在所述顯示視窗內。
與現(xiàn)有技術相比,本發(fā)明的基于D3D播放全景視頻的方法及系統(tǒng),實現(xiàn)了如下的有益效果:
(1)本發(fā)明所述的基于D3D播放全景視頻的方法及系統(tǒng),利用D3D設置在播放器中觸發(fā)或者關閉全景視頻的控制指令,實現(xiàn)了根據用戶請求在播放器中進行全景視頻與平面視頻的切換播放。
(2)本發(fā)明所述的基于D3D播放全景視頻的方法及系統(tǒng),通過設置全景視頻播放的控制指令,在播放器中實現(xiàn)既支持全景視頻播放,又支持平面視頻播放,提升了用戶使用播放器的觀看體驗。
(3)本發(fā)明所述的基于D3D播放全景視頻的方法及系統(tǒng),能夠根據用戶的請求進行相對應視頻形式的播放,避免了因為視頻播放模式不對應帶來的視頻失真現(xiàn)象。
當然,實施本發(fā)明的任一產品必不特定需要同時達到以上所述的所有技術效果。
通過以下參照附圖對本發(fā)明的示例性實施例的詳細描述,本發(fā)明的其它特征及其優(yōu)點將會變得清楚。
附圖說明
被結合在說明書中并構成說明書的一部分的附圖示出了本發(fā)明的實施例,并且連同其說明一起用于解釋本發(fā)明的原理。
圖1為本發(fā)明實施例1中所述的基于D3D播放全景視頻的方法的流程示意圖;
圖2為本發(fā)明實施例1中所述的存儲為矩形圖片的全景視頻圖像重新映射到一個球體的球面的示意圖;
圖3A為本發(fā)明實施例2中所述的基于D3D播放全景視頻的方法的流程示意圖;
如圖3B為本發(fā)明實施例2中所述根據光標移動控制顯示視窗在全景映射球面上歐拉角變化的示意圖;
圖4為本發(fā)明實施例3中所述的基于D3D播放全景視頻的系統(tǒng)的結構示意圖。
具體實施方式
現(xiàn)在將參照附圖來詳細描述本發(fā)明的各種示例性實施例。應注意到:除非另外具體說明,否則在這些實施例中闡述的部件和步驟的相對布置、數字表達式和數值不限制本發(fā)明的范圍。
以下對至少一個示例性實施例的描述實際上僅僅是說明性的,決不作為對本發(fā)明及其應用或使用的任何限制。
對于相關領域普通技術人員已知的技術、方法和設備可能不作詳細討論,但在適當情況下,所述技術、方法和設備應當被視為說明書的一部分。
在這里示出和討論的所有例子中,任何具體值應被解釋為僅僅是示例性的,而不是作為限制。因此,示例性實施例的其它例子可以具有不同的值。
應注意到:相似的標號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步討論。
實施例1
如圖1所示,為本實施例所述的基于D3D播放全景視頻的方法的流程示意圖。本實施例基于D3D設置全景視頻與平面視頻的切換控制指令,使得播放器既支持全景視頻的播放,又支持對普通平面視頻的播放,提升了用戶體驗。本實施例中所述的基于D3D播放全景視頻的方法包括以下步驟:
步驟101、在播放器中設置用于觸發(fā)全景視頻播放的觸發(fā)指令。在播放器能夠正常播放平面視頻,設置所述觸發(fā)指令后,在接收到用戶的全景視頻播放請求后,通過激活所述觸發(fā)指令觸發(fā)全景視頻播放系統(tǒng)進行全景視頻播放。能夠在普通播放器上實現(xiàn)既支持普通的平面視頻播放,又支持全景視頻播放。
步驟102、在所述播放器中加載視頻,并對所述視頻進行分離、解碼后獲得視頻圖像。
步驟103、所述播放器檢測到全景視頻播放請求時,激活所述觸發(fā)指令。
基于D3D設置有用戶信息的輸入接口,用于接收用戶的請求或指令信息反饋給播放器進行處理。
步驟104、根據所述觸發(fā)指令基于D3D獲取所述視頻圖像并制作成D3D全景紋理矩形圖片,根據所述D3D全景紋理矩形圖片在所述播放器中生成對應的全景映射球面,并將所述D3D全景紋理矩形圖片貼圖到所述全景映射球面上。
D3D全景紋理,是一種用于在3D物體表面進行紋理貼圖的數據結構,通過為存儲的視頻圖像每個頂點指定一組紋理坐標,表明這些頂點在貼圖面中的坐標位置,以建立起存儲的視頻圖像與所述貼圖面的映射關系。
目前還沒有全景視頻的特定存儲格式,而全景視頻圖像在球面上的投影也不方便存儲,一般都是將拍攝到的拍攝點周圍360度(或720度)的畫面經過后期圖像拼接成平面矩形圖片存儲。而在全景視頻播放器上播放全景視頻的第一步就是將變換后的矩形圖片重新映射到一個球面上。如圖2所示,為存儲為矩形圖片的全景視頻圖像201重新映射到一個球體202的球面上的示意圖。全景視頻圖像201中的上邊上的點N1、N2、N3、N4、N5點都映射到球體202的上頂點N點,全景視頻圖像201中的下邊上的點S1、S2、S3、S4、S5點都映射到球體202的下頂點S點,全景視頻圖像201的左右側邊中點A、A1及左右側邊中點連線上的點B、C、D分別映射到所示球體202的0經度的經線上,且A和A1對應球體202上的同一點。
步驟105、檢測所述播放器中預先設置的顯示視窗在所述全景映射球面上的位置,并獲取所述顯示視窗在所述全景映射球面上對應的內容在所述顯示視窗中進行顯示。
在播放器中的顯示視窗是固定的,每次只能顯示全景視頻上特定視角范圍內的視頻內容。因此,通過檢測所述顯示視窗在所述全景映射球面上的位置,以獲取所述顯示視窗在全景映射球面上對應范圍內的視頻內容進行顯示。
本實施例所述的基于D3D播放全景視頻的方法,利用D3D設置在播放器中觸發(fā)或者關閉全景視頻的控制指令,實現(xiàn)了根據用戶請求在播放器中進行全景視頻與平面視頻的切換播放的效果。
實施例2
如圖3A所示,為本實施例所述的基于D3D播放全景視頻的方法的流程示意圖。本實施例在實施例1的基礎上說明了全景視頻與普通平面視頻切換播放的具體內容。本實施例所述的基于D3D播放全景視頻的方法的步驟如下:
步驟301、在播放器中設置用于觸發(fā)全景視頻播放的觸發(fā)指令。
步驟302、在所述播放器中加載視頻,并對所述視頻進行分離、解碼后獲得視頻圖像。
步驟303、所述播放器檢測到全景視頻播放請求時,激活所述觸發(fā)指令。
步驟304、根據所述觸發(fā)指令基于D3D獲取所述視頻圖像并制作成D3D全景紋理矩形圖片,將所述D3D全景紋理矩形圖片的側邊作為球面半圓弧生成對應的全景映射球面,并將所述D3D全景紋理矩形圖片貼圖到所述全景映射球面上。
步驟305、檢測所述播放器中預先設置的顯示視窗在所述全景映射球面上的位置,并獲取所述顯示視窗在所述全景映射球面上對應的內容在所述顯示視窗中進行顯示;
根據光標的移動控制所述顯示視窗在所述全景映射球面上的位置移動,并將所述顯示視窗位置移動后在所述全景映射球面上對應的視頻內容顯示在所述顯示視窗中。
步驟306、根據光標的移動控制所述顯示視窗在所述全景映射球面上的歐拉角的變化,根據所述顯示視窗在全景映射球面上歐拉角的變化移動所述顯示視窗在所述全景映射球面上的位置。
歐拉角是用來確定定點轉動剛體位置的一組(3個)獨立角參量,由章動角、旋進角(即進動角)和自轉角組成,以剛體外的原點設定o-xyz坐標軸時,章動角、旋進角(即進動角)和自轉角分別為所述剛體與原點的連線與數值坐標軸0z的夾角,與數值坐標軸0x的夾角,及與數值坐標軸0y的夾角。
如圖3B所示,為本實施例所述根據光標移動控制顯示視窗在全景映射球面上歐拉角變化的示意圖。在全景映射球面中的球體半徑r固定,因此,只需要確定上述歐拉角中的兩個就能確定所述顯示視窗310在球面上的位置。在播放器中只需預先設置光標上下左右移動方向及距離調節(jié)全景映射球面上顯示視窗上對應歐拉角中章動角θ及進動角φ變化的幅度,當用戶操作移動光標時調整所述顯示視窗的歐拉角進而引起在全景映射球面上位置發(fā)生變化。
步驟307、將所述顯示視窗位置移動后在所述全景映射球面上對應的視頻內容顯示在所述顯示視窗中。
步驟308、所述播放器檢測到全景視頻的關閉請求時,根據所述關閉請求禁用所述觸發(fā)指令;基于D3D獲取所述視頻圖像,并將所述顯示視窗在所述視頻圖像上對應位置的視頻圖像內容進行平面視頻渲染后,顯示在所述顯示視窗內。
當用戶發(fā)現(xiàn)播放的視頻不是全景視頻,而是普通平面視頻時,如果還是按照全景視頻播放的機制進行播放,得到的會是失真的視頻圖像。通過設置根據用戶關閉全景視頻播放請求禁用所述觸發(fā)全景視頻播放的觸發(fā)指令,進而采用普通平面視頻播放機制進行播放,實現(xiàn)了在同一播放器內既支持普通平面視頻播放又支持全景視頻播放的效果,提升了用戶使用播放器的觀看體驗。
實施例3
如圖4所示,為本實施例所述的基于D3D播放全景視頻的系統(tǒng),該系統(tǒng)可用于實現(xiàn)上述實施例中所述的基于D3D播放全景視頻的方法。所述系統(tǒng)包括:全景視頻觸發(fā)設置模塊401、視頻圖像獲取模塊402、全景視頻播放激活模塊403、全景視頻貼圖模塊404及全景視頻顯示模塊405。
其中,所述全景視頻觸發(fā)設置模塊401與所述視頻圖像獲取模塊402相藕接,用于在播放器中設置用于觸發(fā)全景視頻播放的觸發(fā)指令;
所述視頻圖像獲取模塊402與所述全景視頻觸發(fā)設置模塊401及所述全景視頻播放激活模塊403相藕接,用于在所述播放器中加載視頻,并對所述視頻進行分離、解碼后獲得視頻圖像;
所述全景視頻播放激活模塊403與所述視頻圖像獲取模塊402及所述全景視頻貼圖模塊404相藕接,用于所述播放器檢測到全景視頻播放請求時,激活所述觸發(fā)指令;
所述全景視頻貼圖模塊404與所述全景視頻播放激活模塊403及所述全景視頻顯示模塊405相藕接,用于根據所述觸發(fā)指令基于D3D獲取所述視頻圖像并制作成D3D全景紋理矩形圖片,根據所述D3D全景紋理矩形圖片在所述播放器中生成對應的全景映射球面,并將所述D3D全景紋理矩形圖片貼圖到所述全景映射球面上;
所述全景視頻顯示模塊405與所述全景視頻貼圖模塊404相藕接,用于檢測所述播放器中預先設置的顯示視窗在所述全景映射球面上的位置,并獲取所述顯示視窗在所述全景映射球面上對應的內容在所述顯示視窗中進行顯示。
進一步地,其中,所述全景視頻顯示模塊405進一步用于:
檢測所述播放器中預先設置的顯示視窗在所述全景映射球面上的位置,并獲取所述顯示視窗在所述全景映射球面上對應的內容在所述顯示視窗中進行顯示;
根據光標的移動控制所述顯示視窗在所述全景映射球面上的位置移動,并將所述顯示視窗位置移動后在所述全景映射球面上對應的視頻內容顯示在所述顯示視窗中。
所述全景視頻顯示模塊405還用于:
根據光標的移動控制所述顯示視窗在所述全景映射球面上的歐拉角的變化,根據所述顯示視窗在全景映射球面上歐拉角的變化移動所述顯示視窗在所述全景映射球面上的位置;
將所述顯示視窗位置移動后在所述全景映射球面上對應的視頻內容顯示在所述顯示視窗中。
全景視頻貼圖模塊404進一步用于:
根據所述觸發(fā)指令基于D3D獲取所述視頻圖像并制作成D3D全景紋理矩形圖片,將所述D3D全景紋理矩形圖片的側邊作為球面半圓弧生成對應的全景映射球面,并將所述D3D全景紋理矩形圖片貼圖到所述全景映射球面上。
所述全景視頻播放激活模塊403進一步用于:
所述播放器檢測到全景視頻的關閉請求時,根據所述關閉請求禁用所述觸發(fā)指令;
基于D3D獲取所述視頻圖像,并將所述顯示視窗在所述視頻圖像上對應位置的視頻圖像內容發(fā)送至播放器進行平面視頻渲染后,顯示在所述顯示視窗內。
通過以上各個實施例可知,本發(fā)明的基于D3D播放全景視頻的方法及系統(tǒng)存在的有益效果是:
(1)本發(fā)明所述的基于D3D播放全景視頻的方法及系統(tǒng),利用D3D設置在播放器中觸發(fā)或者關閉全景視頻的控制指令,實現(xiàn)了根據用戶請求在播放器中進行全景視頻與平面視頻的切換播放。
(2)本發(fā)明所述的基于D3D播放全景視頻的方法及系統(tǒng),通過設置全景視頻播放的控制指令,在播放器中實現(xiàn)既支持全景視頻播放,又支持平面視頻播放,提升了用戶使用播放器的觀看體驗。
(3)本發(fā)明所述的基于D3D播放全景視頻的方法及系統(tǒng),能夠根據用戶的請求進行相對應視頻形式的播放,避免了因為視頻播放模式不對應帶來的視頻失真現(xiàn)象。
本領域內的技術人員應明白,本發(fā)明的實施例可提供為方法、裝置、或計算機程序產品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
雖然已經通過例子對本發(fā)明的一些特定實施例進行了詳細說明,但是本領域的技術人員應該理解,以上例子僅是為了進行說明,而不是為了限制本發(fā)明的范圍。本領域的技術人員應該理解,可在不脫離本發(fā)明的范圍和精神的情況下,對以上實施例進行修改。本發(fā)明的范圍由所附權利要求來限定。