1.简介
DirectShowDirectX中的一套处理媒体播放、音视频采集的开发包,在DirectX SDK Summer 2004(DirectX9.0C SDK的第一个版本,下载地址:http://download.microsoft.com/download/7/e/9/7e9f48c6-f28a-469b-9b8e-cc84032efbd4/
dxsdk_sum2004.exe
)之前的DirectX SDK中都包含有DirectShow SDK,之后的DirectShow SDKExtras的形式单独发布。

2.下载安装
这里使用了DirectX9.0b,下载地址为:
http://download.microsoft.com/download/b/6/a/b6ab32f3-39e8-4096-9445-d38e6675de85/dx90bsdk.exe
假设DirectX SDK安装在D:\DXSDK目录下,开发环境使用VC++6.0
 
在这个版本的DirectX SDK中,DirectShow SDK的库文件STRMBASE.lib需要自己编译,位置在:D:\DXSDK\Samples\C++\DirectShow\BaseClasses目录下。
 
3.设置VC++6.0环境
添加D:\DXSDK\IncludeInclude files目录列表中。
 
4.最简单的DirectShow应用程序 - 播放视频文件
#include <windows.h>
 
#include <DShow.h>
#pragma comment(lib,"Strmiids.lib")
 
int __stdcall WinMain(
                     HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine, int nShowCmd )
{
    //本例来自DirectX SDKHow To Play a File
    IGraphBuilder *pGraph = NULL;
    IMediaControl *pControl = NULL;
    IMediaEvent   *pEvent = NULL;
   
    // 初始化COM.
    HRESULT hr = CoInitialize(NULL);
    if (FAILED(hr))
    {
        MessageBox(NULL,"ERROR - Could not initialize COM library",
       
"Warning",MB_OK|MB_ICONWARNING);
        return -1;
    }
   
    // Create the filter graph manager and query for interfaces.
    hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
        IID_IGraphBuilder, (void **)&pGraph);
    if (FAILED(hr))
    {
        MessageBox(NULL,"ERROR - Could not create the Filter Graph Manager.",
            "Warning",MB_OK|MB_ICONWARNING);
        return -1;
    }
   
    hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
    hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
   
    // Build the graph. IMPORTANT: Change this string to a file on your system.
    hr = pGraph->RenderFile(
   
L"E:\\Movie\\2012\\[2012].2012.2009.R5-CD2-人人影视.rmvb", NULL);
    if (SUCCEEDED(hr))
    {
        // Run the graph.
        hr = pControl->Run();
        if (SUCCEEDED(hr))
        {
            // Wait for completion.
            longevCode;
            pEvent->WaitForCompletion(INFINITE, &evCode);
        }
    }
    pControl->Release();
    pEvent->Release();
    pGraph->Release();
 
    CoUninitialize();
 
    return 0;
}

本文链接地址: DirectShow.1 最简单的DirectShow应用程序 — 播放视频
https://blog.qingfengju.com/index.asp?id=212

上一篇: 体验Linux.1 安装Linux操作系统
下一篇: DirectShow.2 DirectShow原理

分类:Win32/C++ 查看次数:10091 发布时间:2010/4/10 22:02:52