程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> DShow實現一個avi視頻的播放(含有個人解釋和注釋),dshowavi

DShow實現一個avi視頻的播放(含有個人解釋和注釋),dshowavi

編輯:C++入門知識

DShow實現一個avi視頻的播放(含有個人解釋和注釋),dshowavi


此項目為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 }

 

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