zoukankan      html  css  js  c++  java
  • DShow实现一个avi视频的播放(含有个人解释和注释)

    此项目为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组件失败
    ");
    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组件失败
    ");
    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
    ");
    55     return 0;
    56 }
  • 相关阅读:
    [译]K-D-B-tree(草稿,第一次翻译)
    [LeetCode]Letter Combinations of a Phone Number
    [LeetCode]Multiply Strings
    [LeetCode]Populating Next Right Pointers in Each Node
    [LeetCode]Sum Root to Leaf Numbers
    [LeetCode]String to Integer (atoi)
    [LeetCode]Path Sum II
    [LeetCode]Minimum Depth of Binary Tree
    线上死锁问题排查
    Redis(四):独立功能的实现
  • 原文地址:https://www.cnblogs.com/orange1438/p/4161732.html
Copyright © 2011-2022 走看看