close

一、 程式說明:

使用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的方式來維持長寬比)

         player-vmr7.JPG

 

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的方式來維持長寬比)

         player-vmr9.JPG

 

四、程式執行畫面:

4-1、開啟控制面板 一

player_enable_show_control_panel.JPG  

        4-2、關閉控制面板 一 

player_disable_how_control_panel.JPG  


Download:DSPlayer.rar (Source Code)         DSPlayer.exe(Binary Code)

arrow
arrow
    全站熱搜

    yunjuihuang 發表在 痞客邦 留言(0) 人氣()