999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于DirectShow的視頻處理Filter組件設計與實現

2016-04-12 00:00:00王新蕾劉乃豐夏濟海
現代電子技術 2016年13期

摘 要: 目前市場上支持視頻圖像處理功能的軟件雖然多種多樣,但通常涉及行業背景,應用范圍狹窄,開放的視頻圖像處理組件在容錯或安全性上表現一般,因此有必要創新和開發特定功能的視頻處理組件。該設計基于DirectShow架構,開發出具有視頻處理功能的Filter組件,具有本地圖片疊加入視頻流、視頻編碼格式轉換、截取畫面保存為本地圖像等功能??稍谝曨l圖像傳遞過程中對圖像進行實時處理、添加信息、優化或保存畫面等,使人們以更加靈便的方式獲取、使用或傳播視頻信息。測試結果表明,該組件可應用于廣播電視傳輸或視頻采集時的圖像處理,甚至應用于美顏相機或PC攝像頭的趣味疊圖等,應用范圍廣泛,平臺兼容性強,填補了市場上該類產品的類型和功能短缺。

關鍵詞: DirectShow; 多媒體; COM組件; 圖像處理; Filter

中圖分類號: TN911.73?34 文獻標識碼: A 文章編號: 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 引 言

多媒體信息在人們的生活中無處不在,隨著網絡平臺的廣泛普及和三網融合的發展[1],音、視頻處理以及流媒體傳輸仍然是當下流行的發展和研究熱點。視頻信息因為包含的信息量大、內容生動,易成為人們獲取信息的主要方式。如果能夠在視頻圖像傳輸過程中對圖像進行實時處理,添加信息,優化畫面,甚至保存當前畫面,將會使人們以更加靈活方便的方式獲取、使用和傳播視頻信息,從而滿足進一步的需求。

目前市場上支持圖像處理功能的軟件多種多樣,涉及各種各樣的行業應用背景。但是這些軟件往往僅能在本行業工作范圍內使用,應用范圍狹窄。例如:直播信號的水印疊加,必須使用相應的直播信號處理軟件。如果在采集視頻過程中疊加水印,就必須使用Capture相關的軟件才能進行。相同的功能由于應用背景的不同,導致需要使用兩款完全不同的軟件。本設計通過設計一個Filter組件,外部應用程序僅僅通過調用加載這個組件,即可實現相應的功能,且完全適用于各種應用背景。

多媒體軟件行業中,多媒體開發主要集中于播放器等應用開發,使用第三方Filter組件搭建Graph鏈路,很少有專業從事底層的組件開發。這是因為Filter組件開發難度較大,使用他人開發好的Filter,能減少軟件開發成本。通常開發Filter組件的公司往往是硬件制造公司的下屬研發部門,為了配合自己公司制造的視頻采集卡、攝像機、顯卡、聲卡等硬件設備,開發Source Filter用作硬件信號源的輸出,或者開發Render Filter作為硬件的信號輸入。隨著傳統網絡技術的發展以及移動互聯網時代的來臨,行業內更多關注的是高效的壓縮格式,如何用更少的體積,更短的時間,傳輸更多的信息。因此市面上大多數Transform Filter只具有壓縮與解壓功能,很少有圖像處理功能。本設計彌補了市場的缺憾,基于DirectShow架構,開發出具有視頻處理功能的Filter組件,具有本地圖像內容疊加入視頻流、視頻編碼格式轉換、截取畫面保存為本地圖像等功能,可應用于廣播電視傳輸或視頻采集時的圖像處理,甚至應用于PC攝像頭的趣味疊圖等,應用范圍廣泛,具有很高的開發和應用價值。

1 DirectShow和Filter介紹

多媒體開發面臨很多問題和挑戰,需要保證巨大量的多媒體數據高效處理、音頻與視頻同步、復雜的媒體源處理、各種媒體格式的支持以及目標系統中不可預知的硬件支持等。使用DirectShow,可以使程序員不被硬件差異、數據傳輸同步性等工作牽絆,從而能快速簡單地開發出多媒體應用程序[2]。

如圖1所示,圖中央最大一塊就是DirectShow系統,虛線下是Ring0特權級別的硬件設備,虛線上是Ring3特權級別的應用層。DirectShow系統就位于應用層中,它用一種叫做FilterGraph的模型管理整個數據流處理過程;參與數據處理的各個功能模塊叫做filter,filter就好像工廠流水線上的工人一樣,按照一定順序連接并協同工作[2]。

