程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> DirectShow簡單入門程序

DirectShow簡單入門程序

編輯:C++入門知識

1.首先確認已安裝過相關工具及配置環境,然後打開vs2010,新建一對話框應用程序 取名為Player_test1,然後打開菜單-》項目-》屬性-》

添加strmmiids.lib庫文件,然後在頭文件裡包含“dshow.h”頭文件。

2. 在頭文件裡添加public成員變量 ,在構造函數裡初始化為NULL

  其中IGraphBuilder 用於建立以Filter Graph,管理各種filter。

  IMediaControl  用於控制通過filter進行播放的視頻流,最常用的方法就是PLAY(),PAUSE(),STOP()等

  IMediaEvent 用於檢索系統消息。

  IVideoWindow 用於設置播放窗口的屬性,包括位置,大小,擁有者等

     IGraphBuilder * pGraph;
     IMediaControl * pControl;
     IMediaEvent * pEvent;
     IVideoWindow *pWindow;

3.在OnInitDialog()函數中添加要初始化的函數及變量

 //初始化com庫
     HRESULT hr = CoInitialize(NULL);
     if (FAILED(hr))
     {
         printf("初始化Com庫失敗");
        return false;
     }

 //創建過濾圖管理器以及查詢接口
     hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER
         ,IID_IGraphBuilder,(void **)&pGraph);
     if (FAILED(hr))
     {
         printf("Error__創建過濾管理器失敗");
         return false;
     }
 
 //查詢接口
     hr = pGraph->QueryInterface(IID_IMediaControl,(void**)&pControl);
     hr = pGraph->QueryInterface(IID_IMediaEvent,(void**)&pEvent);
     hr = pGraph->QueryInterface(IID_IVideoWindow,(void **)&pWindow);
 //建立表
    hr = pGraph->RenderFile(L"d:\\1.wmv",NULL);
    if (SUCCEEDED(hr))
    {
        //運行
        hr = pControl->Run();
    //    pWindow->put_FullScreenMode(OATRUE);//全屏播放
        if (SUCCEEDED(hr))
        {
            //等待結束
            long evCode;
            pEvent->WaitForCompletion(INFINITE,&evCode);
         }
     }

 

4. 最後要記得釋放資源

  pControl->Release();
  pEvent->Release();
  pGraph->Release();

  pWindow->Release();
  CoUninitialize();

最後直接運行就可以播放視頻了,當然這只是最簡單的功能。希望能和大家多多交流。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved