• DShow实现一个avi视频的播放(含有个人解释和注释)


    此项目为win32下的控制台C++代码

     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 }
    作者:orange1438
    出处:http://www.cnblogs.com/orange1438/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    大龄程序员肉翻记录【一】
    spring boot 在不同环境下读取不同配置文件的一种方式
    JDK的一个关于stack的小bug
    《DISTRIBUTED SYSTEMS Concepts and Design》读书笔记 一
    一个简单的任务执行引擎设计
    spring集成guava的event bus
    Unity输出文件在itunes读取
    MaxScript调用DotNet时命名空间的问题
    max渲染通道元素的范例
    Unity里vertexShader里压扁模型来实现比较low的阴影
  • 原文地址:https://www.cnblogs.com/orange1438/p/4544949.html
Copyright © 2020-2023  润新知