按照功能來區分,Filter大致分為三類:SourceFilter,TransformFilter,RenderFilter。其中SourceFilter主要負責數據獲取,數據源可以是文件、網絡、采集卡,甚至一個攝像機,然后數據往下傳輸;TransformFilter主要負責數據的格式轉換,例如數據流分離/合成、解碼/編碼等,然后將數據繼續往下傳輸(本設計就屬于TransformFilter);RenderFilter主要負責數據的最終去向——是送往聲卡與顯卡進行預覽還是輸出到文件進行本地儲存。

Filter是DirectShow中最基本的概念。DirectShow使用FilterGraph管理Filter。FilterGraph是Filter的“容器”,Filter是FilterGraph中最小的功能模塊。Filter框架是指完成Filter功能的一個必要的操作函數集。Filter類的使用方法包括實現一些必須的純虛函數,可選實現的虛函數等,以完成輸入和輸出Pin上的媒體類型檢查,決定Sample內存大小等。另外,在Filter上還要將一些狀態信息設置給應用邏輯控制對象,在Filter狀態轉換的同時調用控制對象相應的函數(用于初始化或反初始化),以及在數據處理時調用控制對象的數據處理函數等。Filter一般由一個或多個Pin組成,Filter之間通過Pin相互連接構成一條順序鏈路。通過pin可以區分三種類型的Filter。僅有輸出Pin的是SourceFilter,既有輸出Pin又有輸入Pin的是TransformFilter,僅有輸入Pin的是RenderFilter。

2 現有產品介紹

Smart Tee Filter是微軟DirectShow自帶的Filter之一[3],屬于Transform Filter,主要用于將視頻采集圖像分割成一條預覽流和一條視頻采集流,自身內部沒有任何額外的數據復制,輸出引腳支持任何媒體類型的上下游連接。當一個視頻采集Filter不提供單獨的引腳給采集流和預覽流時,可以接一個Smart Tee Filter。Smart Tee Filter提供預覽圖像功能并且不會傷害采集流的工作性能。它也消除了預覽流的PTS。

Smart Tee Filter的優點是:支持的視頻編碼格式眾多,適配大多數常見的編碼格式;預覽流鏈路工作狀態堵塞不會影響采集流鏈路,避免了錄制檔案丟幀的情況發生。但其也有不可避免的兩個問題:

(1) 可能導致圖像成為倒置或鏡像(這取決于視頻編碼)。因為正是適配了大多數編碼格式,對于極少數不常用的格式,不同公司編碼規范不統一,造成Buffer內數據存放順序不一致,導致圖像倒置或鏡像。

(2) 預覽流的視頻數據不能進行有時間判斷的操作。例如,疊加一張圖片使其持續一個固定時間,或者校準音頻數據與視頻數據使它們保持同步。這是因為預覽流的視頻數據進行了去時間戳操作,數據沒有參考的時間戳就不能計算畫面幀之間的時間間隔。

視頻加密Filter組件[4]是又一款Transform Filter,采用選擇性加密技術。其優點是:加密的數據量小速度快。這是因其選擇性加密不改變碼流格式,不會增加碼流所致;使用靈活。加密的安全性和加密的效果根據選擇提取加密的系數種類有關。提取全部加密參數,可以獲得最高的安全性。

但在具有上述優點的同時,加密的速度稍受影響。因此僅提取部分參數,可以獲得安全性和加密速度的折中,在使用中需要靈活地選擇。

從以上兩個同類產品中可以看出,Filter是一個很矛盾的東西,往往為了某一方面性能提高而犧牲一些其他方面的性能。Smart Tee Filter中為了適應更多的媒體格式,不可避免的會有一些容錯方面的瑕疵;視頻加密Filter為了獲得最高的安全性,加密的速度就會有影響。當然,究其原因還是與Buffer大小、讀寫速度、視頻數據龐大、一定時間與空間僅僅能傳輸定量的數據有關。想要更高的數據質量(尤其是更大的數據量)就必須延長數據傳輸時間;而想要更快的速度(指視頻數據的流暢度)就得縮減處理的數據量。

3 Filter的需求和設計

本設計中Filter組件具體滿足了以下需求:輸入Media subtype為YUY2。輸出Media subtype為RGB32。支持Overlay 自由產生的1 b和24 b位圖。Overlay的位圖可以選定坐標、旋轉和翻轉??梢栽O置Overlay持續的時間??梢越厝ideo的畫面。截取的圖片保存為1 b和24 b位圖。

