張弛,沈劍鋒,姜忠鼎
隨著計(jì)算機(jī)硬件的發(fā)展,高性能的圖形顯示系統(tǒng)在諸如數(shù)字影院,商業(yè)會(huì)展,互動(dòng)娛樂(lè)等領(lǐng)域中應(yīng)用逐漸廣泛,對(duì)此類系統(tǒng)的需求主要為超大的顯示尺寸,超高的顯示分辨率與強(qiáng)烈的沉浸感[1]。由于 LCD顯示屏具有物理邊框,在多顯示拼接時(shí)難以做到無(wú)縫拼接,因此利用計(jì)算機(jī)集群連接多臺(tái)投影儀,并對(duì)畫(huà)面進(jìn)行幾何校正與顏色校正實(shí)現(xiàn)無(wú)縫拼接,成為主流的圖形顯示系統(tǒng)的畫(huà)面顯示方案[2-3]。例如美國(guó)普林斯頓大學(xué)研發(fā)的 Display Wall[4-5],芝加哥伊利諾斯大學(xué)EVL實(shí)驗(yàn)室研發(fā)的SAGE系統(tǒng)[6-7],及瑞典Dataton公司開(kāi)發(fā)的 Watchout系統(tǒng)[8]等等,國(guó)內(nèi)浙江大學(xué)與復(fù)旦大學(xué)也有多投影拼接的圖形顯示系統(tǒng)[9-13]。由于單臺(tái)計(jì)算機(jī)的性能有限,利用多臺(tái)計(jì)算機(jī)組成集群提供圖形渲染或顯示服務(wù),是此類系統(tǒng)普遍采用的架構(gòu)。
在基于多投影的圖形顯示系統(tǒng)中,視頻播放作為核心功能之一得到廣泛應(yīng)用[17],全屏展示高質(zhì)量高分辨率的立體視頻,能夠?yàn)橛^眾營(yíng)造優(yōu)秀的視覺(jué)體驗(yàn)與強(qiáng)烈的沉浸感。視頻資源質(zhì)量的快速提升使得此類系統(tǒng)需要在集群中進(jìn)行視頻播放,而支持主動(dòng)立體的投影儀的逐漸普及要求此類系統(tǒng)應(yīng)當(dāng)能夠在集群中利用主動(dòng)立體顯示技術(shù)。在應(yīng)用主動(dòng)立體顯示時(shí),如何對(duì)視頻播放進(jìn)行有效地同步是系統(tǒng)的關(guān)鍵點(diǎn)之一。系統(tǒng)的另一個(gè)關(guān)鍵點(diǎn)在于高效的視頻解碼,系統(tǒng)進(jìn)行視頻播放時(shí)需要考慮能否將視頻資源編碼進(jìn)單一的視頻文件中,并且解碼單個(gè)高分辨率視頻的速率可能無(wú)法支持視頻流暢播放。
對(duì)于集群的同步,文獻(xiàn)[14]在進(jìn)行視頻播放時(shí)將視頻流進(jìn)行實(shí)時(shí)網(wǎng)絡(luò)傳輸與分布式解碼,因此并未針對(duì)視頻播放提出集群同步方案;文獻(xiàn)[16]提出了兩種基于網(wǎng)絡(luò)的,面向多組應(yīng)用程序的同步方案,可以分開(kāi)進(jìn)行數(shù)據(jù)同步與刷新同步,然而其數(shù)據(jù)同步機(jī)制未對(duì)視頻播放進(jìn)行速率控制,并且并未考慮主動(dòng)立體顯示時(shí)的集群同步。對(duì)于視頻播放,文獻(xiàn)[5]和文獻(xiàn)[14]利用網(wǎng)絡(luò)傳送視頻流進(jìn)行分布式解碼,因而對(duì)網(wǎng)絡(luò)資源占用較多;文獻(xiàn)[12]和文獻(xiàn)[17]分別面向交互式應(yīng)用與虛擬現(xiàn)實(shí)應(yīng)用,采用分層與分塊的策略提升超高分辨率畫(huà)面的處理效率,然而對(duì)于視頻播放系統(tǒng)而言,分層策略并沒(méi)有必要;本項(xiàng)目組的已有研究成果[13]實(shí)現(xiàn)了集群中的視頻同步播放,然而其集群同步機(jī)制不支持主動(dòng)立體顯示技術(shù),并且只支持單個(gè)視頻文件的播放。
為了實(shí)現(xiàn)集群環(huán)境下利用主動(dòng)立體技術(shù)進(jìn)行視頻播放,本文提出了一種解決方案。其中,對(duì)于集群的同步,我們利用網(wǎng)絡(luò)通信與硬件同步技術(shù)結(jié)合,在各個(gè)節(jié)點(diǎn)之間實(shí)現(xiàn)數(shù)據(jù)同步,刷新同步,并利用幀鎖相支持集群主動(dòng)立體顯示;對(duì)于視頻播放,我們利用組合視頻對(duì)象對(duì)多個(gè)視頻文件進(jìn)行并發(fā)解碼與畫(huà)面還原。并通過(guò)實(shí)驗(yàn)驗(yàn)證了解決方案的的有效性與可行性。
在利用多投影的圖形顯示系統(tǒng)中進(jìn)行偏振立體顯示時(shí),系統(tǒng)利用兩組安裝了偏振濾光片的投影儀在投影幕上重疊投射左眼與右眼畫(huà)面,觀眾佩戴偏振眼鏡即可看到立體畫(huà)面。目前偏振立體技術(shù)已經(jīng)在國(guó)內(nèi)的數(shù)字影院中普及,然而偏振立體技術(shù)要求使用兩組投影儀,并且具有畫(huà)面亮度低的缺陷,影響觀看體驗(yàn)。主動(dòng)立體技術(shù)利用高頻率刷新的顯示器與快門眼鏡,交替為左眼與右眼顯示畫(huà)面從而營(yíng)造立體感,其原理如圖1所示:
圖1 主動(dòng)立體顯示原理
雖然這種技術(shù)要求專業(yè)顯卡與專門的顯示設(shè)備,但具有優(yōu)秀的畫(huà)面效果,現(xiàn)今很多投影儀已經(jīng)對(duì)其提供支持,該技術(shù)在商業(yè)展覽展示與數(shù)字娛樂(lè)領(lǐng)域的應(yīng)用也逐漸廣泛。
應(yīng)用主動(dòng)立體顯示要求系統(tǒng)利用具備四緩沖立體顯示功能的顯卡。四緩沖立體即在傳統(tǒng)的雙緩沖顯示基礎(chǔ)上,將前臺(tái)緩沖與后臺(tái)緩沖分別擴(kuò)展為左眼與右眼兩個(gè)緩沖,使得應(yīng)用程序可以為雙眼分別渲染畫(huà)面[15]。
由于主動(dòng)立體顯示技術(shù)要求顯示設(shè)備交替顯示左右眼畫(huà)面,集群中的多臺(tái)顯示設(shè)備的信號(hào)輸出必須進(jìn)行同步。另外,在集群中進(jìn)行視頻播放所需要的同步與其他類型應(yīng)用的同步也有不同。本文的第2節(jié)介紹了本文解決方案中的集群同步機(jī)制,顯示節(jié)點(diǎn)的同步模塊采用服務(wù)器/客戶端架構(gòu),結(jié)合了網(wǎng)絡(luò)方式與硬件方式實(shí)現(xiàn)視頻播放的數(shù)據(jù)同步與刷新同步,以及顯卡輸出信號(hào)的同步。
在利用多投影集群進(jìn)行視頻播放時(shí),必須考慮的問(wèn)題是單個(gè)顯示節(jié)點(diǎn)展示的畫(huà)面能否被編碼至單個(gè)視頻文件中,以及單個(gè)視頻文件的解碼效率是否支持其流暢播放。本文的第3節(jié)介紹了本文解決方案中的視頻解碼方式,通過(guò)構(gòu)建抽象的組合視頻對(duì)象,使系統(tǒng)能夠播放編碼為多個(gè)視頻文件的超高分辨率視頻資源,通過(guò)并發(fā)解碼,提升視頻的解碼效率。
在本文的解決方案中,集群中具有單個(gè)主節(jié)點(diǎn)和多個(gè)從節(jié)點(diǎn),主從節(jié)點(diǎn)各自的結(jié)構(gòu)如圖2所示:
圖2 主節(jié)點(diǎn)與從節(jié)點(diǎn)各自的模塊
其中各個(gè)模塊的作用如下:
組合視頻模塊負(fù)責(zé)對(duì)組合視頻進(jìn)行并發(fā)解碼與視頻幀對(duì)齊,將視頻幀進(jìn)行組合,并渲染至紋理中。
畫(huà)面渲染模塊將組合視頻生成的紋理進(jìn)行投影校正,并進(jìn)行緩沖交換以顯示畫(huà)面。
同步客戶端模塊與同步服務(wù)器進(jìn)行基于UDP協(xié)議的網(wǎng)絡(luò)通信,為組合視頻的畫(huà)面組合提供數(shù)據(jù)同步功能與刷新同步功能。
同步服務(wù)器模塊僅在主節(jié)點(diǎn)運(yùn)行,在后臺(tái)運(yùn)行多個(gè)線程,每個(gè)線程分別負(fù)責(zé)顯示集群的啟動(dòng)同步,終止同步,數(shù)據(jù)同步和刷新同步。
各個(gè)模塊之間的協(xié)作關(guān)系,如圖3所示:
圖3 顯示節(jié)點(diǎn)模塊之間的協(xié)作
每個(gè)顯示節(jié)點(diǎn)在初始化時(shí),通過(guò)配置文件判斷自身是否為主節(jié)點(diǎn),來(lái)決定是否啟動(dòng)同步服務(wù)器,并結(jié)合配置文件信息與實(shí)際硬件狀況決定是否啟用硬件同步,如圖4所示:
圖4 顯示節(jié)點(diǎn)的核心邏輯
畫(huà)面渲染模塊在顯示節(jié)點(diǎn)的畫(huà)面更新循環(huán)中進(jìn)行畫(huà)面的投影校正與更新,畫(huà)面更新循環(huán)如圖5所示:
圖5 顯示節(jié)點(diǎn)畫(huà)面更新循環(huán)流程圖
其中數(shù)據(jù)同步用于同步視頻播放進(jìn)度,刷新同步用于同步緩沖交換操作。
集群利用主動(dòng)立體顯示時(shí),必須利用幀鎖相對(duì)顯示輸出信號(hào)進(jìn)行同步。另外,在面向?qū)崟r(shí)圖形渲染的虛擬現(xiàn)實(shí)系統(tǒng)中,由于對(duì)實(shí)時(shí)性有所要求,一般要求畫(huà)面刷新率達(dá)到60Hz左右,因此對(duì)渲染時(shí)進(jìn)行的同步的性能要求也較高[16]。不同于實(shí)時(shí)圖形渲染,在視頻播放中,一方面視頻播放時(shí)的每幀畫(huà)面均必須進(jìn)行嚴(yán)格的數(shù)據(jù)同步以保證一致性,而另一方面大部分視頻的幀率不超過(guò) 30Hz,因而對(duì)程序運(yùn)行幀率要求較為寬松。因此,視頻播放集群的同步可以將軟件方式與硬件方式進(jìn)行結(jié)合,同時(shí)為偏振立體與主動(dòng)立體提供支持,具有更好的兼容性與擴(kuò)展性。
在本項(xiàng)目組已有的研究成果中[13],多投影視頻播放系統(tǒng)并未采用主動(dòng)立體顯示,也未實(shí)現(xiàn)硬件同步。由于系統(tǒng)播放單個(gè)視頻文件并且不會(huì)跳幀,因而能夠?qū)?shù)據(jù)同步與刷新同步整合為一個(gè)階段進(jìn)行。而由于本文構(gòu)建的系統(tǒng)面向主動(dòng)立體顯示,會(huì)啟用幀鎖相與刷新鎖,并且組合視頻在播放時(shí)允許跳幀,因而已有的同步機(jī)制不再適用。
本文實(shí)現(xiàn)的系統(tǒng)利用幀鎖相為集群中的顯示設(shè)備輸出信號(hào)進(jìn)行同步。另外,顯示節(jié)點(diǎn)在每次執(zhí)行畫(huà)面更新循環(huán)時(shí)也進(jìn)行軟件同步,以保證各個(gè)顯示節(jié)點(diǎn)在一致的時(shí)機(jī)顯示一致的畫(huà)面。同步模塊利用網(wǎng)絡(luò)在每次循環(huán)的畫(huà)面渲染之前與之后進(jìn)行數(shù)據(jù)同步與刷新同步;在啟用硬件同步的情況下,系統(tǒng)還會(huì)啟用刷新鎖。
以本項(xiàng)目組已有研究成果為基礎(chǔ),本文系統(tǒng)的軟件同步基于UDP通信協(xié)議,進(jìn)行數(shù)據(jù)同步與刷新同步[13]。在同步過(guò)程中,同步客戶端模塊主動(dòng)地向服務(wù)器模塊發(fā)送同步消息并等待響應(yīng);同步服務(wù)器模塊的數(shù)據(jù)同步線程與刷新同步線程被動(dòng)地等待所有客戶端模塊相應(yīng)的同步消息到達(dá),處理各自的同步邏輯之后為所有客戶端模塊發(fā)送應(yīng)答,如圖6所示:
圖6 軟件同步順序圖
軟件同步具體分為以下兩個(gè)階段進(jìn)行:
2.1.1 數(shù)據(jù)同步:
(1)每次畫(huà)面更新循環(huán)開(kāi)始時(shí),在渲染畫(huà)面之前,每個(gè)節(jié)點(diǎn)利用同步客戶端模塊發(fā)送數(shù)據(jù)同步請(qǐng)求,將組合視頻中所有視頻文件的緩存信息發(fā)送給主節(jié)點(diǎn)的同步服務(wù)器模塊,并等待響應(yīng)。
(2)主節(jié)點(diǎn)的同步服務(wù)器收到所有同步客戶端模塊的數(shù)據(jù)同步請(qǐng)求之后,基于播放計(jì)時(shí)器的時(shí)刻和每個(gè)視頻在所有節(jié)點(diǎn)上的緩存內(nèi)容,為組合視頻中所有視頻文件顯示的畫(huà)面進(jìn)行決策,將數(shù)據(jù)同步響應(yīng)發(fā)送給各個(gè)節(jié)點(diǎn)的同步客戶端模塊。
(3)每個(gè)節(jié)點(diǎn)在同步客戶端模塊收到數(shù)據(jù)同步響應(yīng)之后,依據(jù)服務(wù)器進(jìn)行的決策,開(kāi)始渲染畫(huà)面。
2.1.2 刷新同步:
(1)渲染畫(huà)面完成之后,每個(gè)節(jié)點(diǎn)利用同步客戶端模塊發(fā)送刷新同步請(qǐng)求,并等待主節(jié)點(diǎn)同步服務(wù)器模塊響應(yīng)。
(2)主節(jié)點(diǎn)上的同步服務(wù)器模塊收到所有節(jié)點(diǎn)的刷新同步請(qǐng)求之后,立即給所有節(jié)點(diǎn)的同步客戶端模塊發(fā)送刷新同步響應(yīng)。
(3)每個(gè)節(jié)點(diǎn)在同步客戶端模塊收到刷新同步響應(yīng)之后,進(jìn)行緩存交換。結(jié)束本次畫(huà)面更新循環(huán)。
專業(yè)顯卡具備與硬件同步卡配合進(jìn)行幀鎖相(Frame Lock)的能力,主流的顯卡制造商例如AMD與Nvidia等均提供旗下專業(yè)顯卡配套的同步卡[18-19]。通過(guò)將顯卡與同步卡連接,并為同步卡之間建立專用的信號(hào)鏈路,多塊顯卡將同步地向各自的顯示設(shè)備發(fā)送顯示畫(huà)面,因而可以在集群采用主動(dòng)立體顯示時(shí),使集群顯示設(shè)備同步地切換左右眼畫(huà)面。
為了在集群系統(tǒng)中啟用幀鎖相功能,集群系統(tǒng)需要有一個(gè)同步卡作為信號(hào)源服務(wù)器,為集群產(chǎn)生幀鎖相信號(hào),并使得集群中的其他同步卡作為客戶端接收此幀鎖相信號(hào)。用戶可以通過(guò)顯卡專用的控制面板在集群中的每一臺(tái)計(jì)算機(jī)上進(jìn)行幀鎖相信號(hào)配置。為所有計(jì)算機(jī)設(shè)置成功之后,整個(gè)集群即進(jìn)入幀鎖相。
除幀鎖相之外,硬件同步技術(shù)還能夠在多個(gè)應(yīng)用程序之間實(shí)現(xiàn)刷新鎖(Swap Lock),在這種情況下,應(yīng)用程序進(jìn)行的緩存交換操作將被同步執(zhí)行。為使得多組應(yīng)用程序能夠分別利用刷新鎖進(jìn)行緩存交換同步,硬件同步技術(shù)中存在刷新組(Swap Group)與刷新柵欄(Swap Barrier)的概念,從而對(duì)刷新鎖進(jìn)行層級(jí)式的控制,如圖7所示:
圖7 硬件刷新同步的刷新組與刷新柵欄
每個(gè)刷新柵欄可以為多個(gè)刷新組實(shí)現(xiàn)同步,而每個(gè)刷新組可以為多個(gè)窗口實(shí)現(xiàn)同步。刷新鎖功能至少支持1個(gè)刷新柵欄與1個(gè)刷新組。應(yīng)用程序通過(guò)如下方式為自身啟用和禁用刷新鎖:
結(jié)合了軟件同步與硬件同步的集群同步如圖8所示:
圖8 軟件與硬件結(jié)合的集群同步
集群將為所有節(jié)點(diǎn)提供基于網(wǎng)絡(luò)的刷新同步,并且刷新鎖將自動(dòng)為啟用硬件同步的節(jié)點(diǎn)額外進(jìn)行基于硬件的刷新同步。通過(guò)利用軟件與硬件對(duì)緩存交換操作進(jìn)行雙重同步,系統(tǒng)能夠?yàn)槠窳Ⅲw與主動(dòng)立體均提供支持。
在本項(xiàng)目組的已有研究成果中,多投影視頻播放系統(tǒng)只進(jìn)行單視頻文件的逐幀播放[9]。然而此類系統(tǒng)上播放的視頻質(zhì)量大多為高清晰度的立體視頻,具有超高的分辨率,使得視頻解碼的效率成為系統(tǒng)性能的瓶頸,對(duì)單個(gè)超高分辨率視頻文件進(jìn)行解碼的速度可能無(wú)法使得視頻流暢播放,并且未能充分利用現(xiàn)代多核計(jì)算機(jī)的并行處理能力。為了解決此問(wèn)題,一些研究設(shè)計(jì)了分布式的視頻解碼方案[5,14],但分布式的視頻解碼對(duì)網(wǎng)絡(luò)帶寬要求較高,并且存在對(duì)視頻格式的支持性問(wèn)題。在虛擬現(xiàn)實(shí)系統(tǒng)中,可以通過(guò)對(duì)視頻內(nèi)容進(jìn)行分層,在運(yùn)行時(shí)按照需求動(dòng)態(tài)切換不同質(zhì)量的視頻畫(huà)面,從而提升系統(tǒng)效率[17],但視頻播放系統(tǒng)絕大部分只顯示原始清晰度的視頻內(nèi)容,沒(méi)有必要采用分層技術(shù)。
本文實(shí)現(xiàn)了一種組合視頻對(duì)象,使得用戶可以將單個(gè)超高分辨率的視頻資源編碼為多個(gè)分塊的視頻文件,從而在播放時(shí)可以進(jìn)行并發(fā)解碼,該方案提升了解碼速率,節(jié)約網(wǎng)絡(luò)帶寬,支持廣泛的視頻格式,并且使得系統(tǒng)可以播放分辨率超過(guò)視頻文件編碼技術(shù)分辨率上限的視頻。
在用戶為超高分辨率的視頻資源進(jìn)行分塊編碼時(shí),生成的多個(gè)視頻文件之間可能出現(xiàn)時(shí)間軸的偏差或異常。為了應(yīng)對(duì)這種情況,本文還為組合視頻設(shè)計(jì)了基于視頻幀對(duì)齊的畫(huà)面選擇策略。
用戶對(duì)組合視頻進(jìn)行配置的圖形界面如圖9所示:
圖9 組合視頻配置界面
可以指定組合視頻的分辨率,時(shí)長(zhǎng),畫(huà)面格式以及子視頻信息等。用戶配置完成的組合視頻的所有資源以及配置文件將被集中在一個(gè)專門的文件夾內(nèi),方便移動(dòng)與傳送。
由于用戶為組合視頻準(zhǔn)備的切塊視頻文件可能有多種切分方式,單塊視頻文件的立體格式可能為左右排列,上下排列或左右分離。為了應(yīng)對(duì)多樣的切分方式,組合視頻支持對(duì)多種不同立體格式的視頻文件進(jìn)行組合,在播放時(shí)自動(dòng)將視頻的左右畫(huà)面分別輸出至組合視頻的左右畫(huà)面上。
在運(yùn)行時(shí),系統(tǒng)采用 DirectShow[20]進(jìn)行視頻解碼并獲取每幀畫(huà)面,為了能夠充分發(fā)揮多核計(jì)算機(jī)的并行處理能力,組合視頻中的每個(gè)視頻文件均有專用的解碼線程與解碼緩存。解碼線程由 DirectShow自動(dòng)創(chuàng)建,完成每幀畫(huà)面的解碼后將通過(guò)回調(diào)函數(shù)傳遞視頻幀緩存。
解碼緩存基于循環(huán)鏈表結(jié)構(gòu),如圖10所示:
圖10 循環(huán)鏈表緩存
并且利用互斥鎖實(shí)現(xiàn)線程安全性,從而允許解碼線程與渲染線程作為生產(chǎn)者與消費(fèi)者,同時(shí)對(duì)緩存中的不同單元進(jìn)行存取操作。作為生產(chǎn)者的解碼線程完成一幀的解碼后,將視頻幀放入緩存中并設(shè)為占用狀態(tài),使得緩存內(nèi)容增加。作為消費(fèi)者的主線程在每個(gè)畫(huà)面更新周期中從緩存內(nèi)查找應(yīng)當(dāng)顯示的視頻幀,并將過(guò)期的視頻幀設(shè)為空閑狀態(tài),使緩存內(nèi)容減少。當(dāng)緩存內(nèi)容增加或減少時(shí),緩存將依據(jù)自身占用率對(duì)解碼器的行為進(jìn)行調(diào)度,以避免緩存饑餓或溢出,如以下偽代碼所示。
在圖形顯示系統(tǒng)的應(yīng)用場(chǎng)景中,視頻播放具有一定的特殊性,在運(yùn)行時(shí)必須依照視頻幀的時(shí)間戳對(duì)集群的畫(huà)面進(jìn)行同步。而對(duì)視頻資源進(jìn)行切分然后并發(fā)解碼帶來(lái)的一個(gè)問(wèn)題是,系統(tǒng)運(yùn)行時(shí),解碼線程的調(diào)度具有不確定性,在為組合視頻選擇視頻幀時(shí),必須依照所有子視頻的解碼緩存內(nèi)容進(jìn)行決策,以使得每一次刷新畫(huà)面時(shí)組合視頻中的每個(gè)子視頻顯示的畫(huà)面具有時(shí)間一致性。
在理想情況下,組合視頻中的所有子視頻的時(shí)間軸均良好對(duì)齊,每幀一致的畫(huà)面都具有完全一致的時(shí)間戳。在這種情況下,一種簡(jiǎn)單的視頻幀選擇策略如下:
(1)對(duì)每個(gè)視頻,獲取所有節(jié)點(diǎn)上該視頻緩存中已被解碼的視頻幀的時(shí)間戳區(qū)段,對(duì)這些區(qū)段求交集,得出視頻的集群緩存時(shí)間段,也即集群中該視頻目前解碼就緒,可以顯示畫(huà)面的時(shí)間段。
(2)對(duì)上述步驟求出的所有視頻的集群緩存時(shí)間段求交集,得出的時(shí)間段即為組合視頻當(dāng)前有同步畫(huà)面可以顯示的集群緩存時(shí)間段。
(3)依照當(dāng)前播放計(jì)時(shí)器時(shí)間與該時(shí)間段決定組合視頻的實(shí)際播放進(jìn)度,進(jìn)而為每個(gè)視頻文件進(jìn)行視頻幀選擇。
這種簡(jiǎn)單的視頻幀選擇策略可以使得組合視頻能夠靈活控制播放行為與速率,并且具備良好的兼容性。但在現(xiàn)實(shí)中,對(duì)視頻資源進(jìn)行分塊編碼時(shí),視頻文件可能并不完美,視頻幀的時(shí)間戳可能出現(xiàn)異常情況,例如多個(gè)視頻之間,起始時(shí)間戳未能良好對(duì)齊,或某視頻從某幀開(kāi)始時(shí)間戳標(biāo)定出現(xiàn)偏差,以及某個(gè)視頻在編碼時(shí)出現(xiàn)偶然的丟幀等。在這種情況下,簡(jiǎn)單的視頻幀選擇策略有可能失效。如圖11所示:
圖11 簡(jiǎn)單同步策略可能出現(xiàn)的失效
假定組合視頻被分為兩個(gè)部分Part1與Part2,并且兩部分的時(shí)間軸出現(xiàn)了偏差,當(dāng)計(jì)時(shí)器時(shí)刻恰好處在同步的兩幀的時(shí)間戳之間時(shí),簡(jiǎn)單的視頻幀選擇策略將會(huì)選擇實(shí)質(zhì)上不一致的視頻幀。
因此,我們?cè)O(shè)計(jì)了具有一定容錯(cuò)性的視頻幀對(duì)齊算法,如圖12所示:
圖12 通過(guò)組合幀進(jìn)行畫(huà)面選擇
在組合視頻每次從所有緩存中選擇幀時(shí),首先依照視頻幀的時(shí)間戳進(jìn)行組合幀對(duì)齊,并允許組合幀所包含的視頻幀的時(shí)間戳具有一定偏差,從而使得具有偏差的視頻幀能夠?qū)R,再依照組合幀緩存選擇組合幀;若未能為當(dāng)前播放時(shí)間選擇合適的組合幀,則采用備用的簡(jiǎn)單視頻幀選擇策略。這種視頻幀對(duì)齊算法實(shí)質(zhì)上是對(duì)原始視頻幀信息進(jìn)行抽象與包裝,以此為基礎(chǔ)實(shí)現(xiàn)較復(fù)雜的同步邏輯,它能夠彌合不同視頻文件之間的時(shí)間軸偏差,并且在遇到某視頻丟幀時(shí)自動(dòng)跳過(guò)丟失幀所屬的組合幀。
視頻幀對(duì)齊算法的執(zhí)行步驟如下:
(1)組合幀對(duì)齊:按照時(shí)間戳順序,為每一個(gè)尚不屬于任何組合幀的視頻幀進(jìn)行組合幀對(duì)齊:定義組合幀內(nèi)所有視頻幀時(shí)間戳的分布范圍上限為 FRAME_GROUP_THRESHOLD,選擇該幀附近此上限范圍內(nèi)的所有視頻幀,組成一個(gè)集合,若集合內(nèi)包含該組合視頻所有視頻文件的幀,則可以認(rèn)為該幀集合包含一個(gè)組合幀,其畫(huà)面具有一致性。將每個(gè)視頻緩存中與該幀最接近的視頻幀組成的集合作為組合幀,加入組合幀緩存中,如圖13所示:
圖13 組合幀對(duì)齊
(2)組合幀選擇:在組合幀對(duì)齊完成之后,從中選擇時(shí)間戳平均值早于當(dāng)前時(shí)刻的最新的組合幀進(jìn)行顯示。
(3)備用策略:若未能夠找到適于顯示的組合幀,則退而采用簡(jiǎn)單的視頻幀選擇策略,前提是每個(gè)緩存中均找到了早于當(dāng)前時(shí)間的視頻幀。這是為了避免尚未完全解碼的組合幀的一部分視頻幀被提前顯示而導(dǎo)致畫(huà)面不同步。
該算法的運(yùn)行參數(shù)為進(jìn)行組合幀對(duì)齊時(shí)的時(shí)間戳偏差閾值,也即FRAME_GROUP_THRESHOLD,其控制了算法的容錯(cuò)性:如果閾值選擇過(guò)小,則視頻幀對(duì)齊算法不能很好地發(fā)揮其容錯(cuò)性,從而退化為簡(jiǎn)單的視頻幀選擇策略;如果閾值選擇過(guò)大,則會(huì)導(dǎo)致組合幀對(duì)齊時(shí)將不一致的畫(huà)面幀匹配為組合幀,效果反而不如簡(jiǎn)單的視頻幀選擇策略。在實(shí)際應(yīng)用中,我們采用組合視頻中每個(gè)子視頻標(biāo)定幀間隔最小值的四分之一,為組合幀的時(shí)間戳偏差閾值,使得在視頻幀率較低的情況下,組合幀的匹配要求也隨之降低,在視頻幀率較高的情況下,組合幀的匹配要求也隨之而提升。
在實(shí)驗(yàn)中,本文搭建了具有兩個(gè)顯示節(jié)點(diǎn)的數(shù)字媒體顯示系統(tǒng),通過(guò)幾何校正與顏色校正將投影畫(huà)面進(jìn)行拼接融合。測(cè)試環(huán)境配置如圖14所示:
圖14 實(shí)驗(yàn)系統(tǒng)架構(gòu)
具體配置如表1所示:
表1 測(cè)試環(huán)境配置
其中,主節(jié)點(diǎn)連接Nvidia 3D Vision立體信號(hào)發(fā)射器,為快門眼鏡提供立體信號(hào)。兩臺(tái)顯示節(jié)點(diǎn)通過(guò)局域網(wǎng)進(jìn)行網(wǎng)絡(luò)通信。
在實(shí)驗(yàn)中,我們?cè)谥鞴?jié)點(diǎn)上收集并統(tǒng)計(jì)組合視頻進(jìn)行視頻幀選擇的運(yùn)行耗時(shí),以及兩個(gè)節(jié)點(diǎn)上基于網(wǎng)絡(luò)的數(shù)據(jù)同步與刷新同步各自的等待耗時(shí)。實(shí)驗(yàn)共進(jìn)行5次,每次連續(xù)收集3000幀的數(shù)據(jù)并進(jìn)行統(tǒng)計(jì)。統(tǒng)計(jì)數(shù)據(jù)顯示幀選擇算法平均運(yùn)行耗時(shí)不超過(guò)1ms,數(shù)據(jù)同步平均耗時(shí)2.7ms,刷新同步平均耗時(shí)2.1ms。在同步模式下播放的4K分辨率視頻表現(xiàn)流暢平滑。由于開(kāi)啟了幀同步,兩個(gè)節(jié)點(diǎn)能夠同步為左眼與右眼顯示正確的畫(huà)面。顯示節(jié)點(diǎn)畫(huà)面刷新率平均為47.0Hz,啟用刷新鎖的緩沖交換操作平均耗時(shí) 10.8ms,這種開(kāi)銷一部分來(lái)自于正常的同步開(kāi)銷,另一部分由于啟用刷新鎖時(shí)會(huì)自動(dòng)啟用垂直同步,程序的緩沖交換操作只能在60Hz的顯示輸出信號(hào)周期之間執(zhí)行。
為了驗(yàn)證并發(fā)解碼機(jī)制的有效性,我們使組合視頻開(kāi)啟極速播放模式,在進(jìn)行選擇畫(huà)面時(shí)不以播放計(jì)時(shí)器為參考,而總是選擇最新的可用畫(huà)面,在這種模式下,視頻的播放速度與解碼速度成正比。測(cè)試視頻使用4096 * 2304分辨率,每秒23幀,XVID編碼格式,總碼率45.4Mbps的視頻資源分別切割為2個(gè)、4個(gè)、8個(gè)視頻文件作為組合視頻進(jìn)行播放,并與原始文件進(jìn)行對(duì)比實(shí)驗(yàn)。視頻時(shí)長(zhǎng)40s,每渲染5幀畫(huà)面記錄一次實(shí)際時(shí)間與視頻進(jìn)度,實(shí)驗(yàn)重復(fù)3次。實(shí)驗(yàn)數(shù)據(jù)統(tǒng)計(jì)結(jié)果如表2所示:
表2 不同切分?jǐn)?shù)下平均解碼速率比
其中解碼速率比意為給定時(shí)間內(nèi)播放時(shí)長(zhǎng)與實(shí)際時(shí)長(zhǎng)的比值,該比值與視頻解碼速率成正比,當(dāng)該比值小于 1時(shí),意味著視頻解碼速率低于視頻正常速率,視頻無(wú)法流暢播放;當(dāng)該比值大于1時(shí),則意味著視頻解碼速率高于視頻正常播放速率,視頻可以流暢播放。由數(shù)據(jù)可看出,當(dāng)視頻被切為2塊進(jìn)行播放時(shí),相比于單個(gè)文件播放已經(jīng)表現(xiàn)出了解碼速率提升,切為4塊時(shí)解碼速率進(jìn)一步提升,當(dāng)切塊數(shù)變?yōu)?份時(shí)解碼速率反而有所下降,這是由于顯示節(jié)點(diǎn)使用的CPU具有4個(gè)核心,當(dāng)視頻切塊過(guò)多時(shí)并發(fā)解碼將導(dǎo)致頻繁的線程切換。總體而言,對(duì)視頻進(jìn)行切塊進(jìn)行并發(fā)解碼確實(shí)對(duì)視頻解碼的速率有所提升。
我們利用以上測(cè)試環(huán)境,在柱面幕上播放立體格式的《阿凡達(dá)》,系統(tǒng)運(yùn)行效果如圖15、16所示:
圖15 系統(tǒng)運(yùn)行效果圖
圖16 主動(dòng)立體效果
本文面向基于多投影和主動(dòng)立體顯示的視頻播放系統(tǒng)中的集群同步與視頻播放,提出了一套解決方案。針對(duì)集群中的主動(dòng)立體顯示,設(shè)計(jì)了軟件與硬件結(jié)合的集群同步方式,為視頻播放,畫(huà)面刷新,主動(dòng)立體三個(gè)方面進(jìn)行了同步。針對(duì)系統(tǒng)解碼視頻資源的效率,提出一種組合視頻對(duì)象,通過(guò)在播放時(shí)進(jìn)行并發(fā)解碼提高效率,從而充分利用了多核計(jì)算機(jī)的并行處理能力,并且避開(kāi)了單個(gè)視頻文件的分辨率上限。實(shí)驗(yàn)證明本文提出的解決方案確實(shí)有效可行。未來(lái),我們將根據(jù)技術(shù)的發(fā)展與用戶的需求,繼續(xù)研究面向多投影主動(dòng)立體顯示的視頻播放系統(tǒng),進(jìn)一步提高系統(tǒng)的靈活性,高效性和可靠性。
[1] Ni T, Schimidt G, Staadt O, et al. A survey of large high-resolution display technologies, techniques, and applications[C]. Proc. IEEE Virtual Reality, 2006:223-226.
[2] Brown M, Majumder A, and Yang R. Camera-Based Calibration Techniques for Seamless Multi-projector Displays[C]. IEEE Transactions on Visualization and Computer Graphics. 2005: 11(2):193-206.
[3] Bhasker E, Juang R, Majumder A. Registration techniques for using imperfect and partially calibrated devices in planer multi-projector displays[C]. IEEE Transactions on Visualization and Computer Graphics,2007: 1368-1375.
[4] Chen Y, Chen H, Clark D, et al. Software environments for cluster-based display systems[C].Proc. First IEEE/ACM International Symposium on Cluster Computing and the Grid. 2011: 202-211.
[5] Chen H, Li K, Wei B. A parallel ultra-high resolution mpeg-2 video decoder for pc cluster based tiled display system[C]. Proceedings of IEEE International Parallel and Distributed Processing Symposium, 2002: 15-22.
[6] Renambot L, Rao A, Singh R, et al. SAGE: the Scalable Adaptive Graphics Environment[J]. WACE,2004: 23-24.
[7] Marrinan T, Aurisano J, Nishimoto A, et al. SAGE2: A New Approach for Data Intensive Collaboration Using Scalable Resolution Shared Displays[C]. Proc. the 10th IEEE International Conference on Collaborative Computing: Networking, Applications and Worksharing. 2014: 177 - 186.
[8] Dataton Inc [OL]. http://www.dataton.com/.
[9] Jiang Z, Mao Z, Qin B, et al. A high resolution video display system by seamlessly tiling multiple projectors[C]. Proc. IEEE International Conference on Multimedia and Expo, 2007: 2070-2073