一、使用VFW(vido for windows) architecture來處理和顯示影音資訊有兩項缺點:

      (1) 音訊/視訊的同步化問題(audio/video synchronization) 。    

      (2) 不支援可變動長度的視框(no support variable-length frames)。

           因此目前多數已經用DirectShow來處理相關的視訊資料;但是相對於使用DirectShow而言使用

           VFW比較適合用於開發簡單和單純功能的視訊相關軟體。

 

二、在C#中使用VFW library(Avicap32.dll)必須先使用Dlllmport來Include Library,但是由於AVICap 

      Windows Class是以message-based為介面,因此多數的函式其實是巨集指令透過特定的命令來控

      制和操作AVICap Window,本文使用的相關的函式只下列兩項其他的皆為巨集指令:

2-1、capCreateCaptureWindow (

[MarshalAS(UnmanagedType.LPStr)] string lpName,

uint dwStyle,

int x, int y,

int nWidth, int nHeight,

IntPtr hWnd,int nID

);

        一 建立AVICap Window來顯示及控制相關的視訊資料,且必須為某視窗的子視窗才能建立成功。

            此外該函式只單純建立視訊視窗尚未無連接任何視訊擷取裝置。

 

2-2、capGetDriverDescription (

uint wDriverIndex,

StringBuilder lpszName,

int cbName,

StringBuilder lpszVer,

nt cbVer

);

        一 取得目前安裝於系統上有關於視訊裝置的驅動程式相關資料。

 

2-3、SendMessage(IntPtr hWnd,uint Msg,int wParam,int lParam);

一 在C#中要對AVICap Window傳送控制命令的方式主要使用Windows API中的傳送控制命令

            至指定的視窗相關的參數可藉由wParam或lParam來傳遞。

 

2-4、DestoryWindow(IntPtr hWnd); 一  關閉指定視窗。

 

三、AVICap Window的相關控製命令如下:

       3-01:public  const ushort WM_CAP_START = 0x0400;

一 本身為無意義,主要用定義其他命令的相對值。

        3-02:public  const ushort WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5;

一 設定Callback函式到AVICap Window,每次接收到完整視框資料則會執行此Callback函式。

  3-03:public  const ushort WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;

         一  控制AVICap Window連接特定的視訊裝置,連接的對象為安裝於系統上的驅動程式,

           而非針對視訊擷取裝置。

3-04:public  const ushort WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;

一 控制AVICap Window 中斷連接的視訊裝置。

3-05:public  const ushort WM_CAP_DRIVER_GET_CAPS = WM_CAP_START + 14; 

         一 取得目前開啟裝置的驅動程式所提供的相關功能。

3.06:public  const ushort WM_CAP_FILE_SET_CAPTURE_FILE  = WM_CAP_START +20;

一 設定視訊擷取後儲存的檔案名稱,預設的檔案名稱為C:\Capture.avi 

3.07:public  const ushort WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41;

         一 開啟視訊格式的控制視窗,依視訊擷取裝置的驅動程式而異。

3.08:public  const ushort WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42;

         一 開啟視訊來源的控制視窗,依視訊擷取裝置的驅動程式而異。

3.09:public  const ushort WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START+ 43;

         一 開啟視訊設定和調整的控制視窗,依視訊擷取裝置的驅動程式而異。

3-10:public  const ushort WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START +46;

         一 開啟視訊壓縮的控制視窗,依視訊擷取裝置的驅動程式而異。

3-11:public  const ushort WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 50;

         一 開啟或關閉預覽的功能,若關閉則AVICap Window只會顯示第一張視訊擷取圖。

3-12: public  const ushort WM_CAP_SET_PREVIEW = WM_CAP_START + 52;

         一 設定預覽的速率。

3.13: public  const ushort WM_CAP_GET_STATUS = WM_CAP_START +54;

         一 使用CAPSTATUS Structure來取得目前視訊視窗的狀態。

3-14: public  const ushort WM_CAP_SEQUENCE = WM_CAP_START + 62;

         一 通知AVICap Windows開始錄製視訊的內容並儲存成影像檔。

3-15: public  const ushort WM_CAP_SET_SEQUENCE_SETUP = WM_CAP_START + 64;

一 使用CAPTUREPARMS Structure來設定錄製視訊的相關資訊。

 

其他相關的命令請參考Multimedia Messages

 

四、Video For Windows程式開發流程如下:

   4-01、列舉目前安裝於系統上有關於視訊擷取裝置的驅動程式。

   4-02、建立AVICap Window 。

   4-03、指定連接視訊裝置的驅動程式。

   4-04、取得目前視訊視窗的狀態。

   4-05、設定視訊視窗於父視窗中的位置。

   4-06、設定是否要預覽和預覽速率。

   4-07、取得目前連接中驅動程式提供的功能。

4-07.1、視訊來源控制視窗

        4-07.2、視訊格式控制視窗

        4-07.3、視訊顯示控制視窗

        4-07.4、視訊壓縮控制視窗

   4-08、設定是否提供儲存視訊為圖檔的功能。

   4-09、 設定是否提供錄製視訊為影像檔的功能。

Download:       VideoForWindows.zip               VideoForWindows.exe 

Result:

        main.JPG

       connect_configuration.JPG

       format.JPG

      avi.JPG

      image.JPG  

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 yunjuihuang 的頭像
    yunjuihuang

    瑞の資訊備忘錄

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