一、 程式說明:
使用Directshow提供的Filter來製作簡單的影片播放軟體而該軟體只支援Windows影片格式,除了影片播放外
還提供圖片擷取儲存的功能。(DirectShow SDK下載)
二、相關的Filter使用說明:
1. Filter Graph Manager (CLSID_FilterGraph) -
Direct Show的中央單元,主要是用來管理Filter之間的控制同步化、事件通知…等各種的
Filter Graph控制,操作方式主要是使用下列的介面來完成:
1-1、IMediaControl (IID_IMediaControl) -
控制通過Filter Graph中資料流處理的方式,例如:running、pausing, and stopping...等。
1-2、IMediaEventEx (IID_IMediaEventEx) -
接收Filter Graph中的事件通知及overriding(覆寫)Filter Graph中事件的預設控制。
1-3、IMediaSeeking (IID_IMediaSeeking) -
尋找通過Filter Graph中資料流的位置和設定播放速率(placyback rate)。
1-4、IBasicAudio (IID_IBasicAudio) -
提供控制Filter Graph中聲音的音量(Volume)及平衡(Balance)的相關功能。
1-5、IFilterGraph2(IID_IFilterGraph2) -
擴展建立和連接IFilterGraph和IGraphBuilder的方法。
2. Video Mixing Renderer 9 ( CLSID_VideoMixingRenderer9) -
在DirectX 9中新增的VMR,此VMR提供了進階的影像表現能力及完全整合DirectX 9 3D的能力。
2-1、IVMRFilterConfig9 - 提供組態VMR的運作模式及影像表現機制。
2-2、IVMRWindowlessControl9 - 控制VMR提供視窗容器內的影像資料流。
3. Video Mixing Renderer (CLSID_VideoMixingRenderer) -
在Windows XP和之後的版本,VMR-7是預定的視訊渲染器(video renderer),因為它的內部是
使用DirectDraw 7,因此稱為VMR-7。
3-1、IVMRFilterConfig - 提供組態VMR的運作模式及影像表現機制。
3-2、IVMRWindowlessControl - 控制VMR提供視窗容器的影像資料流。
4. DirectSound Renderer (CLSID_DSoundRender) -
該Filter使用DirectSound來表現聲音且為Waveform Sound的預設音頻渲染器(audio renderer)。
三、使用GraphEdit來說明程式的執行流程:
3-1. 基本設定的程式流程:
(1) 建立Filter Graph Manage 並取得上述的介面來進行後續的操作。
(2) 設定IMediaEventEx介面的SetNotifyWindow來取得IGB內的相關事件訊息。
(3) 使用IGB的AddSourceFilter函式來載入播放的檔案並取得其產生的IBaseFilter介面。
(4) 根據使用者的選項載入VMR-7或VMR-9的視訊渲染器。
(5) 取得聲音渲染器並使用IGB的AddFilter函式將聲音渲染器加入IGB中。
(6) 使用IBaseFilter介面的EnumPins函式來列舉該Filter 的所有Pin。
(7) 使用IFG2介面的RenderEx函式判斷上述所列舉的Output Pin是否在已經在IGB中使用。
(8) 如果沒有任何的Output Pin被IGB使用則移除已經載入渲染器。
3-2. 設定WindowlessVMR:
(1) 取得Video Mixing Renderer Filter 7並使用IGB的AddFilter函式將視頻渲染器加入IGB中。
(2) 使用VMR-7 Filter的IVMRFilterConfig介面所提供的SetRenderingMode函式來設定渲染器的
模式為VMRMode_Windowless。
(3) 使用VMR-7 Filter的IVMRWindowlessControl介面所提供的SetVideoClippingWindow函式來
設定視頻剪輯到指定的容器視窗。
(4) 使用VMR-7 Filter的IVMRWindowlessControl介面所提供的SetAspectRatioMode函式來
設定輸出是否要維持來源影像的長寬比。(DirectShow提供LetterBox的方式來維持長寬比)
3-3. 設定WindowlessVMR9:
(1) 取得Video Mixing Renderer Filter 9並使用IGB的AddFilter函式將視頻渲染器加入IGB中。
(2) 使用VMR-9 Filter的IVMRFilterConfig介面所提供的SetRenderingMode函式來設定渲染器的
模式為VMRMode_Windowless。
(3) 使用VMR-9 Filter的IVMRWindowlessControl介面所提供的SetVideoClippingWindow函式來
設定視頻剪輯到指定的容器視窗。
(4) 使用VMR-9 Filter的IVMRWindowlessControl介面所提供的SetAspectRatioMode函式來
設定輸出是否要維持來源影像的長寬比。(DirectShow提供LetterBox的方式來維持長寬比)
四、程式執行畫面:
4-1、開啟控制面板 一
4-2、關閉控制面板 一
Download:DSPlayer.rar (Source Code) DSPlayer.exe(Binary Code)
留言列表