Filter設計中,在總結同類產品的優缺點,保證平臺兼容性的同時,保證數據控件與時間的最大利用率和同步工作,具體做了兩點改進:

(1) OutPin與Input上的Buffer只做數據傳遞的用途。所有圖像疊加,視頻編碼格式轉換使用的Buffer一律是新的。數據傳遞時僅將新的Buffer內容拷貝到相應的Buffer上一次。因為OutPin與Input上的Buffer其實是顯存上的空間,視頻處理必然會對數據Buffer進行多次操作,多次讀寫顯存數據,從而影響顯卡性能,造成視頻畫面卡頓。而使用本設計的方法,每一次傳遞數據僅僅讀寫顯存數據一次,其他操作都在new出來的內存Buffer上進行,對Graph性能影響減少到了最小。

(2) 不改變OutPin與Input上的Buffer大小,Graph的大小決定實際使用Buffer的大小。因為視頻數據一幀往往幾MB的數據量,如果更改大小就需要重新找一塊巨大的連續內存空間,這對于平臺系統的開銷是巨大的。以畫面為1 080×720@30p RGB32格式計算,每秒需要額外創建與釋放1 080×720×30×8×4=746 MB的內存,則Graph的性能在當前硬件環境下不會很高。

Filter設計需要完成兩件事:父類選擇和應用結構設計。選擇合適的父類至關重要。Filter框架是完成Filter功能的一個必要的操作函數集。本設計使用CTransformFilter作為父類,不用重新設計Pin,CTransformFilter已做好了封裝。Filter是一個支持“輸入數據→內部處理→輸出數據”過程的應用框架,其最重要的部分是應用邏輯,也就是內部處理部分,指明了這個Filter的本質功能[4]。 本設計將應用框架與應用邏輯分離。視頻數據由Filter組件處理,將視頻圖像每一幀的YUY2編碼數據輸入一塊Buffer交給視頻編碼格式轉換模塊處理成RGB32數據,存進另一塊Buffer,再傳回Filter組件由應用框架處理接下來的工作。

本文的應用結構設計如圖2所示。

圖像處理部分的工作就是對回傳Buffer進行處理。由外部位圖數據加載模塊把數據疊加到回傳Buffer,或者通過復制回傳Buffer內容到內部數據位圖寫檔模塊進行文件的寫檔,以完成Filter的相應功能。如果需要對這個Filter添加新的功能,只需增加新的模塊。例如圖像色彩調節功能,可以寫一個對Buffer顏色改變的模塊,疊加進去,不會對整體造成影響。由此可得到一個結構清晰,擴展性良好的Filter。

4 Filter實現

4.1 實現COM框架

Filter就是一個COM組件,所以需要添加符合COM規范的代碼,也就是實現EXPORTS中聲明的一些函數[5]:

DllMain:DLL的入口函數,跟exe有個main或者WinMain入口函數一樣。

DllGetClassObject:用于返回classfactory對象指針。

DllCanUnloadNow:組件中的輸出函數,以確定Dll是否可以被卸載。

DllRegisterServer:用于注冊組件,在Windows的注冊表中給該Filter登記,使之能夠索引到該Filter,然后創建組件。

DllUnregisterServer:在Windows的注冊表中取消該Filter登記。

4.2 實現Filter框架

正式編寫Filter之前,需要在COM框架的基礎上實現Filter的框架,具體涉及以下信息:

(1) Pin及Filter的信息

設計的Filter具有兩個Pin,一個輸入Pin,一個輸出Pin。Pin上面接收的媒體類型是Video,同時還為該Filter實現了一個屬性頁。

(2) 自定義接口以及接口函數

自定義接口是組件外部使用組件的“鑰匙”。在視頻處理Filter的接口中一共定義了11個函數供外部調用,以完成Filter與外部應用所有的交互。只要接口保持不變,就可以通過更換Filter完成對其更新迭代的工作,不會對外部應用有一點影響。

(3) Query接口指針

此部分的功能是將Filter所有接口暴露給外部應用。外部應用通過Query接口的GUID獲取指針指向相應接口,完成相應功能。這里一共暴露兩個接口給外部應用,分別是屬性頁接口與上文的自定義接口。主要代碼如下:

(4) 重載框架函數

使用CTransformFilter類必須重寫五個函數,作用分別如下:

CheckInputType():確定本Filter接收的輸入格式,目前僅設計支持YUY2格式的視頻媒體輸入,當然還可設計支持其他格式的媒體輸入。

