專利名稱:一種實現(xiàn)媒體三維播放的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明設(shè)計視頻處理技術(shù)領(lǐng)域,具體的講,涉及一種實現(xiàn)媒體三維播放的 方法及裝置。
背景技術(shù):
目前,無論在計算機上,還是在數(shù)字電視、PDA、手機、MP4等等終端上都 可以觀看視頻。特別是在互聯(lián)網(wǎng)進入千家萬戶的今天,網(wǎng)絡(luò)和網(wǎng)絡(luò)視頻成為多 媒體信息傳播的全新渠道,各種各樣的視頻內(nèi)容,無論是由普通用戶制作的個 人視頻,還是由專業(yè)媒體制作的視頻節(jié)目,不僅能夠本地觀看,還能夠讓世界 各地的互聯(lián)網(wǎng)用戶隨時隨地通過網(wǎng)絡(luò)下載或者在線播放觀看。
隨著用戶需求的提髙,視頻的展現(xiàn)效果也變得多樣化。目前在視頻節(jié)目中, 不僅可以插播廣告,還可以嵌入三維圖像。例如在播放天氣預(yù)報視頻時,在視 頻畫面中出現(xiàn)轉(zhuǎn)動的地球的三維畫面。但這種三維圖像是在前期視頻編輯時就 制作到視頻中去的, 一旦視頻制作完成后就無法對三維畫面的顯示進行改變, 也無法與用戶進行互動。
另,用戶在觀看視頻時,可以同時打開多個視頻,按用戶興趣或需求在不 同視頻之間切換。對于視頻切換的實現(xiàn)方式,目前主要有如下幾種-(1)直接在視頻播放器中切換視頻
這種方式切換方式展現(xiàn)出來的效果基本上類似于看電視時的換臺效果。看
電視時的換臺效果為短暫黑屏(或停留在原視頻的最后一幀)今開始播放下 一個頻道。目前視頻播放器的切換流程大多是停止當前視頻—在下一個視 頻緩沖吋播放廣告—開始播放下一視頻。
在畫面展現(xiàn)的效果上,上述直接在視頻播放器中切換視頻的缺陷主要是視 頻的切換不平滑,讓操作的用戶感覺太突兀。并且在下一視頻緩沖期間,用戶
只能被迫停留在一個廣告畫面上,無奈的等待。而這種強制的廣告送達對用戶 來說,因為簡單粗暴其宣傳效果也會大打折扣。
(2) 平滑無縫切換
在申請?zhí)枮?00610063668.6的中國專利申請中公開了發(fā)明名稱為"一種計 算機的多視頻播放方法及裝置"的發(fā)明專利申請,在此以引用的方式將其全部 內(nèi)容合并于此。該發(fā)明專利申請中是通過D3D接口將兩路經(jīng)解碼的視頻顯示到 同一屏幕的不同視窗上,該專利申請的技術(shù)實現(xiàn)了多個視頻之間的平滑無縫切
換,但并不能實現(xiàn)視頻的三維播放效果。
(3) 利用Flash技術(shù)實現(xiàn)不同的視頻及場景切換時的三維效果 利用Flash技術(shù)能夠各種場景切換效果,用戶體驗也不錯。但是在Flash中
實現(xiàn)視頻的三維切換,有如下幾個重大缺陷-
1) Flash只能播放專有格式視頻
Flash只支持其特有視頻格式,S卩FLV視頻的播放,而其他各種主流視頻格 式,包括麗V、 Real、 MPEG-4等等格式的視頻都無法直接在Flash中播放。
因此視頻服務(wù)提供商在視頻內(nèi)容的制作上需要花費更多的時間,將其視頻 通過特有的轉(zhuǎn)碼工具,將視頻轉(zhuǎn)成FLV格式后才能在Flash中播放。
此外,還需要更多的存儲空間來存儲不同格式的視頻文件。
更重要的是,目前FLV的視頻質(zhì)量還很難達到高清標準,因此這種轉(zhuǎn)換會造 成視頻畫面質(zhì)量的下降。
2) Flash在顯示三維圖形時的效率非常差
由于Flash主要是為顯示二維動畫而開發(fā)的工具。因此缺少大量的三維場景 和模型顯示所需要的算法支持,比如投影算法、實時光源等等。因此在Flash中 顯示三維圖形只能單獨編寫算法或使用開源共享算法,開發(fā)效率低下,并且算 法的性能無從保證。
此外Flash中無法使用由專業(yè)的三維建模軟件,如3DS Max、 Maya等等設(shè)計 的復(fù)雜的三維模型,如人體、汽車等等。
因此目前在Flash中能實現(xiàn)的三維效果都是非常簡單的三維物體,或者是利 用二維圖形的變化(如圖片的放大縮小)來模擬三維效果,無法平滑的展現(xiàn)相 對復(fù)雜的三維模型和效果。
基于以上原因,目前Flash的三維切換效果主要是用于圖片的切換,或者 是時長較短、畫面質(zhì)量不高的FLV視頻切換上,很難被應(yīng)用到對視頻格式較多、 畫面質(zhì)量高、時間長的視頻的應(yīng)用當中。
發(fā)明內(nèi)容
本發(fā)明的目的之一在于提供一種實現(xiàn)媒體三維播放的方法,以實現(xiàn)視頻的 三維播放效果。
相應(yīng)地,本發(fā)明的另一目的在于提供一種實現(xiàn)媒體三維播放的裝置。 為了實現(xiàn)上述目的,本發(fā)明實施例提供一種實現(xiàn)媒體三維播放的方法,該 方法包括
根據(jù)三維模型顯示配置信息生成三維模型繪制數(shù)據(jù); 讀取本地或遠程的至少一個媒體源文件;
將所述至少一個媒體源文件進行解碼,各自生成音頻信號和視頻畫面信號 兩路數(shù)據(jù);
將解碼生成的音頻信號中的至少一路數(shù)據(jù)播放輸出;
根據(jù)紋理顯示配置信息獲取包括所述視頻畫面在內(nèi)的多個顯示對象,并將 該多個顯示對象作為三維模型的指定位置的紋理,生成紋理繪制數(shù)據(jù);以及
接收所述三維模型繪制數(shù)據(jù)和紋理繪制數(shù)據(jù),調(diào)用圖形引擎繪制三維模型 和紋理以通過顯示界面進行顯示。
本發(fā)明實施例還提供一種實現(xiàn)媒體三維播放的裝置,該裝置包括 三維建模模塊,用于根據(jù)三維模型顯示配置信息生成三維模型繪制數(shù)據(jù); 媒體源文件讀取模塊,用于讀取本地或遠程的至少一個媒體源文件; 音視頻解碼模塊,用于將所述至少一個媒體源文件進行解碼,各自生成音 頻信號和視頻畫面信號兩路數(shù)據(jù);
音頻展現(xiàn)模塊,將音視頻解碼模塊生成的音頻信號中的至少一路數(shù)據(jù)播放
輸出;
紋理繪制模塊,用于根據(jù)紋理顯示配置信息獲取包括所述視頻畫面在內(nèi)的 多個顯示對象,并將該多個顯示對象作為三維模型的指定位置的紋理,生成紋 理繪制數(shù)據(jù);以及
畫面展現(xiàn)模塊,用于接收所述三維模型繪制數(shù)據(jù)和紋理繪制數(shù)據(jù),調(diào)用圖 形弓I擎繪制三維模型和紋理以通過顯示界面進行顯示。
本發(fā)明利用圖形引擎構(gòu)造三維空間并在三維空間三維模型中展示包括視頻 畫面等媒體在內(nèi)的多個顯示單元,從而實現(xiàn)媒體的三維播放效果。
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本申請的一部分, 并不構(gòu)成對本發(fā)明的限定。在附圖中-
圖l為本發(fā)明實施例的實現(xiàn)媒體三維播放的裝置的結(jié)構(gòu)示意圖; 圖2為本發(fā)明實施例中將兩個視頻幀數(shù)據(jù)分別繪制到立方體的兩個面上的
示意圖3為本發(fā)明實施例的實現(xiàn)視頻三維播放的流程示意圖4為圖3中界面初始化的流程圖5為圖3中三維模型繪制的詳細流程示意圖6為圖3中紋理繪制的詳細流程示意圖; 圖7為圖3中界面交互事件處理的詳細流程示意圖8為本發(fā)明實施例中以立方體旋轉(zhuǎn)效果切換視頻和廣告為例的模型和紋 理繪制示意圖9為圖8對應(yīng)的立方體旋轉(zhuǎn)到B面后的界面示意圖10為本發(fā)明實施例中以在視頻上疊加三維物體為例的模型和紋理繪制示 意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖對本發(fā)明的 具體實施例進行詳細說明。在此,本發(fā)明的示意性實施例及其說明用于解釋本 發(fā)明,但并不作為對本發(fā)明的限定。
在本發(fā)明實施例中,所要實現(xiàn)的是在多視頻、視頻與圖片、視頻與Flash 等等一起播放時,能夠以平滑的、可交互的三維效果來切換不同視頻、視頻與 圖片、視頻與Flash。
所謂三維效果是指不同的視頻、圖片或Flash在切換時,能夠以虛擬三維 場景的變化(如一個視頻由遠而近出現(xiàn)在界面上,與此同時當前播放的視頻由 近而遠漸漸消失)或三維物體的運動(如立方體或圓環(huán)的旋轉(zhuǎn)、翻滾等等)展 現(xiàn)出來。
本發(fā)明實施例中是以在計算機上實現(xiàn)視頻的三維播放為例來說明本發(fā)明的 技術(shù)方案。但本發(fā)明并不限于在計算機上實現(xiàn)視頻的三維播放,還可在機頂盒、 手機、MP4等其他能夠進行相應(yīng)圖形處理的終端上實現(xiàn)視頻的三維播放。
實施例1
本實施例提供一種實現(xiàn)媒體三維播放的裝置。為了實現(xiàn)視頻的三維播放效 果,本發(fā)明實施例主要要解決的技術(shù)問題是
1) 在計算機上繪制虛擬三維的空間,并在虛擬三維空間中繪制三維模型(包 括三維場景或三維物理);
2) 將各種格式的視頻、圖片和Flash進行解碼,并將解碼后的畫面作為紋 理顯示到三維空間里;以及
3) 在虛擬三維空間中,捕獲界面事件(如用戶操作動作、界面單元事件、 計時器事件等),并響應(yīng)界面事件實時更新顯示。
如上技術(shù)問題可以通過圖1所示的本發(fā)明實施例的媒體三維播放裝置來實 現(xiàn),該裝置主要包括如下結(jié)構(gòu)-
圖形引擎、圖形引擎適配模塊、畫面展現(xiàn)模塊、三維建模模塊、紋理繪制 模塊、界面管理模塊、媒體源讀取模塊、音視頻解碼模塊以及音頻展現(xiàn)模塊。 下面對這些模塊進行說明-
(1)界面管理模塊
所述界面管理模塊用于負責用戶界面的定義以及負責定義如何響應(yīng)界面交 互事件(如用戶的操作等)。因此界面管理模塊又包括界面定義模塊及界面交 互模塊,其中
所述界面定義模塊是為了便于統(tǒng)一整個用戶界面。各種媒體內(nèi)容在一個集 中的三維交互界面中同時顯示時,不但需要協(xié)調(diào)各種內(nèi)容的同步、分步顯示, 并且還需要處理用戶交互、響應(yīng)用戶動作等等。因此需要預(yù)先定義模板、播放 計劃和腳本,以對視頻內(nèi)容和其他媒體信息進行控制??梢酝ㄟ^界面定義模塊 利用XML配置文件來對預(yù)先定義的模板、播放計劃和腳本等進行配置。當然所 述配置也可以通過手動配置或通過輸入命令行來實現(xiàn)。
所述界面定義模塊以XML格式的界面定義文件(配置文件)描述用戶界面
配置,包括用戶界面的布局,規(guī)格(如用于顯示的文字、圖片、視頻、Flash、 三維模型等界面單元的標識號、大小規(guī)格、透明度Alpha值等),以及各界面 單元的資源文件地址等的描述。由于要實現(xiàn)視頻的三維顯示,主要實現(xiàn)三維模 型的顯示及三維模型上的繪制紋理的顯示,因此,也可以說,本實施例中的界 面定義模塊通過界面定義文件定義的配置信息包括三維模型顯示配置信息(如
三維模型的布局、規(guī)格、數(shù)據(jù)模型文件地址等)及紋理顯示配置信息(如紋理 布局、規(guī)格、媒體源文件地址、圖片文件地址等)。此外,該界面定義模塊在 界面定義文件中,還定義如何處理用戶操作及界面事件,具體地,該界面定義 模塊可定義界面事件交互配置信息,以指示界面交互模塊將監(jiān)測并響應(yīng)哪些用 戶操作或界面單元事件,以及用于響應(yīng)用戶操作的事件處理方法。
所述界面交互模塊是根據(jù)界面定義模塊的要求,監(jiān)測并響應(yīng)各種界面事件。
其中主要界面事件類型包括用戶交互操作(如鼠標移動、點擊、鍵盤按鍵等
等);界面單元事件(如視頻播放完畢、視頻緩沖開始與結(jié)束等等);計時器 (Timer)事件(如16點整、每隔10分鐘等等)。
(2) 三維建模模塊
三維建模模塊的作用是計算出所需要的三維虛擬圖形,包括各種三維物體 形狀的三維模型繪制數(shù)據(jù)。以一個立方體為例,三維建模模塊可根據(jù)給定的長 寬高尺寸、立方體的定位點等參數(shù),計算出此立方體的三維模型繪制數(shù)據(jù),包 括六個面所需要的12個三角形數(shù)據(jù)以及中心點的X、 Y和Z坐標(如果立方體 被放置在二維平面上,則只有X、 Y坐標)等。且畫面展現(xiàn)模塊將通過圖形引擎 適配器調(diào)用圖形引擎按照三維模型繪制數(shù)據(jù)將此立方體繪制到所需要的位置上。
本發(fā)明實施例的三維建模模塊在用戶界面初始化的時候,會讀取界面定義 模塊中定義的三維模型顯示配置信息,即按照界面定義模塊中對三維模型的要 求計算三維模型繪制數(shù)據(jù),或者按照界面定義模塊中提供的三維模型文件地址 讀取通過三維模型導入模塊導入的三維模型文件中的三維模型繪制數(shù)據(jù),并將 這些數(shù)據(jù)輸出給畫面展現(xiàn)模塊,用于界面的繪制。但是在用戶界面交互的過程 中,將根據(jù)界面事件的發(fā)生實時計算該界面事件發(fā)生后的三維模型繪制數(shù)據(jù), 即當各種界面事件發(fā)生(如用戶按鍵等等)時,三維建模模塊會接收界面交互 模塊中的配置要求,重新對各個界面單元的三維模型繪制數(shù)據(jù)進行計算,并將 新的數(shù)據(jù)輸出給畫面展現(xiàn)模塊繪制更新后的界面。
(3) 三維模型導入模塊
對于相對復(fù)雜的三維場景或模型,如人體、卡通人物、汽車等實際物體的 虛擬模型都是用專業(yè)的三維建模軟件(常用的有3DS Max、 Maya、 Poser等等) 建立三維模型。該三維模型導入模塊負責按照界面定義模塊的要求到指定位置 讀取專業(yè)三維建模軟件輸出的三維模型文件(如^X模型文件)。
(4) 媒體源讀取模塊
所述媒體源讀取模塊負責按照界面定義模塊中的媒體資源地址,讀取媒體 資源(包括視頻文件、視頻流或Flash等)。媒體源可以是文件形式,也可以
是流(Streaming)的形式;可以存儲在本地文件系統(tǒng),也可以存儲在網(wǎng)絡(luò)中(以 URL地址標識)。
(5) 音視頻解碼模塊
所述音視頻解碼模塊主要負責將媒體源讀取模塊讀取的各種格式的音視頻 和Flash進行解碼,并將解碼后的視頻數(shù)據(jù)輸出給紋理繪制模塊。
由于視頻內(nèi)容數(shù)據(jù)量非常大,因此目前通過網(wǎng)絡(luò)傳輸或傳播的視頻一般都 是經(jīng)過編碼、壓縮之后,再以文件或流的形式傳輸?shù)?,由于采用的編碼和壓縮 的標準不同,因此在解碼的時候就需要特定的解碼器才能將視頻還原成可以顯 示的畫面。
所述音視頻解碼模塊讀取媒體源讀取模塊傳輸過來的各種格式(如WMV、 Real、 MPEG-2、 MPEG-4、 SWF等格式)的一個或多個媒體資源(如視頻文件或者 視頻流),根據(jù)格式調(diào)用相應(yīng)的音視頻解碼器(Codec),將各個媒體資源解碼 還原成音頻和視頻兩路數(shù)據(jù)。解碼完成后輸出的音頻和視頻數(shù)據(jù)將被分別輸出 聲音輸出設(shè)備(音頻展現(xiàn)模塊)和紋理繪制模塊。
視頻文件或視頻流在音視頻解碼模塊中被解碼還原的視頻數(shù)據(jù),實際上就 是以一定速率連續(xù)播放的圖片(即幀)數(shù)據(jù),如每秒25幀。也就是說,被輸出到 紋理繪制模塊的視頻數(shù)據(jù)其實就是這些連續(xù)的幀數(shù)據(jù)。
本實施例中音視頻解碼模塊默認支持包括簡V、 MPEG 2/3/4、 Real等系列 的視頻格式,也支持SWF Flash文件。此外還可以通過擴展編碼插件的方式支 持更多更新格式的音視頻解碼。
(6) 音頻展現(xiàn)模塊
所述音頻展現(xiàn)模塊負責將音視頻解碼模塊輸出的至少一路音頻信號進行播 放輸出。該音頻展現(xiàn)模塊可以為計算機或智能終端的聲音設(shè)備,如聲卡等。
此外,所述音頻展現(xiàn)模塊還能夠根據(jù)界面定義模塊和界面交互模塊的要求 對多路音頻信號進行控制,如將一路音頻信號進行播放,將其他音頻信號控制 為靜音等。
(7) 紋理繪制模塊
所述紋理繪制模塊不但能夠讀取圖片,還負責將音視頻解碼模塊輸出的視 頻畫面數(shù)據(jù)作為三維模型的紋理按照界面定義模塊的要求繪制到三維模型的特 定三角形(或由一組三角形組成的平面)上。
紋理繪制模塊接收音視頻解碼模塊發(fā)送過來的視頻幀數(shù)據(jù)(圖片數(shù)據(jù)), 或者到指定位置讀取圖片文件,根據(jù)界面定義模塊的要求,將這些圖片作為三 維模型的指定位置的紋理,生成紋理繪制數(shù)據(jù)。利用畫面展現(xiàn)模塊所提供的接 口,可以將這些圖片作為紋理繪制到構(gòu)成了三維場景或物體的相應(yīng)的三角形上。 舉個例子來說,紋理繪制模塊可以把音視頻解碼模塊發(fā)送過來的兩個視頻幀數(shù)
據(jù)(視頻1和視頻2)分別繪制到立方體的A面和B面上,如圖2所示。圖2中, 視頻l為影片視頻,視頻2為廣告圖像或視頻。
(8) 畫面展現(xiàn)模塊
所述畫面展現(xiàn)模塊負責按照三維建模模塊和紋理繪制模塊給定的界面數(shù)據(jù) (三維模型繪制數(shù)據(jù)和紋理繪制數(shù)據(jù)),通過圖形引擎適配器模塊調(diào)用圖形引擎 的API接口,繪制用戶界面。
畫面展現(xiàn)模塊會按照一定的幀率(幀率),如25幀/秒(即每秒刷新顯示2 5次)不斷的更新整個用戶界面的顯示。這樣只要在捕獲用戶的操作后,三維建 模模塊和/或紋理繪制模塊就可以計算出操作之后顯示的變化,即計算出操作之 后所有界面單元(包括視頻、三維場景或物體等等)應(yīng)該如何顯示,畫面展現(xiàn) 模塊調(diào)用三維建模模塊和/或紋理繪制模塊的數(shù)據(jù),通過圖形引擎依次更新顯 示。由此可在三維空間中,捕獲用戶操作或界面操作,實時更新顯示。
例如,通過界面交互模塊來捕獲用戶的鍵盤、鼠標的輸入、點擊等動作事 件。界面交互模塊在捕獲到用戶事件后,將根據(jù)界面定義模塊中預(yù)先定義好的 事件處理邏輯,將事件處理的結(jié)果分別輸出到三維建模模塊或紋理繪制模塊之 中,并最終對畫面展現(xiàn)模塊的更新顯示產(chǎn)生影響。比如在界面定義模塊中可定 義兩個鍵盤熱鍵"L"和"R",當用戶按"L"鍵時,界面上的三維立方體向左
旋轉(zhuǎn)l度;當用戶按"R"鍵時,界面上的三維立方體向右旋轉(zhuǎn)l度。界面交互 模塊將負責監(jiān)控用戶的輸入,當用戶按"L"鍵時,將觸發(fā)界面交互模塊處理此 事件,界面交互模塊將調(diào)用三維建模模塊通知該立方體向左旋轉(zhuǎn)1度;按照類 似的方法,用戶每次按"L"或"R"鍵時,都將觸發(fā)界面交互模塊的相應(yīng)處理 邏輯,界面交互模塊會將每次事件處理結(jié)果告知三維建模模塊,三維建模模塊 將不斷的將新的模型參數(shù)發(fā)送給畫面展現(xiàn)模塊,畫面展現(xiàn)模塊會根據(jù)更新后的 模型參數(shù)重新繪制界面上的三維立方體。此時,用戶就能夠看到隨之自己不斷 的按下鍵盤的"L"和"R"鍵,界面上的三維立方體會左右旋轉(zhuǎn)。該例子中, 因為立方體某一個面上的視頻或其他圖形是被作為立方體的紋理繪制上去,因 此會自動根據(jù)立方體的旋轉(zhuǎn)而旋轉(zhuǎn)。 (9)圖形引擎
本實施例中所述圖形引擎為計算機上主流的3D圖形引擎,包括DirectX和 OpenGL等,所述圖形引擎用于構(gòu)造一個虛擬的三維空間,并在這個虛擬的三維 空間中繪制各種用于展示視頻、圖片和Flash等顯示對象的三維虛擬場景或三 維虛擬物體。
DirectX和OpenGL等3D圖形引擎是目前主流的圖形引擎,主要包括了大量 的API應(yīng)用程序開發(fā)接口 。利用這些接口 ,能夠在計算機上實時渲染出各種3D 場景和模型。目前主要應(yīng)用在計算機游戲、網(wǎng)絡(luò)虛擬社區(qū)等等領(lǐng)域。其中Dire ctX是微軟平臺,包括各種PC版本的Microsoft Windows操作系統(tǒng)、用于智能 設(shè)備的Windows CE操作系統(tǒng)中的最普及的圖形引擎。而OpenGL則是各種Linu x/Unix操作系統(tǒng),包括PC、機頂盒等設(shè)備都支持的圖形引擎。
這些圖形引擎都是通過三角形的繪制來實現(xiàn)三維物體的顯示的,并且可以 在三角形上貼圖,即繪制紋理。由于目前所有的顯卡都支持這些圖形引擎,因 此利用顯卡的圖形芯片和顯示存儲,能夠在計算機上以每秒幾百萬的速度繪制 三角形,每秒幾十億的速度繪制紋理。下面是專業(yè)3D性能評測軟件3Dmark05 實測性能指標-
機器一
IBM T40筆記本電腦,CPU: Intel Pentium-M 1. 5GHZ,內(nèi)存512MB,顯 卡ATI Mobility Radeon 750。,顯存32MB, OS: Windows XP。
測試結(jié)果每秒繪制的三角形(triangle)數(shù)量3. 4M triangles/s,每 秒繪制的紋理(Texel)點數(shù)242. 6M Texels/s。
機器二
臺式機,CPU: Intel Pentium-4 3.0GHz Hyperthreading,內(nèi)存1GB,顯 卡ASUS Extreme AX550 Series,顯存256 MB, OS: Windows XP。
測試結(jié)果每秒繪制的三角形數(shù)量62. 3M triangles/s,每秒繪制的紋 理點數(shù)658. 8M Texels/s。
可見,對于普通的計算機,都能夠滿足在三維虛擬場景、三維物體繪制以 及視頻畫面還原方面的性能要求。
(10)圖形引擎適配器
本實施例針對不同的圖形引擎設(shè)計并實現(xiàn)了圖形引擎適配器,用于將不同 的圖形引擎提供的圖形API封裝起來,為畫面展現(xiàn)模塊提供一個標準的圖形繪 制接口。因此本實施例可以被應(yīng)用到較為廣泛的軟硬件平臺,不但是微軟平臺, 也可移植到Linux、 Unix等平臺;不但是PC計算機,也可移植到機頂盒、手機 等智能設(shè)備,這樣在各種設(shè)備(如計算機、機頂盒、手機等)、各種平臺(如W indows、 Liniu等)的各種圖形引擎(如DirectX、 0penGL等)上都可以用完全 相同的機制實現(xiàn)本發(fā)明的效果。
如上描述可知,圖1所示的裝置中的三維建模模塊可以計算三維模型繪制 數(shù)據(jù);畫面展現(xiàn)模塊可以通過圖形引擎適配器調(diào)用圖形引擎基于所述三維模型 繪制數(shù)據(jù)在虛擬三維空間中繪制三維模型(包括虛擬三維場景或三維物體); 紋理繪制模塊可以將多個視頻、圖片(包括單獨的文字,即文字以圖片的形式 進行顯示)和Flash等顯示對象作為三維模型上指定位置(三角形)的紋理生 成紋理繪制數(shù)據(jù),畫面展現(xiàn)模塊同樣通過圖形引擎適配器調(diào)用圖形引擎將紋理
繪制到三維場景或物體上;界面交互模塊可以捕獲并響應(yīng)界面事件或用戶操作, 以控制實時更新用戶界面的顯示。因此,利用圖1所示的裝置,能夠?qū)崿F(xiàn)視頻 的三維播放效果,為用戶帶來新的體驗。
實施例2
本實施例提供一種通過實施例1中的裝置實現(xiàn)媒體三維播放的方法。如圖3 所示,本方法包括如下步驟
步驟301,界面初始化步驟。界面初始化的目的是加載各個相關(guān)模塊,并顯 示最初始的用戶界面。
步驟302,三維模型的繪制步驟。在該步驟中進行三維模型(三維場景和/
或三維物體)的繪制。
步驟303,紋理繪制步驟。在該步驟中將視頻、圖片或Flash作為三維模型 的紋理繪制到界面上。
步驟304,界面交互事件處理步驟。該步驟中負責監(jiān)聽用戶操作事件、界面 單元事件和計時器事件等界面事件,并進行更新顯示。
本方法中的全部或部分步驟可以通過應(yīng)用程序來指令相關(guān)的硬件來完成。 下面對上述步驟進行更詳細的說明。
(一)界面初始化
當通過應(yīng)用程序執(zhí)行本步驟時時,應(yīng)用程序會自動按照如圖4所示流程完 成界面初始化。圖4所示,本步驟又包括如下步驟 步驟401,初始化圖形引擎和圖形引擎適配器。
根據(jù)系統(tǒng)環(huán)境加載并初始化圖形引擎,并加載與該圖形引擎相對應(yīng)的圖形 引擎適配器。
步驟402,讀取用戶界面定義文件。 用戶界面定義模塊讀取定義用戶界面的XML文件。 步驟403,初始化界面單元。
用戶界面定義模塊負責解析用戶界面定義文件。界面定義XML格式中定義 了用戶界面的布局、所包含的各種界面單元及資源位置。
用戶界面定義模塊會依次將所需繪制的界面數(shù)據(jù)(需要繪制的模型列表和 紋理列表)傳遞給三維建模模塊或紋理繪制模塊。
步驟404,判斷是否還有應(yīng)當展現(xiàn),但還沒有繪制的三維場景或物體。
三維建模模塊依次處理用戶界面定義模塊發(fā)送過來的三維模型列表,直至 所有的模型都己繪制完成。如果三維建模模塊判斷還有沒有繪制的三維模型(三 維場景和三維物體),進入步驟405;當所有應(yīng)當展現(xiàn)的模型都繪制完成后,跳 轉(zhuǎn)至步驟406。
步驟405,繪制三維場景或物體。
三維建模模塊和三維模型導入模塊處理所有要繪制的三維模型,必要時需 要三維模型導入模塊導入三維模型文件,再由三維模型建模模塊根據(jù)三維模型 文件生成三維模型繪制數(shù)據(jù)。詳細流程參見流程(二)三維場景和物體繪制 流程。
步驟406,判斷界面中是否還有需要展現(xiàn),但還沒有繪制的圖文、視頻或 Flash。
紋理繪制模塊依次處理用戶界面定義模塊發(fā)送來的媒體(圖文、視頻或 Flash)列表,直至所有的媒體都繪制完成。如果紋理繪制模塊判斷還有沒有繪制 的紋理,進入步驟405;當所有應(yīng)當繪制的紋理都繪制完成后,跳轉(zhuǎn)至步驟408。
步驟407,繪制三維場景或物體的紋理。
紋理繪制模塊調(diào)用媒體源讀取模塊和音視頻解碼模塊處理所有要繪制的媒 體。詳細流程參見流程(三)紋理繪制流程。 步驟408,開始監(jiān)聽界面交互事件,
在完成了所有的三維場景和物體、紋理的繪制之后,用戶界面的初始繪制 工作即已完成。
用戶交互模塊將根據(jù)用戶界面定義模塊的要求,開始監(jiān)聽界面交互事件,
如用戶操作事件等等。
一旦事件發(fā)生,就根據(jù)預(yù)先定義的事件處理邏輯進行響 應(yīng)。進行界面交互時間處理的流程見下面流程(四)界面交互時間處理流程。 (二)三維模型繪制流程
根據(jù)界面定義模塊和界面交互模塊的要求,如圖5所示流程繪制界面上的 三維場景和物體。
步驟501,獲取界面定義中的三維場景或物體的定義參數(shù)。
三維建模模塊被界面定義模塊或界面交互模塊調(diào)用時,需要對方提供三維 場景和物體的相關(guān)參數(shù),比如場景或物體放置的位置等等。如果需要導入三維 模型文件的話,則需要提供文件的存放地址。
步驟502,判斷是否需要導入三維模型。
如果在調(diào)用三維建模模塊時,設(shè)置了三維模型文件的地址,則三維建模模 塊將認為需要從三維模型文件中導入三維模型。
如果沒有設(shè)置文件地址,則流程跳轉(zhuǎn)至步驟504。 步驟503,讀取三維模型文件。
三維建模模塊調(diào)用三維模型導入模塊,讀取指定位置上的三維模型文件(如 后綴名為.X的模型文件)。
步驟504,計算三維模型參數(shù)。
一方面三維建模模塊可以內(nèi)置一些常用的三維模型,界面定義模塊或界面 交互模塊可以直接給定這些模型的參數(shù)(如大小規(guī)格等等);三維建模模塊可 直接根據(jù)參數(shù)計算出繪制所需要的模型數(shù)據(jù)。
另一方面三維建模模塊在讀取三維模型文件后,也需要按照界面定義模塊 或界面交互模塊的要求做二次運算,比如按照顯示分辨率等比縮放等等。
步驟505,繪制三維場景或物體。
三維建模模塊將計算好的三維模型參數(shù)發(fā)送給畫面展現(xiàn)模塊。畫面展現(xiàn)模 塊將根據(jù)三維模型參數(shù),通過圖形引擎適配器調(diào)用圖形引擎提供的API接口, 繪制三維場景和物體。
步驟506,標識三維場景或物體,并記錄相關(guān)參數(shù)。
三維建模模塊在繪制完成所有三維模型后,需要在內(nèi)存中記錄這些場景或 物體的關(guān)鍵標識和參數(shù)。特別是當在這些物體上繪制紋理的時候,需要讀取這 些標識和參數(shù)。
(三)紋理繪制流程
根據(jù)界面定義模塊和界面交互模塊的要求,如圖6所示流程將視頻、圖片 或Flash作為三維場景和物體的紋理繪制到界面上。圖6所示的流程包括
步驟601,獲取紋理繪制所需的視頻、圖文和Flash參數(shù)。
紋理繪制模塊被界面定義模塊或界面交互模塊調(diào)用時,需要其提供相關(guān)參數(shù), 比如需要繪制的視頻、Flash和圖片的地址,繪制到哪個模型上的什么位置等等。
步驟602,判斷是否需要圖片文件。如果需要,執(zhí)行步驟603;如果不需要, 轉(zhuǎn)到步驟604。
步驟603,讀取圖片文件。 ,
如果需要作為紋理繪制的是圖片,則紋理繪制模塊將通過媒體源讀取模塊 按照圖片地址參數(shù)到指定位置讀取圖片文件。紋理繪制模塊支持各種主流的圖 片格式,包括BMP、 PNG、 JPG等等。
步驟604,判斷是否需要Flash文件。如果需要,執(zhí)行步驟605;如果不需 要,轉(zhuǎn)到步驟606。
步驟605-606 ,加載Flash文件并進行音視頻解碼。
如果需要作為紋理繪制的是Flash,則紋理繪制模塊將通過媒體源讀取模塊 調(diào)用計算機上已安裝的Flash播放器(Flash Player)到指定位置上加載Flash (如后綴為.SWF的文件)。
步驟607,判斷是否需要視頻流或文件。如果需要,執(zhí)行步驟608;如果不 需要,轉(zhuǎn)到步驟610。
步驟6Q8,讀取視頻流或文件。
如果需要作為紋理繪制的是視頻,則紋理繪制模塊將通過媒體源讀取模塊 讀取制定位置上的視頻流或視頻文件。
步驟609,音視頻解碼。
媒體源讀取模塊讀取的視頻流或視頻文件,紋理繪制模塊將根據(jù)其視頻格
式調(diào)用相應(yīng)的音視頻解碼器(Codec),將壓縮過的音視頻數(shù)據(jù)解碼還原成音頻 數(shù)據(jù)和視頻數(shù)據(jù),并將音頻數(shù)據(jù)輸出至音頻展現(xiàn)單元。紋理繪制模塊負責接收 視頻數(shù)據(jù)。
步驟610,繪制三維場景和物體的紋理。
紋理繪制模塊將音視頻解碼模塊輸出的視頻數(shù)據(jù)及其他圖片或Flash作為 紋理對應(yīng)到指定三維模型的指定位置,生成紋理繪制參數(shù),并根據(jù)紋理繪制參 數(shù)調(diào)用畫面展現(xiàn)模塊。
畫面展現(xiàn)模塊按照紋理繪制模塊的要求,通過圖形引擎適配器調(diào)用圖形引 擎的API接口,將視頻數(shù)據(jù)繪制到指定模型(場景或物體)的指定位置。
步驟611,標識并記錄紋理的相關(guān)參數(shù)。
紋理繪制模塊和畫面展現(xiàn)模塊在繪制紋理后,會將相關(guān)參數(shù)保存在內(nèi)存中, 供下次刷新繪制時使用。
(四)界面交互事件處理流程
在完成界面的初始化之后,界面交互模塊將負責監(jiān)聽本發(fā)明方案的應(yīng)用程 序的界面交互事件,包括用戶操作事件、界面單元事件和計時器(Timer)事件。 如圖7所示。該流程具體包括
步驟701,監(jiān)聽界面交互事件,判斷是否有事件發(fā)生。
界面交互模塊一旦界面交互模塊監(jiān)聽的事件發(fā)生,則執(zhí)行步驟702,識別事 件類型。
步驟702,識別事件類型。
通過對事件類型的識別,界面交互模塊將調(diào)用相應(yīng)的事件處理函數(shù)捕獲事 件及相關(guān)參數(shù),如鼠標位置,按鍵代碼等等。
步驟703,判斷所發(fā)生事件是否需要處理。
界面交互模塊獲得事件及相關(guān)參數(shù)后,會參照界面定義模塊的要求,只對 需要處理的事件進行處理。如果監(jiān)聽的事件需要處理,則進入步驟704;如果該 事件不需要處理,則轉(zhuǎn)到步驟701,界面交互模塊則繼續(xù)監(jiān)聽下一事件的發(fā)生。
步驟704,判斷是否需要重繪三維場景或物體。如果需要,執(zhí)行步驟705, 如果不需要,轉(zhuǎn)到步驟707。
步驟705,計算重新繪制所需要的三維建模的相關(guān)參數(shù)。
如果根據(jù)監(jiān)聽的事件的處理要求判斷需要重繪三維場景或物體,界面交互模 塊將會調(diào)用三維建模模塊重新對顯示在界面上的三維場景或物體進行三維建模相 關(guān)參數(shù)的運算,或者重新讀入新的三維模型數(shù)據(jù),生成新的三維模型繪制數(shù)據(jù)。
步驟706,三維建模模塊計算的新的模型數(shù)據(jù)將通過畫面展現(xiàn)模塊重新繪制 到用戶界面上。
步驟707,判斷是否需要重新繪制紋理,如果需要,執(zhí)行步驟708,如果不 需要,轉(zhuǎn)到步驟710。
歩驟70S,計算重新繪制所需要的紋理參數(shù)。
如果根據(jù)監(jiān)聽的事件的處理要求判斷需要重新繪制紋理,界面交互模塊將 會調(diào)用紋理繪制模塊重新對已繪制的視頻等媒體源刷新,或者讀取、解碼新的 媒體源,重新生成紋理繪制數(shù)據(jù)。
步驟709,紋理繪制模塊生成的新的紋理繪制數(shù)據(jù)將通過畫面展現(xiàn)模塊重新 繪制到用戶界面上。
步驟710,完成該事件的處理后,繼續(xù)監(jiān)聽下一界面交互事件。
實例l.下面將以"立方體旋轉(zhuǎn)效果切換視頻和廣告"為例,來說明本發(fā)明 實施例的方法。
本例將在一個三維立方體的A、 B、 C和D四個面上分別顯示wmv視頻、Flash 廣告、mms視頻流和jpg廣告圖片,并實現(xiàn)如下效果(如圖8所示意)
1) 用戶通過按鍵盤上的"L"和"R"鍵來控制該立方體的旋轉(zhuǎn),用戶每按 一次鍵,就將該立方體分別向左或向右旋轉(zhuǎn)90度。
2) 當A (或C面)的視頻正面向用戶,并處于緩沖的狀態(tài)時,立方體自動 向左旋轉(zhuǎn)90度顯示B (或D面)上的Flash廣告和圖片廣告;當A (或C面) 的視頻緩沖完成可以播放后,立方體再自動向右旋轉(zhuǎn)90度,開始觀看視頻。
具體的實現(xiàn)步驟如下 1繪制初始化界面
1.1 初始化DirectX圖形引擎和Direct適配器,并將DirectX的刷新率 設(shè)置為25幀/秒,即每秒重繪25次。 1.2讀取界面定義文件。
界面定義模塊讀取并解析存儲在本地文件系統(tǒng)的配置文件(界面定義文件) config. xml,并從config.xml中讀取到需要繪制一個立方體,長寬高均為400
像素,初始位置為用戶界面的中心點位置。
界面定義文件中定義了A、 B、 C和D面上分別需要顯示的wmv視頻、Flash 廣告、mms視頻流和jpg圖片的地址。
此外界面定義文件中還要求界面交互模塊監(jiān)聽視頻緩沖事件和鍵盤按鍵事件。
1.3繪制立方體三維模型。
三維建模模塊中已內(nèi)置有立方體模型,無需讀取外部的模型文件。因此三 維建模模塊根據(jù)界面定義文件中的三維模塊顯示配置信息計算所立方體所需的 三角形數(shù)量,及各三角形的大小、位置等等,
畫面展現(xiàn)模塊按照三維建模模塊計算處理的三角形參數(shù),通過適配器調(diào)用 DirectX的圖形接口,以25幀/秒的速度繪制這些三角形,即每秒中重新繪制25次。
1.4讀取并繪制jpg廣告圖片。
紋理繪制模塊根據(jù)界面定義要求,讀取本地文件系統(tǒng)中的ad. jpg圖片文件, 將該圖片文件中的圖片作為紋理并根據(jù)圖片在立方體上的顯示位置生成紋理繪 制數(shù)據(jù)。
畫面展現(xiàn)模塊通過適配器調(diào)用DirectX圖形引擎的API接口將ad. jpg圖片 文件繪制到立方體的D面的兩個三角形上作為其紋理。 1.5加載并繪制Flash廣告
媒體源讀取模塊根據(jù)界面定義要求,讀取本地文件系統(tǒng)中的廣告Flash文 件ad.swf。然后音視頻解碼模塊調(diào)用本機所帶的Flash Player解碼此SWF文 件,將音頻輸出到音頻展現(xiàn)模塊,將視頻輸出到紋理繪制模塊,紋理繪制模塊 將視頻作為立方體B面上的紋理生成紋理繪制數(shù)據(jù)。
畫面展現(xiàn)模塊通過適配器調(diào)用DirectX圖形引擎的API接口將ad. swf輸出 的視頻畫面繪制到立方體B面的兩個三角形上。
1.6開始監(jiān)聽界面事件
界面交互模塊根據(jù)界面定義模塊的要求,開始監(jiān)聽視頻和鍵盤按鍵事件。 2響應(yīng)視頻緩沖事件
2.1 開始讀取并播放wmv視頻文件,同時觸發(fā)視頻緩沖事件。
媒體源讀取模塊根據(jù)用戶界面定義的要求,讀取存儲于本地系統(tǒng)的視頻文 件movie, wmv,并將讀取的視頻文件交給音視頻解碼模塊;
此時界面交互模塊接收到媒體源讀取模塊和音視頻解碼模塊發(fā)送出來的視 頻連接和視頻緩沖事件。
發(fā)出事件的同時,音視頻解碼模塊繼續(xù)使用視頻解碼器(如Microsoft wmv v9)和音頻解碼器,還原movie, wnw文件中的視頻和音頻數(shù)據(jù),將音頻數(shù)據(jù)輸 出給音頻展現(xiàn)模塊,將視頻數(shù)據(jù)輸出給紋理繪制模塊;
與此同時按照用戶界面定義的要求,界面交互模塊處理視頻緩沖事件,即 開始執(zhí)行第2. 2步。需要注意的是,movie, wmv的解碼和第2. 2步是同時進行的。
2. 2用戶交互模塊將立方體的B面翻轉(zhuǎn)至正對用戶。
界面交互模塊根據(jù)用戶界面定義的要求,通知三維建模模塊將立方體的B 面翻轉(zhuǎn)至正對用戶。
三維建模模塊將計算出從立方體當前顯示位置,順時針翻轉(zhuǎn)到B面所需要 重新繪制的每一幀,并將每一幀按照25幀/秒的頻率輸出給畫面展現(xiàn)模塊,畫 面展現(xiàn)模塊將這些幀繪制出來。
從用戶的感受看,以每秒25幀的速度不斷繪制處理的畫面,就是一種非常 平滑的立方體翻轉(zhuǎn)動畫效果。
翻轉(zhuǎn)過來后,用戶體驗到的是當movie.視頻在緩沖的時候,立方體會自動 翻轉(zhuǎn)到B面,顯示該面的Flash廣告。立方體旋轉(zhuǎn)到B面后的界面如圖9所示。
2.3開始繪制wmv視頻,同時觸發(fā)視頻開始播放事件。
在立方體翻轉(zhuǎn)至B面的同時,音視頻解碼模塊在媒體源讀取模塊的配合下, 已經(jīng)完成了 movie, wmv視頻文件的讀取和解碼工作,然后紋理繪制模塊根據(jù)用 戶界面定義"的定義,發(fā)送顯示請求給畫面展現(xiàn)模塊,要求其將音視頻解碼模 塊輸出的視頻數(shù)據(jù),繪制到立方體的A面。
在發(fā)送顯示請求的同時,觸發(fā)視頻開始播放事件,而界面交互模塊將捕獲 到此事件,開始執(zhí)行步驟2.4。
與此同時,畫面展現(xiàn)模塊將按照25幀/秒的速度將解碼出來的視頻幀數(shù)據(jù) 不斷的繪制到用戶界面上。
2. 4界面交互模塊將立方體的A面翻轉(zhuǎn)至正對用戶。
當界面交互模塊捕獲到視頻開始播放事件后,將要求三維建模模塊將立方 體翻轉(zhuǎn)至A面。
三維建模模塊將計算翻轉(zhuǎn)到A面的過程中的每一幀,并以25幀/秒的頻率 輸出給畫面展現(xiàn)模塊。
在步驟2. 3和步驟2. 4中,畫面展現(xiàn)模塊同時接收到三維建模模塊和紋理 繪制模塊發(fā)出的"立方體翻轉(zhuǎn)至A面"和"將movie.麗v視頻幀畫面作為紋理 繪制到A面"的繪制要求,當畫面展現(xiàn)模塊結(jié)合兩者的繪制請求,通過調(diào)用圖 形引擎,以25幀/秒的速度不斷繪制畫面時,用戶就能夠體驗到在立方體翻轉(zhuǎn)
的過程中,立方體A面上的視頻頁在同步的播放的動畫效果。立方體旋轉(zhuǎn)回到A
面后的界面如圖8所示。
2.5讀取并播放mms視頻流,同時觸發(fā)視頻緩沖事件。 與步驟2.3相類似,當用戶翻轉(zhuǎn)到立方體的C面時,媒體源讀取模塊根據(jù)
用戶界面定義的要求,讀取指定地址的mms視頻流,并將讀取到的視頻流交給
音視頻解碼模塊;
此時界面交互模塊接收到媒體源讀取模塊和音視頻解碼模塊發(fā)送出來的視 頻連接和視頻緩沖事件。
發(fā)出事件的同時,音視頻解碼模塊繼續(xù)使用rams視頻解碼器和音頻解碼器, 還原視頻流中的視頻和音頻數(shù)據(jù),將音頻數(shù)據(jù)輸出給音頻展現(xiàn)模塊,將視頻數(shù) 據(jù)輸出給紋理繪制模塊;
與此同時按照用戶界面定義的要求,界面交互模塊處理視頻緩沖事件,即 開始執(zhí)行第2.6步。
2. 6界面交互模塊將立方體的D面翻轉(zhuǎn)至面對用戶。
界面交互模塊根據(jù)用戶界面定義的要求,通知三維建模模塊將立方體的D 面翻轉(zhuǎn)至正對用戶。
三維建模模塊將計算出從立方體當前顯示位置,順時針翻轉(zhuǎn)到D面所需要 重新繪制的每一幀,并將每一幀按照25幀/秒的頻率輸出給畫面展現(xiàn)模塊,畫 面展現(xiàn)模塊將這些幀繪制出來。
從用戶的感受看,以每秒25幀的速度不斷繪制處理的畫面,就是一種非常 平滑的立方體翻轉(zhuǎn)動畫效果。
翻轉(zhuǎn)過來后,用戶體驗到的是當mms視頻流在緩沖的時候,立方體會自動 翻轉(zhuǎn)到D面,顯示該面的jpg圖片廣告。
2.7開始繪制mms視頻,并觸發(fā)視頻開始播放事件。
在立方體翻轉(zhuǎn)至D面的同時,音視頻解碼模塊在媒體源讀取模塊的配合下, 已經(jīng)完成了 nuns視頻流的讀取和解碼工作,然后紋理繪制模塊根據(jù)界面定義模
塊的定義,發(fā)送顯示請求給畫面展現(xiàn)模塊,要求其將音視頻解碼模塊輸出的視
頻數(shù)據(jù),繪制到立方體的c面。
在發(fā)送顯示請求的同時,觸發(fā)視頻開始播放事件,而界面交互模塊將捕獲
到此事件,開始執(zhí)行步驟2.8。
與此同時,畫面展現(xiàn)模塊將按照25幀/秒的速度將解碼出來的視頻幀數(shù)據(jù) 不斷的繪制到用戶界面上。
2. 8界面交互模塊將立方體的C面翻轉(zhuǎn)至面對用戶。
當界面交互模塊捕獲到視頻開始播放事件后,將要求三維建模模塊將立方 體翻轉(zhuǎn)至C面。
三維建模模塊將計算翻轉(zhuǎn)到C面的過程中的每一幀,并以25幀/秒的頻率 輸出給畫面展現(xiàn)模塊。 3響應(yīng)用戶按鍵事件
3.1用戶按下鍵盤"R"鍵,將立方體正對用戶的面由A面翻到D面。 當用戶按下鍵盤"R"鍵,"界面交互模塊"將自動捕獲到用戶的按鍵事件, 并判斷按的是那一個鍵,當發(fā)現(xiàn)用戶按的是"R"鍵時,將要求三維建模模塊將 立方體向右翻轉(zhuǎn)90度。假如正對用戶的是A面時,三維建模模塊將計算出從A 面翻轉(zhuǎn)到D面的每一幀畫面,并輸出給畫面展現(xiàn)模塊。 畫面展現(xiàn)模塊按25幀/秒的速度重繪用戶界面。
3.2用戶按下鍵盤"L"鍵,將立方體正對用戶的面由D面翻回A面。 當用戶按下鍵盤"L"鍵,"界面交互模塊"將自動捕獲到用戶的按鍵事件,
并判斷按的是那一個鍵,當發(fā)現(xiàn)用戶按的是"L"鍵時,將要求三維建模模塊將
立方體向左翻轉(zhuǎn)90度。假如正對用戶的是D面時,三維建模模塊將計算出從A
面翻轉(zhuǎn)到A面的每一幀畫面,并輸出給畫面展現(xiàn)模塊。
畫面展現(xiàn)模塊按25幀/秒的速度重繪界面,向用戶展示的是廣告圖片。 很顯然,當畫面展現(xiàn)模塊不斷的重新繪制立方體翻轉(zhuǎn)的畫面的同時,還在
不斷的繪制A面上的視頻movie, wrnv畫面。因此用戶就能體驗到自己在控制立
方體翻轉(zhuǎn)的同時,A面上的視頻一直在不斷的播放,并且能夠隨著立方體的翻轉(zhuǎn),
隨著A面的變形而變形。
在此需要說明的是,本實例中媒體源讀取模塊讀取wmv視頻、Flash廣告、 mms視頻流以及紋理繪制模塊讀取jpg圖片的順序可以按照播放要求通過界面定 義文件進行定義,而并不限于上面描述的步驟順序。
實例2.本實例以"在視頻上疊加三維物體"為例來說明本發(fā)明實施例的方法。 本例在一個正在播放的視頻畫面上,疊加顯示上例的立方體(立方體的A、
B、 C和D面分別顯示wmv視頻、Flash廣告、rams視頻流和jpg圖片),如圖10
所示意。利用本發(fā)明的技術(shù)方案,本例將展示以下效果
1 ) 在正在播放的背景視頻上,按鍵盤"A"則疊加顯示一個三維立方體;
2) 用戶可以控制立方體的顯示,
a) 用鍵盤"R"和"L"鍵控制立方體的旋轉(zhuǎn);
b) 當鼠標位于立方體上時,用戶利用鼠標中滾輪可放大和縮小立方體j
c) 當鼠標位于立方體上時,用戶按下鼠標左鍵可拖拽立方體,松開后立 方體將被放置到左鍵松開時鼠標所在的位置。
具體實現(xiàn)流程如下 1繪制初始化界面
1. 1 初始化DirectX圖形引擎和Direct適配器。并將DirectX的刷新 率設(shè)置為25幀/秒,即每秒重繪25次。
1.2 讀取界面定義文件
界面定義模塊讀取并解析存儲在本地文件系統(tǒng)的配置文件(界面定義文件) config.xml。 Config.xml中要求在用戶界面的中央位置,繪制一個長400像素、 寬400像素的矩形,并在矩形上顯示背景wmv視頻。
此外界面定義文件中還要求界面交互模塊監(jiān)聽視頻緩沖事件和鍵盤按鍵事件。
1.3 讀取、解碼并繪制背景視頻
媒體源讀取模塊根據(jù)用戶界面定義的要求,讀取存儲于本地系統(tǒng)的視頻文 件bk. WIW,并將讀取的視頻文件交給音視頻解碼模塊;
音視頻解碼模塊使用Microsoft wmv v9視頻解碼器和音頻解碼器,還原b k.wmv文件中的視頻和音頻數(shù)據(jù),將音頻數(shù)據(jù)輸出給音頻展現(xiàn)模塊,將視頻數(shù)據(jù) 輸出給紋理繪制模塊;
紋理繪制模塊根據(jù)用戶界面定義的定義,發(fā)送顯示請求給畫面展現(xiàn)模塊, 要求其將音視頻解碼模塊輸出的視頻數(shù)據(jù),以25幀/秒的速度繪制到背景矩形 的兩個三角形上。
1.4 監(jiān)聽鍵盤按鍵事件
完成初始化界面的繪制后,界面交互模塊按照用戶界面定義的要求,監(jiān)聽 鍵盤和鼠標的用戶按鍵事件。
2 響應(yīng)按鍵"A",在背景視頻上繪制疊加立方體
2. 1 用戶按下"A"鍵,繪制立方體三維模型
conf ig. xml中要求當用戶按下鍵盤"A"鍵時,在背景視頻矩形上繪制一個 立方體,長寬高均為200像素,初始位置為用戶界面的中心點位置。
因此當界面交互模塊監(jiān)聽到用戶按下鍵盤的"A"鍵時,將調(diào)用三維建模模 塊、紋理繪制模塊、畫面展現(xiàn)模塊和其他模塊按照上一例"立方體效果切換視 頻和廣告"中所描述的流程繪制立方體。
2.2 繼續(xù)監(jiān)聽鼠標和鍵盤事件
繪制完立方體后,界面交互模塊繼續(xù)按照用戶界面定義的要求,監(jiān)聽鍵盤 和鼠標的用戶按鍵事件。
3 控制疊加顯示的立方體
3. 1 用戶按下"R"或"L"鍵,旋轉(zhuǎn)立方體三維模型 當界面交互模塊監(jiān)聽到用戶按下鍵盤上的"R"和"L"鍵時,將按照上一
例"立方體效果切換視頻和廣告"中的步驟"響應(yīng)用戶按鍵事件"中描述的流 程實現(xiàn)立方體的旋轉(zhuǎn)。
3. 2 用戶用鼠標放大縮立方體三維模型
當界面交互模塊監(jiān)聽到用戶滾動鼠標中部的滾動鍵時,首先判斷鼠標箭頭 是否位于立方體的顯示區(qū)域,如果在該區(qū)域內(nèi)則將根據(jù)鼠標中鍵的滾動方向和 距離計算出立方體需要放大和縮小的倍數(shù),三維建模模塊將計算出顯示放大和 縮小過程的效果中所需要繪制每一幀,并調(diào)用畫面展現(xiàn)模塊以25幀/秒的速度 繪制出來。
此時用戶看到的效果就是當自己滾動鼠標中鍵的滾動鍵時,立方體將隨著 滾動的方向和距離,做相應(yīng)的放大和縮小。 3. 3 用戶用鼠標移動立方體三維模型
當界面交互模塊監(jiān)聽到用戶按下鼠標左鍵(并且沒有松開)時,首先判斷 鼠標箭頭是否位于立方體的顯示區(qū)域,如果是則繼續(xù)監(jiān)聽鼠標是否發(fā)生移動。
當鼠標移動時,則根據(jù)移動的距離計算出需要立方體所要顯示的新的位置。 三維建模模塊不斷的根據(jù)立方體要顯示的新位置參數(shù),計算出從原位置到新位 置要繪制的每一幀,并調(diào)用畫面展現(xiàn)模塊以25幀/秒的速度繪制出來。
當發(fā)現(xiàn)用戶松開鼠標左鍵時,界面交互模塊將不再監(jiān)聽和響應(yīng)鼠標的移動 事件。
此時用戶看到的效果是,當自己在立方體上按下鼠標左鍵并移動鼠標時, 立方體不斷的隨著鼠標箭頭所指變換位置。當用戶松開鼠標左鍵時,立方體將 停留在松開左鍵時最后的箭頭位置上。
利用類似本例的流程,可以在正在播放的視頻上疊加多個各種形狀的三維 物體;而作為背景顯示的正在播放的視頻也可以是在一個三維物體上播放,即 從用戶的體驗來看,就是一個三維物體疊加在另一個之上。
利用圖l所示的圖形引擎適配器可以適應(yīng)各種不同的圖形引擎的變化。在 不同硬件環(huán)境基礎(chǔ)上,本發(fā)明實施例只需要進行簡單的處理就可以將上面所述 方案從計算機平臺遷移到機頂盒(數(shù)字電視或IPTV)和手機終端等終端。處理 例如如下
(1) 可以根據(jù)機頂盒或手機平臺所能提供的圖形引擎,開發(fā)針對該引擎的 新的圖形適配器。由于許多設(shè)備,如手機自帶的圖形引擎缺少三維算法、函數(shù) 和顯示接口,因此圖形適配器需要利用新的圖形引擎中提供的二維顯示接口, 設(shè)計并實現(xiàn)三維算法,如投影、光線等等,這樣就可以保證本發(fā)明方案所體現(xiàn) 的效果能夠正常的在機頂盒或手機上顯示處理。
(2) 由于機頂盒或手機等終端設(shè)備操作系統(tǒng)中提供的底層應(yīng)用程序開發(fā)接
口集,與計算機操作系統(tǒng)能夠提供的接口集并不完全相同,因此需要按照機頂 盒或手機等終端操作系統(tǒng)提供的接口集修改本發(fā)明的相關(guān)代碼,以保證包括音 視頻解碼、媒體源讀取、界面管理模塊等等其他模塊代碼能夠正常的在新的設(shè)
備上運行。
只要完成了應(yīng)用程序的移植和新的圖形引擎適配器的開發(fā),本發(fā)明就能夠 在新的操作系統(tǒng)平臺、新的設(shè)備上實現(xiàn)。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分步驟可 以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲于一計算機可讀取存儲
介質(zhì)中,比如R0M/RAM、磁碟、光盤等。其中,當上述程序被機器,如計算機加 載且執(zhí)行時,此機器變成用以參與本發(fā)明的系統(tǒng)或裝置。
以上所述的具體實施例,對本發(fā)明的目的、技術(shù)方案和有益效果進行了進 一步詳細說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實施例而已,并不 用于限定本發(fā)明的保護范圍,凡在本發(fā)明的精神和原則之內(nèi)、所做的任何修改、 等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種實現(xiàn)媒體三維播放的方法,其特征在于,該方法包括根據(jù)三維模型顯示配置信息生成三維模型繪制數(shù)據(jù);讀取本地或遠程的至少一個媒體源文件;將所述至少一個媒體源文件進行解碼,各自生成音頻信號和視頻畫面信號兩路數(shù)據(jù);將解碼生成的音頻信號中的至少一路數(shù)據(jù)播放輸出;根據(jù)紋理顯示配置信息獲取包括所述視頻畫面在內(nèi)的多個顯示對象,并將該多個顯示對象作為三維模型的指定位置的紋理,生成紋理繪制數(shù)據(jù);以及接收所述三維模型繪制數(shù)據(jù)和紋理繪制數(shù)據(jù),調(diào)用圖形引擎繪制三維模型和紋理以通過顯示界面進行顯示。
2. 根據(jù)權(quán)利要求l所述的方法,其特征在于,該方法還包括 將兩種以上的圖形引擎提供的圖形應(yīng)用程序接口進行封裝,提供一個通用的圖形引擎調(diào)用接口。
3. 根據(jù)權(quán)利要求l所述的方法,其特征在于,該方法還包括 捕獲界面事件,根據(jù)界面事件交互配置信息響應(yīng)捕獲到的界面事件,產(chǎn)生新的三維模型顯示配置信息和/或紋理顯示配置信息;根據(jù)新的三維模型布局配置信息和/或紋理布局配置信息,相應(yīng)更新三維模 型繪制數(shù)據(jù)和/或紋理繪制數(shù)據(jù);根據(jù)更新的三維模型繪制數(shù)據(jù)和/或紋理繪制數(shù)據(jù)更新顯示界面。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于所述界面事件包括用戶操作事件、界面單元事件和/或計時器事件。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于-所述用戶操作事件包括鼠標移動、鼠標點擊及/或按鍵操作。
6. 根據(jù)權(quán)利要求4所述的方法,其特征在于所述界面單元事件包括視頻播放完畢、視頻緩沖開始和/或視頻緩沖結(jié)束 視頻內(nèi)容。
7. 根據(jù)權(quán)利要求4所述的方法,其特征在于所述計時器事件包括整點事件、設(shè)定時間事件和/或每隔特定時間事件。
8. 根據(jù)權(quán)利要求3所述的方法,其特征在于,該方法還包括 定義初始的三維模型顯示配置信息、初始的紋理顯示配置信息及界面事件交互配置信息,根據(jù)初始的三維模型顯示配置信息生成三維模型繪制數(shù)據(jù),根 據(jù)初始的紋理顯示配置信息生成紋理繪制數(shù)據(jù),以及根據(jù)界面事件交互配置信 息響應(yīng)捕獲到的界面事件。
9. 根據(jù)權(quán)利要求1或8所述的方法,其特征在于,該方法還包括定義三維模型的數(shù)據(jù)源地址信息,按照該數(shù)據(jù)源地址信息到指定位置讀取 三維模型文件,并基于讀取的三維模型文件生成三維模型繪制數(shù)據(jù)。
10. 根據(jù)權(quán)利要求l所述的方法,其特征在于,該方法還包括 定義顯示對象的數(shù)據(jù)源地址信息,按照該數(shù)據(jù)源地址信息到指定位置讀取顯示對象源文件,以獲取顯示對象。
11. 根據(jù)權(quán)利要求5所述的方法,其特征在于所述媒體源文件包括視頻、視頻流或Flash文件。
12. 根據(jù)權(quán)利要求l所述的方法,其特征在于 所述多個顯示對象包括視頻畫面以及如下對象中的至少之一Flash、文字和圖片。
13. 根據(jù)權(quán)利l所述的方法,其特征在于 所述三維模型包括三維場景和/或三維物體。
14. 根據(jù)權(quán)利要求l所述的方法,其特征在于所述調(diào)用圖形引擎根據(jù)接收的數(shù)據(jù)將三維模型和紋理通過顯示界面進行顯示的頻率為25幀/秒。
15. —種實現(xiàn)媒體三維播放的裝置,其特征在于,該裝置包括三維建模模塊,用于根據(jù)三維模型顯示配置信息生成三維模型繪制數(shù)據(jù); 媒體源文件讀取模塊,用于讀取本地或遠程的至少一個媒體源文件; 音視頻解碼模塊,用于將所述至少一個媒體源文件進行解碼,各自生成音頻信號和視頻畫面信號兩路數(shù)據(jù);音頻展現(xiàn)模塊,將音視頻解碼模塊生成的音頻信號中的至少一路數(shù)據(jù)播放輸出;紋理繪制模塊,用于根據(jù)紋理顯示配置信息獲取包括所述視頻畫面在內(nèi)的 多個顯示對象,并將該多個顯示對象作為三維模型的指定位置的紋理,生成紋 理繪制數(shù)據(jù);以及畫面展現(xiàn)模塊,用于接收所述三維模型繪制數(shù)據(jù)和紋理繪制數(shù)據(jù),調(diào)用圖 形引擎繪制三維模型和紋理以通過顯示界面進行顯示。
16. 根據(jù)權(quán)利要求15所述的裝置,其特征在于,該裝置還包括-圖形引擎適配器模塊,用于將兩種以上的圖形引擎提供的圖形應(yīng)用程序接口進行封裝,提供一個通用的圖形引擎調(diào)用接口。
17. 根據(jù)權(quán)利要求15所述的裝置,其特征在于,該裝置還包括 界面交互模塊,用于捕獲界面事件,根據(jù)界面事件交互配置信息響應(yīng)捕獲到的界面事件,產(chǎn)生新的三維模型顯示配置信息和/或紋理顯示配置信息并分別 輸出到三維建模模塊和/或紋理繪制模塊;所述三維建模模塊和/或紋理繪制模塊分別接收所述新的三維模型小時配 置信息和/或紋理顯示配置信息,并相應(yīng)更新三維模型繪制數(shù)據(jù)和/或紋理繪制 數(shù)據(jù)。
18. 根據(jù)權(quán)利要求17所述的裝置,其特征在于所述界面事件包括用戶操作事件、界面單元事件和/或計時器事件。
19. 根據(jù)權(quán)利要求18所述的裝置,其特征在于所述用戶操作事件包括鼠標移動、鼠標點擊及/或按鍵操作。
20. 根據(jù)權(quán)利要求18所述的裝置,其特征在于所述界面單元事件包括視頻播放完畢、視頻緩沖開始和/或視頻緩沖結(jié)束 視頻內(nèi)容。
21. 根據(jù)權(quán)利要求18所述的裝置,其特征在于所述計時器事件包括整點事件、設(shè)定時間事件和/或每隔特定時間事件。
22. 根據(jù)權(quán)利要求17所述的裝置,其特征在于,該裝置還包括 界面定義模塊,用于定義初始的三維模型顯示配置信息、初始的紋理顯示配置信息及界面事件交互配置信息,并分別提供至所述三維建模模塊、紋理繪 制模塊和界面交互模塊。
23. 根據(jù)權(quán)利要求22所述的裝置,其特征在于-所述界面定義模塊還定義三維模型的數(shù)據(jù)源地址信息;該裝置還包括三維模型導入模塊,用于按照該數(shù)據(jù)源地址信息到指定位置 讀取三維模型文件,所述三維模型繪制模塊基于讀取的三維模型文件生成三維 模型繪制數(shù)據(jù)。
24. 根據(jù)權(quán)利要求15所述的裝置,其特征在于,該裝置還包括所述界面定義模塊還定義顯示對象的數(shù)據(jù)源地址信息,所述紋理繪制模塊 按照該數(shù)據(jù)源地址信息到指定位置讀取顯示對象源文件,以獲取顯示對象。
25. 根據(jù)權(quán)利要求15所述的裝置,其特征在于 所述媒體源文件包括視頻、視頻流或Flash文件。
26. 根據(jù)權(quán)利要求15所述的裝置,其特征在于-所述多個顯示對象包括視頻畫面以及如下對象中的至少之一Flash、文字和圖片。
27. 根據(jù)權(quán)利15所述的裝置,其特征在于 所述三維模型包括三維場景和/或三維物體。
28. 根據(jù)權(quán)利要求15所述的裝置,其特征在于 所述畫面展現(xiàn)模塊調(diào)用圖形引擎刷新顯示界面的頻率為25幀/秒。
全文摘要
本發(fā)明提供一種實現(xiàn)媒體三維播放的方法,該方法包括根據(jù)三維模型顯示配置信息生成三維模型繪制數(shù)據(jù);讀取本地或遠程的至少一個媒體源文件;將所述至少一個媒體源文件進行解碼,各自生成音頻信號和視頻畫面信號兩路數(shù)據(jù);將解碼生成的音頻信號中的至少一路數(shù)據(jù)播放輸出;根據(jù)紋理顯示配置信息獲取包括所述視頻畫面在內(nèi)的多個顯示對象,并將該多個顯示對象作為三維模型的指定位置的紋理,生成紋理繪制數(shù)據(jù);以及接收所述三維模型繪制數(shù)據(jù)和紋理繪制數(shù)據(jù),調(diào)用圖形引擎繪制三維模型和紋理以通過顯示界面進行顯示。
文檔編號G06F9/44GK101340598SQ20081011804
公開日2009年1月7日 申請日期2008年8月7日 優(yōu)先權(quán)日2008年8月7日
發(fā)明者炬 梁, 謝水庚, 俊 陳 申請人:北京衡準科技有限公司