摘 要: 目前市場(chǎng)上支持視頻圖像處理功能的軟件雖然多種多樣,但通常涉及行業(yè)背景,應(yīng)用范圍狹窄,開放的視頻圖像處理組件在容錯(cuò)或安全性上表現(xiàn)一般,因此有必要?jiǎng)?chuàng)新和開發(fā)特定功能的視頻處理組件。該設(shè)計(jì)基于DirectShow架構(gòu),開發(fā)出具有視頻處理功能的Filter組件,具有本地圖片疊加入視頻流、視頻編碼格式轉(zhuǎn)換、截取畫面保存為本地圖像等功能。可在視頻圖像傳遞過程中對(duì)圖像進(jìn)行實(shí)時(shí)處理、添加信息、優(yōu)化或保存畫面等,使人們以更加靈便的方式獲取、使用或傳播視頻信息。測(cè)試結(jié)果表明,該組件可應(yīng)用于廣播電視傳輸或視頻采集時(shí)的圖像處理,甚至應(yīng)用于美顏相機(jī)或PC攝像頭的趣味疊圖等,應(yīng)用范圍廣泛,平臺(tái)兼容性強(qiáng),填補(bǔ)了市場(chǎng)上該類產(chǎn)品的類型和功能短缺。
關(guān)鍵詞: DirectShow; 多媒體; COM組件; 圖像處理; Filter
中圖分類號(hào): TN911.73?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2016)13?0046?05
Abstract: The software supporting video image processing function is various on the market, but it has narrow application range due to the industry background. And the opened video image processing module has poor performance on fault tolerant or security, so it is necessary to innovate and develop the video processing module with specific function. The Filter module with video processing function was developed based on DirectShow framework, which has the functions of local image added into video streaming, video coding format transform, and extracting frames saved as the local image. The module can realize the operations of real?time processing, information adding, frames optimization or frames preservation for the image in video image transfer process, so people can acquire, use or transmit video information with more flexible way. The test results show that the module can be applied to radio and television transmission or image processing while video collection, and beauty camera or funny overlay of PC camera. The module has wide application range and good platform compatibility, which filled the type and function shortage of this product on the market.
Keywords: DirectShow; multimedia; COM module; image processing; Filter
0 引 言
多媒體信息在人們的生活中無(wú)處不在,隨著網(wǎng)絡(luò)平臺(tái)的廣泛普及和三網(wǎng)融合的發(fā)展[1],音、視頻處理以及流媒體傳輸仍然是當(dāng)下流行的發(fā)展和研究熱點(diǎn)。視頻信息因?yàn)榘男畔⒘看?、?nèi)容生動(dòng),易成為人們獲取信息的主要方式。如果能夠在視頻圖像傳輸過程中對(duì)圖像進(jìn)行實(shí)時(shí)處理,添加信息,優(yōu)化畫面,甚至保存當(dāng)前畫面,將會(huì)使人們以更加靈活方便的方式獲取、使用和傳播視頻信息,從而滿足進(jìn)一步的需求。
目前市場(chǎng)上支持圖像處理功能的軟件多種多樣,涉及各種各樣的行業(yè)應(yīng)用背景。但是這些軟件往往僅能在本行業(yè)工作范圍內(nèi)使用,應(yīng)用范圍狹窄。例如:直播信號(hào)的水印疊加,必須使用相應(yīng)的直播信號(hào)處理軟件。如果在采集視頻過程中疊加水印,就必須使用Capture相關(guān)的軟件才能進(jìn)行。相同的功能由于應(yīng)用背景的不同,導(dǎo)致需要使用兩款完全不同的軟件。本設(shè)計(jì)通過設(shè)計(jì)一個(gè)Filter組件,外部應(yīng)用程序僅僅通過調(diào)用加載這個(gè)組件,即可實(shí)現(xiàn)相應(yīng)的功能,且完全適用于各種應(yīng)用背景。
多媒體軟件行業(yè)中,多媒體開發(fā)主要集中于播放器等應(yīng)用開發(fā),使用第三方Filter組件搭建Graph鏈路,很少有專業(yè)從事底層的組件開發(fā)。這是因?yàn)镕ilter組件開發(fā)難度較大,使用他人開發(fā)好的Filter,能減少軟件開發(fā)成本。通常開發(fā)Filter組件的公司往往是硬件制造公司的下屬研發(fā)部門,為了配合自己公司制造的視頻采集卡、攝像機(jī)、顯卡、聲卡等硬件設(shè)備,開發(fā)Source Filter用作硬件信號(hào)源的輸出,或者開發(fā)Render Filter作為硬件的信號(hào)輸入。隨著傳統(tǒng)網(wǎng)絡(luò)技術(shù)的發(fā)展以及移動(dòng)互聯(lián)網(wǎng)時(shí)代的來(lái)臨,行業(yè)內(nèi)更多關(guān)注的是高效的壓縮格式,如何用更少的體積,更短的時(shí)間,傳輸更多的信息。因此市面上大多數(shù)Transform Filter只具有壓縮與解壓功能,很少有圖像處理功能。本設(shè)計(jì)彌補(bǔ)了市場(chǎng)的缺憾,基于DirectShow架構(gòu),開發(fā)出具有視頻處理功能的Filter組件,具有本地圖像內(nèi)容疊加入視頻流、視頻編碼格式轉(zhuǎn)換、截取畫面保存為本地圖像等功能,可應(yīng)用于廣播電視傳輸或視頻采集時(shí)的圖像處理,甚至應(yīng)用于PC攝像頭的趣味疊圖等,應(yīng)用范圍廣泛,具有很高的開發(fā)和應(yīng)用價(jià)值。
1 DirectShow和Filter介紹
多媒體開發(fā)面臨很多問題和挑戰(zhàn),需要保證巨大量的多媒體數(shù)據(jù)高效處理、音頻與視頻同步、復(fù)雜的媒體源處理、各種媒體格式的支持以及目標(biāo)系統(tǒng)中不可預(yù)知的硬件支持等。使用DirectShow,可以使程序員不被硬件差異、數(shù)據(jù)傳輸同步性等工作牽絆,從而能快速簡(jiǎn)單地開發(fā)出多媒體應(yīng)用程序[2]。
如圖1所示,圖中央最大一塊就是DirectShow系統(tǒng),虛線下是Ring0特權(quán)級(jí)別的硬件設(shè)備,虛線上是Ring3特權(quán)級(jí)別的應(yīng)用層。DirectShow系統(tǒng)就位于應(yīng)用層中,它用一種叫做FilterGraph的模型管理整個(gè)數(shù)據(jù)流處理過程;參與數(shù)據(jù)處理的各個(gè)功能模塊叫做filter,filter就好像工廠流水線上的工人一樣,按照一定順序連接并協(xié)同工作[2]。
按照功能來(lái)區(qū)分,F(xiàn)ilter大致分為三類:SourceFilter,TransformFilter,RenderFilter。其中SourceFilter主要負(fù)責(zé)數(shù)據(jù)獲取,數(shù)據(jù)源可以是文件、網(wǎng)絡(luò)、采集卡,甚至一個(gè)攝像機(jī),然后數(shù)據(jù)往下傳輸;TransformFilter主要負(fù)責(zé)數(shù)據(jù)的格式轉(zhuǎn)換,例如數(shù)據(jù)流分離/合成、解碼/編碼等,然后將數(shù)據(jù)繼續(xù)往下傳輸(本設(shè)計(jì)就屬于TransformFilter);RenderFilter主要負(fù)責(zé)數(shù)據(jù)的最終去向——是送往聲卡與顯卡進(jìn)行預(yù)覽還是輸出到文件進(jìn)行本地儲(chǔ)存。
Filter是DirectShow中最基本的概念。DirectShow使用FilterGraph管理Filter。FilterGraph是Filter的“容器”,F(xiàn)ilter是FilterGraph中最小的功能模塊。Filter框架是指完成Filter功能的一個(gè)必要的操作函數(shù)集。Filter類的使用方法包括實(shí)現(xiàn)一些必須的純虛函數(shù),可選實(shí)現(xiàn)的虛函數(shù)等,以完成輸入和輸出Pin上的媒體類型檢查,決定Sample內(nèi)存大小等。另外,在Filter上還要將一些狀態(tài)信息設(shè)置給應(yīng)用邏輯控制對(duì)象,在Filter狀態(tài)轉(zhuǎn)換的同時(shí)調(diào)用控制對(duì)象相應(yīng)的函數(shù)(用于初始化或反初始化),以及在數(shù)據(jù)處理時(shí)調(diào)用控制對(duì)象的數(shù)據(jù)處理函數(shù)等。Filter一般由一個(gè)或多個(gè)Pin組成,F(xiàn)ilter之間通過Pin相互連接構(gòu)成一條順序鏈路。通過pin可以區(qū)分三種類型的Filter。僅有輸出Pin的是SourceFilter,既有輸出Pin又有輸入Pin的是TransformFilter,僅有輸入Pin的是RenderFilter。
2 現(xiàn)有產(chǎn)品介紹
Smart Tee Filter是微軟DirectShow自帶的Filter之一[3],屬于Transform Filter,主要用于將視頻采集圖像分割成一條預(yù)覽流和一條視頻采集流,自身內(nèi)部沒有任何額外的數(shù)據(jù)復(fù)制,輸出引腳支持任何媒體類型的上下游連接。當(dāng)一個(gè)視頻采集Filter不提供單獨(dú)的引腳給采集流和預(yù)覽流時(shí),可以接一個(gè)Smart Tee Filter。Smart Tee Filter提供預(yù)覽圖像功能并且不會(huì)傷害采集流的工作性能。它也消除了預(yù)覽流的PTS。
Smart Tee Filter的優(yōu)點(diǎn)是:支持的視頻編碼格式眾多,適配大多數(shù)常見的編碼格式;預(yù)覽流鏈路工作狀態(tài)堵塞不會(huì)影響采集流鏈路,避免了錄制檔案丟幀的情況發(fā)生。但其也有不可避免的兩個(gè)問題:
(1) 可能導(dǎo)致圖像成為倒置或鏡像(這取決于視頻編碼)。因?yàn)檎沁m配了大多數(shù)編碼格式,對(duì)于極少數(shù)不常用的格式,不同公司編碼規(guī)范不統(tǒng)一,造成Buffer內(nèi)數(shù)據(jù)存放順序不一致,導(dǎo)致圖像倒置或鏡像。
(2) 預(yù)覽流的視頻數(shù)據(jù)不能進(jìn)行有時(shí)間判斷的操作。例如,疊加一張圖片使其持續(xù)一個(gè)固定時(shí)間,或者校準(zhǔn)音頻數(shù)據(jù)與視頻數(shù)據(jù)使它們保持同步。這是因?yàn)轭A(yù)覽流的視頻數(shù)據(jù)進(jìn)行了去時(shí)間戳操作,數(shù)據(jù)沒有參考的時(shí)間戳就不能計(jì)算畫面幀之間的時(shí)間間隔。
視頻加密Filter組件[4]是又一款Transform Filter,采用選擇性加密技術(shù)。其優(yōu)點(diǎn)是:加密的數(shù)據(jù)量小速度快。這是因其選擇性加密不改變碼流格式,不會(huì)增加碼流所致;使用靈活。加密的安全性和加密的效果根據(jù)選擇提取加密的系數(shù)種類有關(guān)。提取全部加密參數(shù),可以獲得最高的安全性。
但在具有上述優(yōu)點(diǎn)的同時(shí),加密的速度稍受影響。因此僅提取部分參數(shù),可以獲得安全性和加密速度的折中,在使用中需要靈活地選擇。
從以上兩個(gè)同類產(chǎn)品中可以看出,F(xiàn)ilter是一個(gè)很矛盾的東西,往往為了某一方面性能提高而犧牲一些其他方面的性能。Smart Tee Filter中為了適應(yīng)更多的媒體格式,不可避免的會(huì)有一些容錯(cuò)方面的瑕疵;視頻加密Filter為了獲得最高的安全性,加密的速度就會(huì)有影響。當(dāng)然,究其原因還是與Buffer大小、讀寫速度、視頻數(shù)據(jù)龐大、一定時(shí)間與空間僅僅能傳輸定量的數(shù)據(jù)有關(guān)。想要更高的數(shù)據(jù)質(zhì)量(尤其是更大的數(shù)據(jù)量)就必須延長(zhǎng)數(shù)據(jù)傳輸時(shí)間;而想要更快的速度(指視頻數(shù)據(jù)的流暢度)就得縮減處理的數(shù)據(jù)量。
3 Filter的需求和設(shè)計(jì)
本設(shè)計(jì)中Filter組件具體滿足了以下需求:輸入Media subtype為YUY2。輸出Media subtype為RGB32。支持Overlay 自由產(chǎn)生的1 b和24 b位圖。Overlay的位圖可以選定坐標(biāo)、旋轉(zhuǎn)和翻轉(zhuǎn)。可以設(shè)置Overlay持續(xù)的時(shí)間。可以截取Video的畫面。截取的圖片保存為1 b和24 b位圖。
Filter設(shè)計(jì)中,在總結(jié)同類產(chǎn)品的優(yōu)缺點(diǎn),保證平臺(tái)兼容性的同時(shí),保證數(shù)據(jù)控件與時(shí)間的最大利用率和同步工作,具體做了兩點(diǎn)改進(jìn):
(1) OutPin與Input上的Buffer只做數(shù)據(jù)傳遞的用途。所有圖像疊加,視頻編碼格式轉(zhuǎn)換使用的Buffer一律是新的。數(shù)據(jù)傳遞時(shí)僅將新的Buffer內(nèi)容拷貝到相應(yīng)的Buffer上一次。因?yàn)镺utPin與Input上的Buffer其實(shí)是顯存上的空間,視頻處理必然會(huì)對(duì)數(shù)據(jù)Buffer進(jìn)行多次操作,多次讀寫顯存數(shù)據(jù),從而影響顯卡性能,造成視頻畫面卡頓。而使用本設(shè)計(jì)的方法,每一次傳遞數(shù)據(jù)僅僅讀寫顯存數(shù)據(jù)一次,其他操作都在new出來(lái)的內(nèi)存Buffer上進(jìn)行,對(duì)Graph性能影響減少到了最小。
(2) 不改變OutPin與Input上的Buffer大小,Graph的大小決定實(shí)際使用Buffer的大小。因?yàn)橐曨l數(shù)據(jù)一幀往往幾MB的數(shù)據(jù)量,如果更改大小就需要重新找一塊巨大的連續(xù)內(nèi)存空間,這對(duì)于平臺(tái)系統(tǒng)的開銷是巨大的。以畫面為1 080×720@30p RGB32格式計(jì)算,每秒需要額外創(chuàng)建與釋放1 080×720×30×8×4=746 MB的內(nèi)存,則Graph的性能在當(dāng)前硬件環(huán)境下不會(huì)很高。
Filter設(shè)計(jì)需要完成兩件事:父類選擇和應(yīng)用結(jié)構(gòu)設(shè)計(jì)。選擇合適的父類至關(guān)重要。Filter框架是完成Filter功能的一個(gè)必要的操作函數(shù)集。本設(shè)計(jì)使用CTransformFilter作為父類,不用重新設(shè)計(jì)Pin,CTransformFilter已做好了封裝。Filter是一個(gè)支持“輸入數(shù)據(jù)→內(nèi)部處理→輸出數(shù)據(jù)”過程的應(yīng)用框架,其最重要的部分是應(yīng)用邏輯,也就是內(nèi)部處理部分,指明了這個(gè)Filter的本質(zhì)功能[4]。 本設(shè)計(jì)將應(yīng)用框架與應(yīng)用邏輯分離。視頻數(shù)據(jù)由Filter組件處理,將視頻圖像每一幀的YUY2編碼數(shù)據(jù)輸入一塊Buffer交給視頻編碼格式轉(zhuǎn)換模塊處理成RGB32數(shù)據(jù),存進(jìn)另一塊Buffer,再傳回Filter組件由應(yīng)用框架處理接下來(lái)的工作。
本文的應(yīng)用結(jié)構(gòu)設(shè)計(jì)如圖2所示。
圖像處理部分的工作就是對(duì)回傳Buffer進(jìn)行處理。由外部位圖數(shù)據(jù)加載模塊把數(shù)據(jù)疊加到回傳Buffer,或者通過復(fù)制回傳Buffer內(nèi)容到內(nèi)部數(shù)據(jù)位圖寫檔模塊進(jìn)行文件的寫檔,以完成Filter的相應(yīng)功能。如果需要對(duì)這個(gè)Filter添加新的功能,只需增加新的模塊。例如圖像色彩調(diào)節(jié)功能,可以寫一個(gè)對(duì)Buffer顏色改變的模塊,疊加進(jìn)去,不會(huì)對(duì)整體造成影響。由此可得到一個(gè)結(jié)構(gòu)清晰,擴(kuò)展性良好的Filter。
4 Filter實(shí)現(xiàn)
4.1 實(shí)現(xiàn)COM框架
Filter就是一個(gè)COM組件,所以需要添加符合COM規(guī)范的代碼,也就是實(shí)現(xiàn)EXPORTS中聲明的一些函數(shù)[5]:
DllMain:DLL的入口函數(shù),跟exe有個(gè)main或者WinMain入口函數(shù)一樣。
DllGetClassObject:用于返回classfactory對(duì)象指針。
DllCanUnloadNow:組件中的輸出函數(shù),以確定Dll是否可以被卸載。
DllRegisterServer:用于注冊(cè)組件,在Windows的注冊(cè)表中給該Filter登記,使之能夠索引到該Filter,然后創(chuàng)建組件。
DllUnregisterServer:在Windows的注冊(cè)表中取消該Filter登記。
4.2 實(shí)現(xiàn)Filter框架
正式編寫Filter之前,需要在COM框架的基礎(chǔ)上實(shí)現(xiàn)Filter的框架,具體涉及以下信息:
(1) Pin及Filter的信息
設(shè)計(jì)的Filter具有兩個(gè)Pin,一個(gè)輸入Pin,一個(gè)輸出Pin。Pin上面接收的媒體類型是Video,同時(shí)還為該Filter實(shí)現(xiàn)了一個(gè)屬性頁(yè)。
(2) 自定義接口以及接口函數(shù)
自定義接口是組件外部使用組件的“鑰匙”。在視頻處理Filter的接口中一共定義了11個(gè)函數(shù)供外部調(diào)用,以完成Filter與外部應(yīng)用所有的交互。只要接口保持不變,就可以通過更換Filter完成對(duì)其更新迭代的工作,不會(huì)對(duì)外部應(yīng)用有一點(diǎn)影響。
(3) Query接口指針
此部分的功能是將Filter所有接口暴露給外部應(yīng)用。外部應(yīng)用通過Query接口的GUID獲取指針指向相應(yīng)接口,完成相應(yīng)功能。這里一共暴露兩個(gè)接口給外部應(yīng)用,分別是屬性頁(yè)接口與上文的自定義接口。主要代碼如下:
(4) 重載框架函數(shù)
使用CTransformFilter類必須重寫五個(gè)函數(shù),作用分別如下:
CheckInputType():確定本Filter接收的輸入格式,目前僅設(shè)計(jì)支持YUY2格式的視頻媒體輸入,當(dāng)然還可設(shè)計(jì)支持其他格式的媒體輸入。
GetMediaType():確定Filter的輸出格式,目前支持輸出RGB32格式的視頻媒體。
CheckTransform():檢查輸入和輸出是否匹配。這里的輸入與輸出并非對(duì)于本Filter而言。DirectShow系統(tǒng)用FilterGraph模型管理整個(gè)數(shù)據(jù)流處理過程,參與數(shù)據(jù)處理的各個(gè)功能模塊就是Filter。Filter就是工廠流水線上的工人,按照一定順序連接并協(xié)同工作。這里的檢查輸入和輸出是否匹配是指檢查上一級(jí)Filter的輸出Pin與本Filter的輸入Pin的媒體類型是否匹配,以及本Filter的輸出Pin與下一級(jí)Filter的輸入Pin上的媒體類型是否匹配,這是DirectShow系統(tǒng)的精髓所在,該機(jī)制保證了FilterGraph這一條流水線能夠按部就班地輸送數(shù)據(jù),各個(gè)Filter能夠各司其職、協(xié)同工作。
DecideBufferSize():該函數(shù)用于確定輸出Buffer的數(shù)量大小。由于顯存、內(nèi)存等設(shè)備的存儲(chǔ)特性(4 B對(duì)齊),設(shè)定的Buffer大小要略大于實(shí)際需要使用的Buffer。
Transform():使輸入變?yōu)檩敵龅奶幚砗瘮?shù)。該函數(shù)把Buffer傳出到應(yīng)用邏輯部分進(jìn)行處理,處理完成后再傳回,所以它并不充當(dāng)應(yīng)用邏輯部分,而是作為應(yīng)用框架與應(yīng)用邏輯的紐帶。
4.3 應(yīng)用邏輯實(shí)現(xiàn)
應(yīng)用邏輯是指對(duì)輸入數(shù)據(jù)進(jìn)行處理的一套控制策略。數(shù)據(jù)如何輸入,處理完后如何輸出由Filter框架負(fù)責(zé),應(yīng)用邏輯更多的是指數(shù)據(jù)處理的算法實(shí)現(xiàn),效率優(yōu)化等問題。應(yīng)用邏輯控制對(duì)象一般以Filter的一個(gè)復(fù)合成員對(duì)象的形式出現(xiàn)。
邏輯控制類是視頻圖像處理真正實(shí)現(xiàn)的地方。設(shè)計(jì)中實(shí)現(xiàn)了圖片疊加與畫面截圖,對(duì)應(yīng)的UML類圖如圖3所示。
應(yīng)用邏輯實(shí)現(xiàn)的原理如下:一般輸入視頻Sample都帶有一幀圖像數(shù)據(jù),圖片疊加是指將指定位置的圖像像素值替換為圖片圖像的像素值。此處Filter采用的替換方法是:在內(nèi)存中首先建立一個(gè)空的24 b位圖圖像Buffer,然后在這個(gè)位圖Buffer上填充圖片內(nèi)容,于是就得到了圖片內(nèi)容的一塊Buffer。實(shí)際疊加的時(shí)候,將圖像指定坐標(biāo)的像素與圖片像素位對(duì)應(yīng),將該圖像幀對(duì)應(yīng)的像素值替換為圖片像素位的值。
畫面截圖的方法就是上述過程的逆過程。執(zhí)行截圖動(dòng)作時(shí)將當(dāng)前視頻圖像的內(nèi)容寫入到一塊提前建立好的Buffer中,然后根據(jù)截圖的信息編寫位圖文件頭數(shù)據(jù)結(jié)構(gòu),它包含BMP圖像文件的類型、顯示內(nèi)容等信息;還要編寫位圖信息數(shù)據(jù)結(jié)構(gòu),它包含BMP圖像的寬、高、壓縮方法。將這兩個(gè)結(jié)構(gòu)寫入文件,最后把剛剛保存的Buffer填充進(jìn)文件,以形成可以被Windows看圖軟件打開的BMP圖片。
圖3中,編寫完成控制類之后,在框架類中分別初始化疊加控制類與截圖控制類的對(duì)象作為框架類的成員。Trainform中在Graph鏈路run過程中不停調(diào)用疊加控制類中Do疊加函數(shù),如果需要控制疊加的時(shí)間,只需要調(diào)用Set加載時(shí)間的函數(shù),然后疊加控制類會(huì)在正確的疊加時(shí)間內(nèi)做疊加動(dòng)作,否則Do疊加函數(shù)什么都不做。Set以及Get的動(dòng)作在屬性頁(yè)里實(shí)現(xiàn)。
4.4 Filter屬性頁(yè)實(shí)現(xiàn)
屬性頁(yè)是實(shí)現(xiàn)Filter與用戶交互的界面,是聯(lián)系用戶與Filter的“橋梁”。屬性頁(yè)通過與Filter框架直接對(duì)話,改變Filter的一些屬性。屬性頁(yè)僅在通過GraphEdit使用Filter時(shí)設(shè)置屬性,如果外部應(yīng)用需要使用一個(gè)Filter或者需要按照COM組件的調(diào)用方式,要通過接口交互,這個(gè)特性是為了保護(hù)Filter的封裝以及可移植性能。屬性頁(yè)設(shè)計(jì)界面可通過VS2005資源編輯器生成對(duì)話框和表示這個(gè)對(duì)話框的ID,然后從SDK中CBasePropertyPage基類派生出屬性頁(yè)的類,實(shí)現(xiàn)與Filter的交互。
至此一個(gè)完整的Filter完成。
5 Filter應(yīng)用測(cè)試
Filter是一個(gè)組件,不能獨(dú)立于Ap運(yùn)行,但DirectShow給出了調(diào)試Filter的工具——Graph Edit。
通過筆記本搭建的一條Graph鏈路如圖4所示。
前端是攝像頭圖像采集Filter,即Source Filter,其將攝像頭采集到的圖像數(shù)據(jù)向后傳送;中間是本文設(shè)計(jì)的Filter,即Transform Filter,實(shí)現(xiàn)了貼圖、截圖以及將攝像頭的YUY2圖像編碼轉(zhuǎn)換為顯卡能識(shí)別的RGB32[6]功能;后端是Render Filter,它將接收的數(shù)據(jù)送給顯卡顯示。
Graph鏈路run操作后攝像頭采集畫面如圖5所示。
圖5的上半部分是攝像頭采集的畫面,下半部分是屬性頁(yè)。在屬性頁(yè)中勾選了旋轉(zhuǎn)選項(xiàng),疊加坐標(biāo)為開始時(shí)間與結(jié)束時(shí)間均以Graph鏈路初始運(yùn)行時(shí)刻為參照時(shí)間點(diǎn),單位為秒。如果結(jié)束時(shí)間值設(shè)置為-1,表示從開始時(shí)間的值一直執(zhí)行Overlay功能,所以圖5中CCTV圖標(biāo)旋轉(zhuǎn)90°,疊加坐標(biāo)為(100,100),并且一直會(huì)疊加在視頻上。
6 結(jié) 論
通過設(shè)計(jì)實(shí)現(xiàn)filter組件,外部應(yīng)用程序僅需調(diào)用加載這個(gè)組件,便可實(shí)現(xiàn)相應(yīng)的功能,快速簡(jiǎn)單地開發(fā)多媒體應(yīng)用程序,適應(yīng)各種應(yīng)用背景。其容錯(cuò)性優(yōu)于Smart Tee Filter,速度和功能上也更貼近和滿足用戶的實(shí)際需求,可對(duì)視頻實(shí)時(shí)處理、添加信息、優(yōu)化和保存畫面,將本地圖片疊加入視頻流、視頻編碼格式轉(zhuǎn)換、截取畫面保存為本地圖像等,使用靈活方便,可應(yīng)用于廣播電視傳輸或視頻采集時(shí)的圖像處理,甚至應(yīng)用于PC攝像頭的趣味疊圖等,應(yīng)用范圍廣泛,平臺(tái)兼容性強(qiáng),填補(bǔ)了市場(chǎng)上該類產(chǎn)品類型和功能的短缺[7]。
參考文獻(xiàn)
[1] 沈洪.多媒體技術(shù)與應(yīng)用[M].北京:人民郵電出版社,2010.
[2] 陸其明.DirectShow開發(fā)指南[M].北京:清華大學(xué)出版社,2003.
[3] Microsoft Corporation. Introducing direct X 9.0 [M]. US: Microsoft Corporation, 2002.
[4] 申華.基于DirectShow設(shè)計(jì)視頻加密Filter組件[J].鞍山師范學(xué)院學(xué)報(bào),2008,10(4):40?43.
[5] FU Jianxin, HUANG Lianfen. Application of BP neural network in wireless network security evaluation [C]// Proceedings of 2010 IEEE International Conference on Wireless Communications, Networking and Information Security. Beijing, China: IEEE, 2010: 592?596.
[6] 孟月華,鄧基園.DirectShow技術(shù)的應(yīng)用研究與開發(fā)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013(6):196?199.
[7] MCTEAR M F. Spoken dialogue technology?toward the conversational user interface [J]. ACM computing surveys, 2002, 34(1): 90?169.
[8] 陳靖,劉京.深入理解視頻編解碼技術(shù)[M].北京:北京航空航天大學(xué)出版社,2012.
[9] FAN S, MAO Y, CHAN Y K, et al. Edge enhancement nucleus and cytoplast contour detector of cervical smear images [J]. IEEE transactions on systems man and cybernetics, 2012, 3(2): 235?239.