深入淺出VMR7、VMR9、Video Renderer,Media菜鳥進階

來源:互聯網
上載者:User

在使用KMP、MPC等播放器時,我們對DirectShow視頻渲染器總是一頭霧水,到底什麼是VMR7、VMR9?

讓我們先從Video Renderer和Overlay Mixer說起。

一、Video Renderer和Overlay Mixer

大家知道,Video Renderer (VR)是接收RGB/YUV裸資料,然後在顯示器上顯示的Filter。為提高電腦畫圖效能,根據你電腦顯卡的能力,VR會優先使用DirectDraw以及Overlay表面;如果這些特性得不到顯卡的支援,VR會使用GDI函數進行畫圖。在上級Filter串連到VR時,VR總是先要求當前顯示器設定的色彩位元的RGB格式,如你的機器設定的是24位彩色,則VR首先要求串連的Media type為RGB24。如果你的顯卡支援YUV Overlay表面,那麼在Filter Graph運行起來的時候,VR會動態改變已經串連的Media type,要求上級Filter輸出一種合適的YUV格式。VR Filter上實現了IVideoWindow介面,Filter Graph Manager主要通過這個介面來控制視頻視窗。

那麼,Overlay Mixer又是怎麼回事呢?簡單地說,Overlay Mixer就是能夠將幾路視頻流合成輸出的Filter。這個Filter是特地為DVD回放(DVD有Sub-picture或line-21資料需要疊加顯示)或廣播視頻流(含有line-21資料)而設計的。同時,它還支援硬體解碼器使用Video Port Extensions,就是繞過PCI匯流排,將硬體解碼出來的資料直接送給顯卡顯示。這個Filter同樣優先使用顯卡的DirectDraw能力,而且必須要有Overlay表面。Overlay Mixer有一個輸出Pin,輸出的Media type是:MEDIATYPE_VIDEO,MEDIASUBTYPE_ Overlay;後面一般連上一個Video Renderer。當Filter Graph運行時,實際的映像顯示工作由Overlay Mixer完成,而Video Renderer只是做一個視頻視窗的管理工作。還有另外一個更常見的Filter:Overlay Mixer 2。這個Filter跟Overlay Mixer功能上是一樣的,只是兩個Filter支援的Format type不同和Merit值不同而已。

Overlay Mixer使用Color keying來實現幾路視頻的合成:它將Color key和sub-picture(或line-21)資料送到主表面,將主視頻資料送到Overlay表面;顯卡然後將兩個表面的資料合成,送到幀緩衝(Frame buffer)中進行顯示。典型的情況,Overlay Mixer使用三個Input pin:Pin 0輸入主視頻資料,Pin 1和Pin 2輸入sub-picture資料和line-21資料。Overlay Mixer在內部根據Pin 0輸入的資料來建立Overlay表面。Overlay Mixer向上一般串連的是Video Decoder。如果這是個Software decoder,則Pin 0上的資料轉送使用標準的IMemInputPin介面;如果使用了硬體加速,則Pin 0上必須使用IAMVideoAccelerator介面。(注意這兩種介面是不能同時使用的!)如果上一級Filter是硬體解碼器的封裝Filter,使用VP pin輸出,則解碼器與Overlay Mixer使用IVPConfig和IVPNotify介面對通訊,以協調工作。Overlay Mixer不支援1394或USB介面的採集裝置。Overlay Mixer向下一般連的是Video Renderer。這時Video Renderer只是一個視頻視窗管理器。兩個Filter通過IOverlay和IOverlayNotify介面對進行通訊,以協調工作。(Video Renderer的Input pin有兩種串連方式:VR直接做映像顯示時,則使用IMemInputPin介面接收視頻流資料;Overlay Mixer做映像顯示時,則VR使用IOverlay介面與上一級Filter進行通訊,Overlay Mixer與VR之間沒有視頻資料的傳輸。注意這兩種介面是不會同時使用的!)

二、VMR-7

大家看到了,其實Video Renderer與Overlay Mixer有一部分功能是重複的。Video Renderer是最早設計的,設計之初,很多應用情況沒有考慮進去;於是,就用Overlay Mixer來“打補丁”。現在,我們為什麼不把兩部分功能整合一下呢?微軟也正是這麼做了!在Windows XP(家庭版和專業版)中,新出現了一個Filter(註冊的名字也叫“Video Renderer”,但兩個Filter的CLSID是不同的,Merit值也不一樣),替代了原來預設的Video Renderer。這個新的Filter,稱之為Video Mixing Renderer Filter 7 (VMR-7),因為它內部使用了DirectDraw 7的技術。可以這麼說,VMR是Windows平台上新一代的Video Renderer。值得注意的是,這個Filter僅在Windows XP裡整合,在其他任何DirectX發布包裡都得不到這個Filter。VMR-7的大致功能如下:支援最多16路輸入資料流的alpha混合;支援在合成映像顯示之前得到對其訪問權;支援插入第三方開發的Video Effects和Transitions組件功能等等。還有,VMR串連時不要求RGB的Media type,因為它任何情況下都不會使用GDI函數來畫圖。

三、VMR-9

隨著DirectX 9的發布,又會出現一個新的Video Renderer,稱之為VMR-9。這個Filter使用了Direct3D 9的技術。VMR-9與VMR-7是兩個不同的Filter。VMR-9的效能更加強勁。值得注意的是,為了保持向下相容,VMR-9的Merit值並不高,它不作為系統預設的Video Renderer;如果你的應用程式只需要很少的視頻顯示控制,建議還是使用各自平台預設的Video Renderer。

四、總結

顯然,結果已經很明顯,如果你想獲得進階的功能和更好的品質,請使用VMR-9,如果你需要更快的速度或者機器配置不夠高,請選擇VMR-7 。

KMP中關於選擇視頻渲染器有這樣一段話:
“請選擇如何在KMP 中輸出映像。 預設情況下推薦使用覆蓋混合器   。 如果您正在使用 Windows XP或DirectX 9 請選擇 VMR   7
   / 9 未渲染,並使字幕輸出到VMR   表面 。 它將增加字幕的品質 ;如果您無法切換到桌面圖案或在 VMR   輸出中使用覆蓋字幕 。   那麼 請選擇使用內建渲染器通過 DirectDraw 渲染直接輸出映像 。 如果它可以被正確覆蓋那麼使用覆蓋表面將會得到更柔和和更快速 的映像播放效果。”

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.