GetMediaType():確定Filter的輸出格式,目前支持輸出RGB32格式的視頻媒體。

CheckTransform():檢查輸入和輸出是否匹配。這里的輸入與輸出并非對于本Filter而言。DirectShow系統用FilterGraph模型管理整個數據流處理過程,參與數據處理的各個功能模塊就是Filter。Filter就是工廠流水線上的工人,按照一定順序連接并協同工作。這里的檢查輸入和輸出是否匹配是指檢查上一級Filter的輸出Pin與本Filter的輸入Pin的媒體類型是否匹配,以及本Filter的輸出Pin與下一級Filter的輸入Pin上的媒體類型是否匹配,這是DirectShow系統的精髓所在,該機制保證了FilterGraph這一條流水線能夠按部就班地輸送數據,各個Filter能夠各司其職、協同工作。

DecideBufferSize():該函數用于確定輸出Buffer的數量大小。由于顯存、內存等設備的存儲特性(4 B對齊),設定的Buffer大小要略大于實際需要使用的Buffer。

Transform():使輸入變為輸出的處理函數。該函數把Buffer傳出到應用邏輯部分進行處理,處理完成后再傳回,所以它并不充當應用邏輯部分,而是作為應用框架與應用邏輯的紐帶。

4.3 應用邏輯實現

應用邏輯是指對輸入數據進行處理的一套控制策略。數據如何輸入,處理完后如何輸出由Filter框架負責,應用邏輯更多的是指數據處理的算法實現,效率優化等問題。應用邏輯控制對象一般以Filter的一個復合成員對象的形式出現。

邏輯控制類是視頻圖像處理真正實現的地方。設計中實現了圖片疊加與畫面截圖,對應的UML類圖如圖3所示。

應用邏輯實現的原理如下:一般輸入視頻Sample都帶有一幀圖像數據,圖片疊加是指將指定位置的圖像像素值替換為圖片圖像的像素值。此處Filter采用的替換方法是:在內存中首先建立一個空的24 b位圖圖像Buffer,然后在這個位圖Buffer上填充圖片內容,于是就得到了圖片內容的一塊Buffer。實際疊加的時候,將圖像指定坐標的像素與圖片像素位對應,將該圖像幀對應的像素值替換為圖片像素位的值。

畫面截圖的方法就是上述過程的逆過程。執行截圖動作時將當前視頻圖像的內容寫入到一塊提前建立好的Buffer中,然后根據截圖的信息編寫位圖文件頭數據結構,它包含BMP圖像文件的類型、顯示內容等信息;還要編寫位圖信息數據結構,它包含BMP圖像的寬、高、壓縮方法。將這兩個結構寫入文件,最后把剛剛保存的Buffer填充進文件,以形成可以被Windows看圖軟件打開的BMP圖片。

圖3中,編寫完成控制類之后,在框架類中分別初始化疊加控制類與截圖控制類的對象作為框架類的成員。Trainform中在Graph鏈路run過程中不停調用疊加控制類中Do疊加函數,如果需要控制疊加的時間,只需要調用Set加載時間的函數,然后疊加控制類會在正確的疊加時間內做疊加動作,否則Do疊加函數什么都不做。Set以及Get的動作在屬性頁里實現。

4.4 Filter屬性頁實現

屬性頁是實現Filter與用戶交互的界面,是聯系用戶與Filter的“橋梁”。屬性頁通過與Filter框架直接對話,改變Filter的一些屬性。屬性頁僅在通過GraphEdit使用Filter時設置屬性,如果外部應用需要使用一個Filter或者需要按照COM組件的調用方式,要通過接口交互,這個特性是為了保護Filter的封裝以及可移植性能。屬性頁設計界面可通過VS2005資源編輯器生成對話框和表示這個對話框的ID,然后從SDK中CBasePropertyPage基類派生出屬性頁的類,實現與Filter的交互。

至此一個完整的Filter完成。

5 Filter應用測試

Filter是一個組件,不能獨立于Ap運行,但DirectShow給出了調試Filter的工具——Graph Edit。

通過筆記本搭建的一條Graph鏈路如圖4所示。

前端是攝像頭圖像采集Filter,即Source Filter,其將攝像頭采集到的圖像數據向后傳送;中間是本文設計的Filter,即Transform Filter,實現了貼圖、截圖以及將攝像頭的YUY2圖像編碼轉換為顯卡能識別的RGB32[6]功能;后端是Render Filter,它將接收的數據送給顯卡顯示。

Graph鏈路run操作后攝像頭采集畫面如圖5所示。

