亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        多屏軟拼接系統(tǒng)的設(shè)計與實現(xiàn)

        2011-11-24 06:59:46高紅霞
        關(guān)鍵詞:視頻流視頻文件服務(wù)器端

        高紅霞, 郜 偉

        (1.河南工程學(xué)院 計算機(jī)科學(xué)與工程系,河南 鄭州 451191;2.信息工程大學(xué) 理學(xué)院,河南 鄭州 450000)

        近年來,多屏顯示在監(jiān)控、指揮、調(diào)度、公安、消防、軍事、氣象等領(lǐng)域獲得了越來越廣泛的應(yīng)用.應(yīng)用時,通常需要將多個屏幕或投影儀拼接成一個大的屏幕,以滿足顯示的需求.在此類系統(tǒng)中,視頻畫面的分割一直是核心問題之一.為達(dá)到優(yōu)良的顯示效果,一般選擇基于硬件的視頻畫面分割器來實現(xiàn)畫面的分割.目前,多屏系統(tǒng)中比較有代表性的是VATION PRO多屏圖像處理器和QIWEI-2003多屏拼接技術(shù),這兩種系統(tǒng)都能提供優(yōu)良的畫面效果,但其昂貴的硬件成本及高端的定位無法滿足大部分普通用戶的需求.對于那些對畫面質(zhì)量要求不是太高的普通用戶,低成本實現(xiàn)大面積的顯示才是其需要的.本文主要研究利用軟件的方法來處理視頻畫面分割,以解決成本問題.

        圖1 系統(tǒng)總體流程圖Fig.1 Overall system flow chart

        1 系統(tǒng)的總體設(shè)計

        1.1 系統(tǒng)的總體流程

        系統(tǒng)的總體設(shè)計如圖1所示.用戶在服務(wù)器界面選擇發(fā)送桌面工作模式或發(fā)送視頻文件工作模式,服務(wù)器根據(jù)局域網(wǎng)內(nèi)連接的客戶端數(shù)目確定分割方案,把桌面或視頻文件畫面劃分為相適應(yīng)的塊數(shù),并根據(jù)用戶的發(fā)送配置以壓縮視頻流的形式為各客戶端發(fā)送適當(dāng)?shù)漠嬅嬉詽M足客戶端上顯示屏空間分布的需求.客戶端接收服務(wù)器發(fā)來的視頻流信息后,通過譯碼解壓重建畫面并向服務(wù)器端發(fā)送主機(jī)IP等有關(guān)信息.

        1.2 系統(tǒng)服務(wù)器端功能模塊的劃分

        從系統(tǒng)流程可以看出服務(wù)器端應(yīng)實現(xiàn)如下功能:

        (1)服務(wù)器端以視頻流的形式發(fā)送本機(jī)桌面到客戶端,并根據(jù)鏈接的客戶端數(shù)目智能選擇劃分塊數(shù);

        (2)服務(wù)器端以視頻流的形式為客戶端播放視頻文件,并根據(jù)鏈接的客戶端數(shù)目智能選擇劃分塊數(shù);

        (3)服務(wù)器端為客戶端選擇所顯示的內(nèi)容以滿足客戶端顯示屏空間分布的需求.

        總的來說,服務(wù)器端主要完成桌面及視頻文件的捕獲、視頻的分割、視頻發(fā)送、視頻壓縮等功能,其功能模塊也就相應(yīng)地分為桌面捕獲處理模塊、視頻文件捕獲處理模塊、視頻分割處理模塊和視頻發(fā)送處理模塊[1].

        ①桌面捕獲處理模塊

        該模塊利用DirectShow提供的PushSource Desktop濾波器捕獲實時的桌面畫面,輸出一個未壓縮的Video信號.

        ②視頻文件捕獲處理模塊

        該模塊利用DirectShow提供的File Source濾波器捕獲視頻文件,輸出一個已編碼的Stream信號.

        ③視頻分割處理模塊

        該模塊接收未壓縮的視頻流信號,根據(jù)連接的客戶端數(shù)目對流信號進(jìn)行分割,輸出相應(yīng)個數(shù)的未壓縮流信號.

        ④視頻發(fā)送處理模塊

        該模塊把分割后的流信號進(jìn)行壓縮后再發(fā)送到相應(yīng)客戶端.這里,服務(wù)器端可以設(shè)置分割后視頻流信號的流向.

        1.3 系統(tǒng)服務(wù)器端的軟件構(gòu)架設(shè)計

        本文采用DirectShow編程技術(shù),盡可能使用其本身提供的濾波器(Filter).要實現(xiàn)服務(wù)器功能,只需自行開發(fā)一個能接收上游濾波器傳來的視頻流信息并根據(jù)分割方案把視頻畫面劃分為相應(yīng)塊數(shù)、之后把分割處理后的視頻流信息提供給Filter Graph中下游濾波器進(jìn)行下一步處理的Transform Filter.

        由服務(wù)器功能可知,F(xiàn)ilter Graph的構(gòu)建并不是固定的,在不同的工作模式和分割方案下有不一樣的Filter Graph.下面以發(fā)送視頻文件模式下劃分2個畫面為例說明Filter Graph的構(gòu)建,如圖2所示.

        圖2 發(fā)送視頻文件并劃分兩畫面的Filter GraphFig.2 Send video and divide into two screen Filter Graph

        圖2中,A部分的構(gòu)建取決于選擇何種工作模式,在選擇發(fā)送視頻文件的情況下,服務(wù)器將選取上圖的3個Filter.File Source完成視頻文件的捕獲工作;Splitter把接收的視頻信息分離為視頻流和音頻流,在這里我們只需要視頻流;Ffdshow Video Decoder解碼所接收的視頻流.這3個Filter都是 DirectShow本身所提供的,它們共同構(gòu)成了服務(wù)器的視頻捕獲處理模塊.圖2中,VidoeCut Fliter根據(jù)分割方案把接收的視頻流進(jìn)行畫面劃分,分塊后的視頻流通過相應(yīng)接口傳往下游Filter.這個Filter需要自行開發(fā),DirectShow本身并沒有滿足需要的Filter,VidoeCut Filter單獨(dú)構(gòu)成了服務(wù)器的視頻分割處理模塊.圖2中,B部分為服務(wù)器的發(fā)送處理模塊,其構(gòu)建由分割方案所決定,采用動態(tài)加入Filter的形式,分割為幾塊就為幾個VidoeCut Filter的輸出接口.創(chuàng)建下游Filter鏈路,把分割后的視頻流進(jìn)行壓縮并發(fā)送.其中,A部分在發(fā)送桌面工作的模式下時,F(xiàn)ilter組成如圖3所示.

        圖3 桌面捕獲處理模塊Fig.3 Desktop capture processing module

        由圖3可知,桌面捕獲處理模塊也由一個Filter構(gòu)成,其捕獲的視頻流未經(jīng)編碼和壓縮可直接傳往視頻分割處理模塊.

        服務(wù)器端設(shè)計為發(fā)送桌面和發(fā)送視頻文件兩種工作模式,一方面是考慮到盡可能使用DirectShow本身提供的Filter,降低開發(fā)難度;另一方面也考慮到了發(fā)送桌面和發(fā)送視頻文件時捕獲幀率的要求不一樣,分開處理能減輕網(wǎng)絡(luò)通信的負(fù)載.

        2 系統(tǒng)模塊的設(shè)計與實現(xiàn)

        在服務(wù)器端中使用DirectShow提供的Filter完成一些底層相關(guān)內(nèi)容的操作,大大降低了系統(tǒng)開發(fā)的難度.我們只需知道每個Filter的輸入和輸出,而無需了解它是如何實現(xiàn)的.在服務(wù)器端主要實現(xiàn)了視頻分割Filter(VideoCut Filter).

        2.1 視頻分割Filter的設(shè)計

        圖4 VideoCut Filter基本框架Fig.4 VideoCut Filter basic framework

        本視頻分割Filter(VideoCut Filter)負(fù)責(zé)從上方的Filter接收視頻流數(shù)據(jù),按照分割方案處理后,發(fā)送到下游視頻發(fā)送處理模塊,屬于Transform Filter類型.

        本文設(shè)計Filter的最大分割塊數(shù)為4塊,對每一塊提供預(yù)覽接口,VideoCut Filter的基本框架見圖4.

        2.1.1 Filter及其Pin口的基類選型

        視頻分割VideoCut Filter選擇CTransformFilter作為VideoCut Filter的基類.因為,VideoCut Filter Crossbar Filter實現(xiàn)的是單輸入、多輸出的Filter,需要將輸入sample寫入到新的輸出buffer中,這種情況一般選CTransformFilter作為基類.

        當(dāng)Filter的基類選定了之后,Pin的基類也就相應(yīng)選定了.VideoCut Filter輸出Pin的實現(xiàn),需要實現(xiàn)基類所有的純虛函數(shù),除了CheckMediaTyp進(jìn)行媒體類型檢查外,還有GetMediaTyp提供支持的媒體類型,DecideBufferSize決定Sample使用內(nèi)存的大小,F(xiàn)illBuffer為即將傳送出去的Sample填充數(shù)據(jù).

        2.1.2 分割原理

        在DirectShow提供的CTransformFilter類中,上游Filter傳來的視頻流媒體結(jié)構(gòu)中有一個bmiHeader數(shù)據(jù)成員,這個成員是BITMAPINFOHEADER結(jié)構(gòu)[2],這個結(jié)構(gòu)的定義如下:

        Typedef struct tagBITMAPNFOHEADER{

        DWORD biSize;

        LONG biWidth;

        LONG biHeight;

        WORD biplanes;

        WORD biBitCount;

        DWORD biCompression;

        DWORD biSizeImage;

        LONG biXPelsPerMeter;

        LONG biYPelsPerMeter;

        DWORD biClrUsed;

        DWORD biClrImportant;

        }BITMAPNFOHEADER;

        這個結(jié)構(gòu)有兩個結(jié)構(gòu)成員,biWidth 和biHeighto.

        視頻流媒體結(jié)構(gòu)中還有一個rcSource數(shù)據(jù)成員,同時也有一個rcTarget成員,這里我們假設(shè)有兩個Filter A和B,假如這兩個Filter與視頻流媒體數(shù)據(jù)類型相連,A在左邊,是上游的filter ,B在右邊,是下游的Filter.在這兩個Filter間傳遞的buffer具有一定的尺寸,可以用bmiFleader.biWidth,bmiFleader.biFleight來標(biāo)記.

        Filter A接收到輸入視頻流后,將該輸入視頻的一部分?jǐn)U展填充到buffer里面的rcTarget區(qū)域中,填充的部分的大小根據(jù)rcSource和輸出數(shù)據(jù)媒體類型的大小而定,也就是rcSource和biWidth, biHeight比較.如果rcSource為空,F(xiàn)ilter A就會將全部的輸入pin拷貝到rcTarget;如果rcTarget為空,那么Filter A就會將視頻填充到整個的輸出buffer中.

        例如:假定Filter A接收的視頻圖像為160*120單位為像素,假定A和B連接的時候采用如下的數(shù)據(jù)類型:

        (biWidth, biHeight): 320,240

        RcSource:(0, 0, 0, 0)

        RcTarget:(0, 0, 0, 0)

        這就意味著Filter A就會將它接收到的視頻數(shù)據(jù)x方向和Y方向乘以2以后填充到320*240的輸出bufer中.

        本文設(shè)置的視頻圖像分辨率為1 280*800像素.對stream00~stream11,相應(yīng)的構(gòu)造RcSource00~ RcSource11,在不同分割方案下“RcSource”的值也不一樣.分成4塊時,媒體類型設(shè)置如下:

        Stream00:

        (biWidth, biHeight): 1280,800

        rcSource00:(0, 0, 640,400)

        rcTarget00:(0,0, 0,0)

        即Stream00輸出的視頻圖像為原視頻圖像的左上角1/4圖像擴(kuò)展為1 280*800像素分辨率后的圖像.

        Stream01:

        (biWidth, biHeight): 1280,800

        rcSource01:(640, 0, 1280,400)

        rcTarget01:(0,0, 0,0)

        同樣的,Stream01輸出的視頻圖像為原視頻圖像的右上角.

        Stream10:

        (biWidth, biHeight): 1280,800

        rcSource10:(0,40 0, 640,400)

        rcTarget10:(0,0, 0,0)

        Stream10輸出的視頻圖像為原視頻圖像的左下角.

        Stream11:

        (biWidth, biHeight): 1280,800

        rcSource11:(640,400, 1280,800)

        rcTarget11:(0,0, 0,0)

        Stream11輸出的視頻圖像為原視頻圖像的右下角,分塊情況如圖5所示.

        圖5 分塊示意圖Fig.5 Block diagram

        圖6 視頻分割Filter工作流程Fig.6 Video segmentation Filter workflow

        2.1.3 工作流程

        視頻分割Filter的工作流程如圖6所示.

        在開發(fā)Filter時重寫了GetMediaTyp虛函數(shù),根據(jù)分割方案為每個rcSource和rcTarget指定不同的媒體類型,以實現(xiàn)畫面分割效果.

        2.1.4 服務(wù)器端內(nèi)容的智能劃分

        服務(wù)器端根據(jù)實際成功連接客戶端的數(shù)目,自動將服務(wù)器端的顯示內(nèi)容劃分為客戶端個數(shù)的塊數(shù),顯示內(nèi)容的排列方式需要根據(jù)實際的要求進(jìn)行手工調(diào)節(jié),具體劃分過程如圖7所示.

        圖7 服務(wù)器端內(nèi)容智能劃分過程Fig.7 Server-side content divide into the process of intelligence

        2.2 桌面及視頻文件捕獲模塊的設(shè)計

        (1)桌面捕獲模塊利用DirectShow提供的PushSource Desktop濾波器來捕獲即時的桌面畫面[3].PushSource Desktop濾波器的基本構(gòu)架如圖 8所示.

        PushSource Desktop濾波器捕獲桌面畫面后輸出媒體格式為:

        Major Type:Video

        Sub Type:RGB32

        Format:RGB 1280*800,32bit

        圖8 PushSource Desktop 濾波器Fig.8 PushSource Desktop filter

        rcSrc=(0,0,0,0)

        rcDst=(0,0,0,0)

        PushSource Desktop濾波器中捕獲的幀率有如下幾種

        // UNITS = 10 ^ 7

        // UNITS / 30 = 30 fps;

        // UNITS / 20 = 20 fps, etc

        const REFERENCE_TIME FPS_30 = UNITS / 30;

        ……

        ……

        const REFERENCE_TIME FPS_1 = UNITS / 1;

        本文設(shè)置為FPS_5,即幀率為5 fps.

        (2)視頻文件的捕獲部分主要利用DirectShow提供的File Source濾波器捕獲視頻文件.File Source濾波器基本構(gòu)架如圖9所示.

        圖9 File Source濾波器Fig.9 File Source filter

        File Source濾波器提供了一個輸出接口和一個預(yù)覽接口,輸出的媒體格式與源文件有關(guān),例如源文件為AVI格式,則輸出媒體格式為:

        Major Type: Stream - Video

        Sub Type: Avi

        GUID_NULL

        利用預(yù)覽接口我們可以看到捕獲的效果.

        2.3 服務(wù)器端界面設(shè)計

        一個好用的程序應(yīng)當(dāng)有友好的界面,服務(wù)器端界面的設(shè)計如圖10所示.界面左邊顯示了當(dāng)前連接的客戶端數(shù)目、本機(jī)IP、桌面捕獲的預(yù)覽屏幕和發(fā)送控制;右邊顯示了分塊預(yù)覽屏幕,各屏幕下的組合框用于選擇本塊發(fā)送的方向.服務(wù)器默認(rèn)選擇為發(fā)送桌面,當(dāng)有客戶端連接時,系統(tǒng)根據(jù)連接數(shù)自動選擇分塊方案(最多分為4塊),單擊開始發(fā)送之后,左側(cè)預(yù)覽屏幕出現(xiàn)本機(jī)桌面圖像,右側(cè)預(yù)覽屏幕出現(xiàn)桌面分塊后的圖像,在組合框中選擇本塊發(fā)往的主機(jī)IP.點(diǎn)擊發(fā)送視頻選擇框,再單擊開始發(fā)送,則首先彈出文件瀏覽對話框,之后的控制與發(fā)送桌面一樣,此時預(yù)覽屏幕顯示視頻文件畫面.

        圖10 桌面捕獲Fig.10 Desktop capture

        3 結(jié)論

        隨著多媒體技術(shù)的飛速發(fā)展,視頻技術(shù)已在越來越多的領(lǐng)域中得到了廣泛應(yīng)用.本文主要研究采用DirectShow系統(tǒng)來實現(xiàn)多屏軟拼接系統(tǒng)服務(wù)器端的桌面捕獲、視頻文件捕獲和視頻分割.隨著技術(shù)的不斷發(fā)展,視頻分割的準(zhǔn)確率將會越來越高,拼接效果也會越來越好,人為交互將會減少,而運(yùn)算的成本會越來越低.

        參考文獻(xiàn):

        [1] 陸其明.DirectShow實務(wù)精選[M].北京:科海電子出版社,2004:45-49.

        [2] 許宏竹.基于DirectShow的流媒體的應(yīng)用和研究[M].北京:北京郵電大學(xué)出版社,2007:63-73.

        [3] 邱換春.基于嵌入式Linux和DirectShow的網(wǎng)絡(luò)攝像機(jī)軟件設(shè)計[M].合肥:合肥工業(yè)大學(xué)出版社,2009:36-58.

        猜你喜歡
        視頻流視頻文件服務(wù)器端
        流媒體視頻文件相似性識別的方法
        邊緣實時視頻流分析系統(tǒng)配置動態(tài)調(diào)整算法研究
        隨心定制視頻文件的縮略圖
        電腦報(2021年23期)2021-07-23 17:36:18
        基于視頻流傳輸中的擁塞控制研究
        淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
        成功(2018年10期)2018-03-26 02:56:14
        美國視頻流市場首現(xiàn)飽和征兆
        在Windows中安裝OpenVPN
        視頻網(wǎng)格中自適應(yīng)熱度變化的條塊化存儲
        無線電工程(2013年1期)2013-09-19 10:18:18
        網(wǎng)頁防篡改中分布式文件同步復(fù)制系統(tǒng)
        快速搜出重復(fù)視頻
        電腦迷(2012年2期)2012-04-29 13:52:27
        色伊人国产高清在线| 国产专区一线二线三线码| 亚洲老妈激情一区二区三区| 国产精品毛片无遮挡高清| 亚洲精品2区在线观看| 亚洲第一页视频在线观看| 亚洲人成网网址在线看| 伊人久久综合精品无码av专区 | 国产一区二区三精品久久久无广告 | 精品亚亚洲成av人片在线观看| 精品视频在线观看日韩| 伊人久久大香线蕉综合影院首页| 亚洲产国偷v产偷v自拍色戒| 黄色三级视频中文字幕| 国产成人亚洲一区二区| 精品人妻无码视频中文字幕一区二区三区 | 国产午夜激无码av毛片不卡| 国产免国产免费| 狼友AV在线| 青青草久久久亚洲一区| 日韩精品无码一区二区三区四区 | 亚洲av无一区二区三区久久| 国产美女在线精品免费观看网址| 日韩中文字幕无码av| 日本视频一区二区三区在线观看| 人与动牲交av免费| 热久久久久久久| 91人妻人人做人人爽九色| 小雪好紧好滑好湿好爽视频| 国产乱人伦av在线无码| 91精品在线免费| 少妇又色又爽又高潮在线看| 久久国产精品99精品国产| 日韩AV无码一区二区三| 国产精品久久国产精麻豆| 人成午夜大片免费视频77777| 97久久精品人人做人人爽| 欧美xxxxx精品| 国产免费一区二区三区精品视频 | 日韩精品不卡一区二区三区| 日本免费大片一区二区|