close

 

一、 程式說明:

              使用Directshow提供的Filter來製作簡單的TV Tuner播放軟體,主要的功能是播放及錄製由TV Tuner

        所傳送的影像資料,而該軟體錄製的影像格式只支援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、IVideoWindow(IID_IVideoWindow) - 

                  設定Filter Graph內的Video Window的相關屬性。

          1-3、IMediaEventEx (IID_IMediaEventEx) - 

                  接收Filter Graph中的事件通知及overriding(覆寫)Filter Graph中事件的預設控制。

          1-4、IBasicAudio (IID_IBasicAudio) - 

                  提供控制Filter Graph中聲音的音量(Volume)及平衡(Balance)的相關功能。

 

      2. Capture Graph Builder 2 (CLSID_CaptureGraphBuilder2) - 

                 由Directshow提供的Helper Object 使應用程式可以容易的建立及控制Capture Graph,但由於

         CGB本身不包含 VMR9、VMR7、EVR Filters,因此必須將FGM的IGB作為CGB處理影像及音聲資訊的Filter。

         2-1、IAMTVTuner(IID_IAMTVTuner) 一

                           TV Tuner的一個控制介面,使用這個介面去設定TV Tuner的頻道和取得及設定其他的資訊,

                 該介面支援所有標準類比視訊的TV Tuner(EX. 類比的廣播電播和AM/FM radio)。

               

     3. Sample Grabber (CLSID_SampleGrabber) -

                這是轉換用的Filter,從經過該Filter內的資料流中擷取多媒體樣本,在此的功能為取得的視訊資料

         並存成圖片。

         1-1、ISampleGrabber (IID_ISampleGrabber) - 

                 設定Sample Grabber接收多媒體的類型及處理資料的方式。

 

     4. Null Renderer Filter  (CLSID_NullRenderer) - 

                 這個渲染器主是將接收的資料直接丟棄,不做任何後續的處理。主要是對於某些

         Filter必須要有一個downstream 的連接對象而又沒有適當的需求時使用。

 

三、使用GraphEdit來說明程式的執行流程:

      3-1. 基本設定的程式流程:

          (1) 建立Filter Graph Manage 並取得上述的介面來進行後續的操作。

          (2) 建立Capture Graph Builder並使用SetFiltergraph函式來指定ICB作為ICGB2的操作對象。

          (3) 設定IMediaEventEx介面的SetNotifyWindow來取得ICB內的相關事件訊息。

          (4) 使用下列二個函式來取得連接設備的IBaseFilter:

                CreateBindCtx 一 回傳一個IBindCtx (a bin context object)用來儲存Moniker-binding的作業。

                MkParseDisplayName 一

                      使用設備名稱進行檢索並回傳一個Moniker介面並使用該回傳的Moniker的BindToObject來取得

                ICB所需的溝通介面IBaseFilter。

          (5) 使用IGB的AddFilter函式,將取的設定的Filter加入IGB。

          (6) 使用ICGB2的ReanderStream函式來連接Device Filter的聲音的預覽輸出。       

          (7) 使用ICGB2的ReanderStream函式來連接Device Filter的影像的預覽輸出。       

          (8) 使用IVideoWindow介面來設定Video Window的父視窗、樣式及位置…等參數。 

      

     3-2. 使用Sample Grabber來儲存圖片的程式流程:

          (1) 建立Sample Grabber Filter並使用IGB的AddFilter函式將該Filter加入其中。

          (2) 建立Null Renderer Filter並使用IGB的AddFilter函式將該Filter也加入其中。

          (3) 使用ICGB2的RenderStream將Device Filter和Sample Grab Filter和NullReader連接起來。

               (如下圖所示)

          (4) 取得Sample Grabber Filter的控制介面ISampleGrabber來對所建立的Sample Grabber Filter

                進行相關參數設定。      

TVTuner_AsImage.JPG     

  3-3. 使用無壓縮的AVI格式來錄製影片檔:

          (1) 使用ICGB2的SetOutputFilterName的函式並選擇使用CLSID_MEDIASUBTYPE_Avi作為輸出的

                影像檔案格式並取得Multiplexer的IBase Filter及File Writer的IFileSkinFilter。

          (2) 使用ICGB2的RenderStream函式將Device Filter中的聲音的擷取輸出至Multiplexer的IBase Filter。

               (依設備功能而定)

          (3) 使用ICGB2的RenderStream函式將Device Filter中的影像的擷取輸出至Multiplexer的IBase Filter。

          (4) 從Multiplexer Filter中取出IConfigAviMux介面並使用該介面的SetMasterStream來設定依據何種來

                源作為播放速度的基礎。(來源的順序依據上述調用ReaderStream的順序)

TVTuner_AsAVI.JPG  

   3-4. 使用有壓縮的ASF格式來錄製影片檔:

          (1) 使用ICGB2的SetOutputFilterName函式並選擇使用CLSID_MEDIASUBTYPE_Asf作為輸出的

                影像檔案格式並取得Multiplexer的IBase Filter及File Writer的IFileSkinFilter。

          (2) 取得Mutiplexer提供的IConfigAsfWriter介面並設定為系統預設的值。

          (3) 使用IConfigureAsWriter的GetCurrentProfile函式來取的IWMProfile控制介面。

          (4) 使用ICGB2的FindInterface函式取得Device Fliter的IAMStreamConfig介面來取得串流的多媒體格式。

          (5) 依據串流的多媒體格式來重新設定IWMProfile的多媒體儲存格式。

               PS:直接引用WMSysPrx.sys中所定義的相關設定再進一步修改。

          (6) 使用IWMProfile介面的ReconfigStream函式來儲存修改後的設定值。

          (4) 使用ICGB2的RenderStream函式將Device Filter中的聲音的擷取輸出至Multiplexer的IBase Filter。

                PS:主要設定Bit Rate的參數。

          (5) 使用ICGB2的RenderStream函式將Device Filter中的影像的擷取輸出至Multiplexer的IBase Filter。

                PS:主要設定Bit Rate及視訊的相關參數。

TVTuner_AsASF.JPG

 

四、程式執行畫面:

       4-1. 關閉控制面板 一

     TVTuner_Play.JPG

     4-2. 圖片擷取模式 一

     TVTuner_Play2.JPG

      4-3. 錄影模式 一      TVTuner_Play3.JPG

      4-4 自動掃頻模式:

TVTuner_AutoScanning.JPG  

Download: DSTVTuner.rar (Source Code)         DSTVTuner.exe(Binary code)

arrow
arrow
    全站熱搜

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