圖5的上半部分是攝像頭采集的畫面,下半部分是屬性頁。在屬性頁中勾選了旋轉選項,疊加坐標為開始時間與結束時間均以Graph鏈路初始運行時刻為參照時間點,單位為秒。如果結束時間值設置為-1,表示從開始時間的值一直執行Overlay功能,所以圖5中CCTV圖標旋轉90°,疊加坐標為(100,100),并且一直會疊加在視頻上。

6 結 論

通過設計實現filter組件,外部應用程序僅需調用加載這個組件,便可實現相應的功能,快速簡單地開發多媒體應用程序,適應各種應用背景。其容錯性優于Smart Tee Filter,速度和功能上也更貼近和滿足用戶的實際需求,可對視頻實時處理、添加信息、優化和保存畫面,將本地圖片疊加入視頻流、視頻編碼格式轉換、截取畫面保存為本地圖像等,使用靈活方便,可應用于廣播電視傳輸或視頻采集時的圖像處理,甚至應用于PC攝像頭的趣味疊圖等,應用范圍廣泛,平臺兼容性強,填補了市場上該類產品類型和功能的短缺[7]。

參考文獻

[1] 沈洪.多媒體技術與應用[M].北京:人民郵電出版社,2010.

[2] 陸其明.DirectShow開發指南[M].北京:清華大學出版社,2003.

[3] Microsoft Corporation. Introducing direct X 9.0 [M]. US: Microsoft Corporation, 2002.

[4] 申華.基于DirectShow設計視頻加密Filter組件[J].鞍山師范學院學報,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技術的應用研究與開發[J].計算機系統應用,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] 陳靖,劉京.深入理解視頻編解碼技術[M].北京:北京航空航天大學出版社,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.

主站蜘蛛池模板: 国产一级精品毛片基地| 天堂亚洲网| 色综合成人| 大陆精大陆国产国语精品1024| 中文字幕久久亚洲一区| 久久久久国色AV免费观看性色| 9966国产精品视频| 欧美成人A视频| 综合久久五月天| 日本欧美一二三区色视频| a毛片在线播放| 强乱中文字幕在线播放不卡| 狠狠综合久久| 午夜一级做a爰片久久毛片| 国产亚洲欧美在线专区| 成人在线欧美| 国产成人高精品免费视频| 亚洲狠狠婷婷综合久久久久| 日本在线国产| 狠狠色综合网| …亚洲 欧洲 另类 春色| 免费毛片全部不收费的| 亚洲男人天堂2018| 国产一级妓女av网站| 第一页亚洲| 国产91丝袜在线播放动漫| 中文字幕av一区二区三区欲色| 日本免费高清一区| 国产精品亚洲天堂| 久久人人爽人人爽人人片aV东京热 | 亚洲AV无码久久精品色欲| 日本一区二区三区精品国产| 国产黄在线观看| 国产极品粉嫩小泬免费看| 91国内视频在线观看| 欧美在线国产| 91午夜福利在线观看精品| 97人妻精品专区久久久久| 久久久久久久久亚洲精品| 国产一区二区福利| JIZZ亚洲国产| 日韩免费毛片视频| 日韩在线视频网站| 国产一区二区丝袜高跟鞋| 亚洲AV无码久久精品色欲| 婷婷五月在线| 伊人色在线视频| 九色视频一区| 波多野结衣无码视频在线观看| 久久综合九九亚洲一区| 又爽又大又黄a级毛片在线视频| 国产精品原创不卡在线| 亚洲av无码人妻| 影音先锋丝袜制服| 午夜在线不卡| 无码精品福利一区二区三区| 亚洲国产日韩一区| 国产免费高清无需播放器| 国产精品任我爽爆在线播放6080| 狠狠色成人综合首页| 日韩av资源在线| 国产一区二区色淫影院| 天堂va亚洲va欧美va国产| 日韩小视频在线播放| 国产美女视频黄a视频全免费网站| 亚洲欧美日韩成人高清在线一区| 手机成人午夜在线视频| 欧美在线三级| 日本亚洲国产一区二区三区| 亚洲男人的天堂视频| 国产一级二级三级毛片| 亚洲欧美国产五月天综合| 国产精品女人呻吟在线观看| 日韩黄色在线| 麻豆精选在线| 亚洲天堂网站在线| 九九九九热精品视频| 国产午夜福利在线小视频| 免费中文字幕一级毛片| 国产亚洲精品97在线观看| 免费观看精品视频999| 国产一区二区网站|