`

50行代码实现的一个最简单的基于 DirectShow 的视频播放器

 
阅读更多

本文介绍一个最简单的基于 DirectShow 的视频播放器。该播放器对于初学者来说是十分有用的,它包含了使用DirectShow 播放视频所有必备的函数。

直接贴上代码,具体代码的含义都写在注释中了:

 

/* 雷霄骅
 * 中国传媒大学/数字电视技术
 * leixiaohua1020@126.com
 *
 */
// aviplayer.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include <dshow.h>

// 用到的DirectShow SDK链接库
#pragma comment(lib,"strmiids.lib")

int _tmain(int argc, _TCHAR* argv[])
{
	IGraphBuilder *pGraph = NULL;
    IMediaControl *pControl = NULL;
    IMediaEvent   *pEvent = NULL; 
    // 初始化COM库.
    HRESULT hr = CoInitialize(NULL);
    if (FAILED(hr))
    {
        printf("错误 - 无法初始化 COM 组件");
        return -1;
    }
// 创建滤波器图表管理器
   hr=CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder, (void **)&pGraph);
    if (FAILED(hr))
    {
        printf("错误 - 无法创建 Filter Graph Manager.");
        return -1;
    }
   // 查询媒体控制和媒体事件接口
   hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
    hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
// 建立图表,在这里你可以更改待播放的文件名称
    hr = pGraph->RenderFile(L"E:\\movie\\外婆.VOB", NULL);
    if (SUCCEEDED(hr))
    {
        // 运行图表.
        hr = pControl->Run();
        if (SUCCEEDED(hr))
        {
            //等待回放结束事件.
            long evCode;
            pEvent->WaitForCompletion(INFINITE, &evCode);
           // 切记: 在实际应用当中,不能使用INFINITE标识, 因为它会不确定的阻塞程序
        }
    }
// 释放所有资源和关闭COM库
    pControl->Release();
    pEvent->Release();
    pGraph->Release();
    CoUninitialize();
	return 0;
}


源代码下载(VC2010):http://download.csdn.net/detail/leixiaohua1020/6456581

 

 

分享到:
评论

相关推荐

    directshow的简单示例

    这个“DirectShow的简单示例”可能是一个帮助开发者理解和应用DirectShow技术的教程或代码样本。 DirectShow主要设计用于播放媒体文件、捕获音频和视频流以及进行实时的多媒体处理。它构建在COM(组件对象模型)之...

    基于directshow的摄像头预览

    DirectShow是微软开发的一个多媒体框架,用于处理视频和音频流。它提供了一种灵活和高效的方式来进行媒体数据的捕获、处理和播放。在“基于DirectShow的摄像头预览”这个主题中,我们主要探讨如何利用DirectShow API...

    VB 视频 播放器 VB 视频 播放器

    在这个特定的案例中,"VB 视频 播放器"是一个基于VB编写的简单媒体播放器程序。下面我们将深入探讨VB开发视频播放器的相关知识点: 1. **VB基础**:VB是Visual Basic的缩写,它基于Basic语言,具有直观的图形用户...

    最新DirectShow视频采集开发指南.pdf

    例如,要实现一个简单的视频预览功能,可以向过滤图表中添加一个视频捕捉源过滤器(Source Filter)和一个Video Renderer过滤器(Rendering Filter),然后将两者正确连接起来。 ##### 2.3 DirectShow的开发环境...

    基于mfc播放器

    【基于MFC播放器】是一个面向初学者的项目,它利用Microsoft Foundation Classes (MFC) 框架创建了一个简单的用户界面,用于实现媒体播放功能。MFC是微软为Windows平台开发的应用程序提供的一种C++类库,它封装了...

    播放器设计与实现

    在本项目中,我们关注的是"播放器设计与实现",这是一个基于VC++的简单视频播放器的开发案例,特别适合初级开发者进行课程设计实践。这个项目涉及到许多关键的计算机科学和技术概念,尤其是针对软件开发和多媒体处理...

    MFC视频播放器顺序随机单曲循环播放模式(VC源代码)

    对于视频播放器,我们可能需要创建一个基于CWinApp的子类,用于处理应用程序的初始化和退出,以及与播放器相关的全局设置。 接下来,实现视频播放功能,我们可以利用DirectShow或者Media Foundation框架。...

    音乐播放器VC源代码

    总之,“MyPlayer”这款简单的音乐播放器VC源代码为我们提供了一个很好的学习平台,涵盖了DirectShow音频处理、MCI接口应用、COM组件交互以及MFC界面设计等多个方面。通过研究这个项目,开发者不仅可以加深对VC编程...

    视频Deinterlace算法的实现代码

    在这个项目中,Deinterlace Filter是基于Directshow构建的一个组件,它实现了Deinterlace算法,能够将交错视频转换为非交错视频。 Deinterlace算法有多种实现方式,其中包括以下几种常见方法: 1. **Bob算法**...

    简单视频摘要系统的设计与实现

    在本文中,我们将深入探讨一个基于DirectShow和C++实现的简单视频摘要系统的设计与实现过程。 首先,我们要了解DirectShow。DirectShow是微软开发的一个多媒体框架,它主要用于处理音频和视频流。DirectShow提供了...

    简易视频播放器_C#_

    【简易视频播放器_C#_】是一款专为初学者设计的简单视频播放软件,它基于C#编程语言实现,提供基本的视频控制功能,包括播放、暂停、停止、后退、快进以及跳转等操作。这个项目对于想要学习如何在C#环境下开发多媒体...

    VC++实现视频采集

    本篇文章将详细探讨如何使用VC++实现视频采集,主要基于DirectShow框架,同时也会涉及到Visual Studio(VS)和.NET环境的使用。我们还将讨论如何处理不同类型的视频输入源,如USB摄像头、视频采集卡以及各种视频信号...

    Simple DirectShow Player

    这个"Simple DirectShow Player"是一个基于C++编码的源代码项目,专注于实现最基本的播放功能。在这个项目中,开发者可以学习到如何使用DirectShow API来构建一个简单的媒体播放器。 DirectShow主要包含以下几个...

    Window下通过DirectShow控制USB摄像头抓拍照片

    文件名6f796a9282814fb096405a2ce18480f5可能是一个编译后的可执行文件或者源代码文件,通过查看和运行这个文件,可以更直观地理解DirectShow控制摄像头抓拍照片的过程。 总的来说,DirectShow为开发者提供了底层的...

    一个DirectShow小程序

    这个程序是一个基于DirectShow技术的小型应用程序,它可能包含播放、捕获、编辑或转换媒体文件的基本功能。DirectShow广泛应用于Windows操作系统中,提供了丰富的API接口,使得开发者能够方便地创建多媒体应用。 在...

    C#实现从视频文件中读取关键帧数据源代码

    以下是一个简单的C#代码示例,展示如何使用FFmpeg API读取视频的关键帧: ```csharp using System; using System.Diagnostics; using System.IO; using System.Linq; class VideoKeyframeExtractor { public ...

    Directshow,SDK

    AMCap是Directshow SDK中附带的一个简单示例程序,它展示了如何使用Directshow API捕获并显示来自摄像头的视频流。你可以通过分析和修改AMCap的源代码来学习如何与Directshow接口交互,实现自己的功能。 SDK文件夹...

    简单的播放器

    这个“简单的播放器”基于MFC(Microsoft Foundation Classes)框架,是一个用户界面友好的应用程序,主要用于播放音频或视频文件。MFC是微软提供的一套C++类库,它为Windows应用程序开发提供了丰富的接口,简化了...

    Visual C++编程实现摄像头视频捕捉

    使用Visual C++结合DirectShow技术实现摄像头视频捕捉是微软平台下的一个常用解决方案。接下来,本文将详细解释DirectShow在视频捕捉中的作用,以及在Visual C++中如何编程实现视频捕捉。 DirectShow是微软公司推出...

Global site tag (gtag.js) - Google Analytics