DirectShow简单入门程序
1.首先确认已安装过相关工具及配置环境,然后打开vs2010,新建一对话框应用程序 取名为Player_test1,然后打开菜单-》项目-》属性-》
添加strmmiids.lib库文件,然后在头文件里包含“dshow.h”头文件。
2. 在头文件里添加public成员变量 ,在构造函数里初始化为NULL
其中IGraphBuilder 用于建立以Filter Graph,管理各种filter。
IMediaControl 用于控制通过filter进行播放的视频流,最常用的方法就是PLAY(),PAUSE(),STOP()等
IMediaEvent 用于检索系统消息。
IVideoWindow 用于设置播放窗口的属性,包括位置,大小,拥有者等
- IGraphBuilder * pGraph;//Graph管理器
- 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();
最后直接运行就可以播放视频了,当然这只是最简单的功能。希望能和大家多多交流。
DirectShow简单入门程序的更多相关文章
- springmvc(一) springmvc框架原理分析和简单入门程序
springmvc这个框架真的非常简单,感觉比struts2还更简单,好好沉淀下来学习~ --WH 一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解 ...
- SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序
一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...
- springmvc框架原理分析和简单入门程序
一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...
- MyBatis - 介绍、简单入门程序
JDBC编程中的问题 1. 将SQL语句硬编码到Java代码,不利于系统维护. 设想如何解决:将SQL单独抽取出来,在配置文件(xml方式.properties文件)进行配置. ...
- Java爬虫——Gecco简单入门程序(根据下一页一直爬数据)
为了完成作业,所以学习了一下爬虫Gecco,这个爬虫集合了以往所有的爬虫的特点,但是官方教程中关于Gecco的教程介绍的过于简单,本篇博客是根据原博客的地址修改的,原博客中只有程序的截图,而没有给出一 ...
- MyBatis学习(一)简单入门程序
MyBatis入门学习 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...
- freemarker的简单入门程序
本文主要介绍了freemarker的常用标签<#list> <#import> <#assign> <#if> <#else> &l ...
- 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...
- GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...
随机推荐
- 更改placeholder样式
/*不要将选择器进行组合*/ /* IE 10-11 */ :-ms-input-placeholder { color: #aaa; } /* webkit */ ::-webkit-input-p ...
- jQuery_2_常规选择器-简单选择器
JQuery最核心的组成部分就是:选择器引擎.它继承了css的语法,可以对DOM元素的标签名.属性名.状态等进行快速准确的选择. jQuery选择器的写法与CSS 选择器十分类似,只不过他们的功能不同 ...
- php:生成的时间与本地电脑的时间不匹配
如题,在php中我发现在数据库中的时间跟电脑上的时间没有同步 本地时间: 数据库中,生成的时间: 很明显,时分秒是对应不上去的,那么我们只要在php.ini中找到 这里被注释掉了,那我们就改成这样: ...
- hdu-1068&&POJ1466 Girls and Boys---最大独立集
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1068 题目大意: 有n个人,一些人认识另外一些人,选取一个集合,使得集合里的每个人都互相不认识,求该 ...
- cd ..和cd -
cd ..是返回上一层目录, cd -是返回到上一次的工作目录.
- java常用 开源
http://sourceforge.nethttp://code.google.com/hosting/http://www.open-open.com/code/tags/Javahttp://w ...
- 2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(目录)
章节一 2018年 ELK课程计划和效果演示 1.课程安排和效果演示 简介:课程介绍和主要知识点说明,ES搜索接口演示,部署的ELK项目演示 章节二 elasticSearch 6.2版本基础讲解到 ...
- Java基础面试题:String 和StringBuffer的区别
package com.swift; import java.util.Date; public class Getclass_Test extends Date { public static vo ...
- Oracle数据库学习(一)
Oracle数据库由甲骨文公司开发,是基于对象的关系型数据库:下面是简单的学习数据库操作等知识. 1.SQL单表查询(设一个表名为tab) (1)查询所有记录 select * from tab(一般 ...
- 第18题:在O(1)时间删除链表结点+删除链表中重复的节点
题目描述:题目描述在O(1)时间删除链表结点 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 考查创新编程能力. 思路: 1.如果从头到尾遍历,时间O(n) 2.如果将待删 ...