此項目為win32下的控制台C++代碼(別忘記配置DShow庫)
1 // movie_test.cpp : 定義控制台應用程序的入口點。 2 // 3 #include "stdafx.h" 4 #include <DShow.h> 5 6 #pragma comment(lib,"strmiids.lib") // 也可以在屬性裡面添加 7 8 int _tmain(int argc, _TCHAR* argv[]) 9 { 10 IGraphBuilder *pGraph = NULL; // 圖標管理器接口 11 IMediaControl *pControl = NULL; // 媒體控制器接口 12 IMediaEvent *pEvent = NULL; // 媒體事件接口 13 14 // 初始化com庫 15 HRESULT hr = CoInitialize(NULL); 16 if(FAILED(hr)) 17 { 18 printf("初始化com組件失敗\n"); 19 return -1; 20 } 21 22 // 創建濾波器鏈表管理器 23 hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&pGraph); 24 if(FAILED(hr)) 25 { 26 printf("初始化com組件失敗\n"); 27 return -1; 28 } 29 30 //查詢媒體控制和媒體事件接口 31 hr = pGraph->QueryInterface(IID_IMediaControl,(void **)&pControl); 32 hr = pGraph->QueryInterface(IID_IMediaEvent,(void **)&pEvent); 33 34 //建立鏈表,這裡用戶可以更改待播放的文件的名稱 35 hr = pGraph->RenderFile(L"E:\\DXSDK\\DXSDK 9.0B\\Samples\\Media\\ruby.avi",NULL); 36 if(SUCCEEDED(hr)) 37 { 38 //運行鏈表 39 hr = pControl->Run(); 40 if(SUCCEEDED(hr)) 41 { 42 //等待回放結束 43 long evCode; 44 pEvent->WaitForCompletion(INFINITE,&evCode); 45 // 切記:在實際應用中,不能使用INFINITE標識,因為他會不確定的阻塞程序 46 } 47 } 48 49 // 釋放所有資源 50 pControl->Release(); 51 pEvent->Release(); 52 pGraph->Release(); 53 CoUninitialize(); 54 printf("this is example\n"); 55 return 0; 56 }