none
Visual studio 2008下DirectShow开发环境的配置 RRS feed

  • 问题

  • 操作系统:WindowsXP

    开发平台:Visual studio 2008      Direct9B

    对DirectShow是新手,想学习这方面的知识,不知道怎么配置,及需要进行什么样的准备才能进行编译运行,及想详细DirectShow的开发详细步骤,方案等,有没有相关的资源下载学习,在哪下载?

    2010年12月27日 8:52

答案

  • Hi heller,

    vs2008DirectShow的配置:

    1、安装工具:vs2008+DirectX 9.0 SDK

    2、假设安装目录是C:\DXSDK

    3、找到C:\DXSDK\Samples\C++\DirectShow\BaseClasses下的baseclasses.sln,打开后可能会提示转换,注意留下备份。编译通过后会生成strmbasd.lib,在debug或者release目录下(取决于你程序生成的版本)。 

    4、配置工作环境

    4.1 1. 首先,点击工具->选项->项目和解决方案->VC++目录。添加两个引用:C:\DXSDK\Samples\C++\DirectShow\BaseClasses

    和C:\DXSDK\Include

    4.2 2再添加库文件的引用。C:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug 和 C:\DXSDK\Lib

    5、新建一基于对话框的MFC程序DirectShowEx,建成后点项目->属性->连接器 ->命令行,在附加选项中输入strmbasd.lib

    6、在directShowEx.h中添加

    #include <dshow.h>
    #include <streams.h>

    将对话框初始化函数OnInitDialog()中的内容替代如下:

    CDialog::OnInitDialog();

     // Add "About..." menu item to system menu.

     // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

     CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if (!strAboutMenu.IsEmpty())
    {
      pSysMenu->AppendMenu(MF_SEPARATOR);
      pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
    }

     // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);   // Set big icon
    SetIcon(m_hIcon, FALSE);  // Set small icon

    // TODO: Add extra initialization here
    IGraphBuilder *pGraph = NULL;
       IMediaControl *pControl = NULL;
       IMediaEvent *pEvent = NULL;

       HRESULT hr = CoInitialize(NULL);
       if(FAILED(hr))
       {
           printf("can't coinitizlize");
           return -1;
       };
       hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
    IID_IGraphBuilder, (void**)&pGraph);
       if(FAILED(hr))
       {
           printf("can't create filtergraph");
           return -1;
       }

       hr = pGraph->QueryInterface(IID_IMediaControl, (void**)&pControl);
       hr = pGraph->QueryInterface(IID_IMediaEvent, (void**)&pEvent);

    hr = pGraph->RenderFile(L"F://lx.avi", NULL);//
    找个自己电脑上的视频文件即可


       if(FAILED(hr))
       {
           printf("cant't renderfile");
           return -1;
       }
       hr = pControl->Run();
       if(FAILED(hr))
       {
           printf("can't run");
           return -1;
       }
       long evCode;
       pEvent->WaitForCompletion(INFINITE, &evCode);



       pControl->Release();
       pEvent->Release();
       pControl->Release();
       CoUninitialize();
       printf("Hello World!\n");
       return 0;

     return TRUE;  // return TRUE  unless you set the focus to a control

    Ctrl+F5编译运行就可以了。

     

    以下的链接可以供您进一步学习:

    DirectShow 开发指南》

    http://download.csdn.net/source/2529822

    DirectShow 开发指南及代码》

    http://download.chinaitlab.com/program/files/15780.html

    DirectShow 的教材

    http://msdn.microsoft.com/en-us/library/ms783355(VS.85).aspx

    DirectShow filters

    http://www.codeproject.com/KB/audio-video/DirectShow_Filters.aspx

    c++DirectShow视频开发 - 文章资

    http://www.maeee.cn/article/special/cjjsp/Special003_3.shtml

     

    这个回答中包含了第三方的网站链接,我们提供这些链接只是为了让您更好地解决问题。

    微软无法管理这些网站,也没有验证过这些软件和信息。因此微软对于这些第三方网站的质量,安全,软件和信息不负任何责任。

     

    如果您的问题解决了,请把有用的回答标记为答案。

    谢谢,

    Lucy

     


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2010年12月29日 3:04
    版主

全部回复

  • Hi heller,

    vs2008DirectShow的配置:

    1、安装工具:vs2008+DirectX 9.0 SDK

    2、假设安装目录是C:\DXSDK

    3、找到C:\DXSDK\Samples\C++\DirectShow\BaseClasses下的baseclasses.sln,打开后可能会提示转换,注意留下备份。编译通过后会生成strmbasd.lib,在debug或者release目录下(取决于你程序生成的版本)。 

    4、配置工作环境

    4.1 1. 首先,点击工具->选项->项目和解决方案->VC++目录。添加两个引用:C:\DXSDK\Samples\C++\DirectShow\BaseClasses

    和C:\DXSDK\Include

    4.2 2再添加库文件的引用。C:\DXSDK\Samples\C++\DirectShow\BaseClasses\Debug 和 C:\DXSDK\Lib

    5、新建一基于对话框的MFC程序DirectShowEx,建成后点项目->属性->连接器 ->命令行,在附加选项中输入strmbasd.lib

    6、在directShowEx.h中添加

    #include <dshow.h>
    #include <streams.h>

    将对话框初始化函数OnInitDialog()中的内容替代如下:

    CDialog::OnInitDialog();

     // Add "About..." menu item to system menu.

     // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

     CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if (!strAboutMenu.IsEmpty())
    {
      pSysMenu->AppendMenu(MF_SEPARATOR);
      pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
    }

     // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);   // Set big icon
    SetIcon(m_hIcon, FALSE);  // Set small icon

    // TODO: Add extra initialization here
    IGraphBuilder *pGraph = NULL;
       IMediaControl *pControl = NULL;
       IMediaEvent *pEvent = NULL;

       HRESULT hr = CoInitialize(NULL);
       if(FAILED(hr))
       {
           printf("can't coinitizlize");
           return -1;
       };
       hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
    IID_IGraphBuilder, (void**)&pGraph);
       if(FAILED(hr))
       {
           printf("can't create filtergraph");
           return -1;
       }

       hr = pGraph->QueryInterface(IID_IMediaControl, (void**)&pControl);
       hr = pGraph->QueryInterface(IID_IMediaEvent, (void**)&pEvent);

    hr = pGraph->RenderFile(L"F://lx.avi", NULL);//
    找个自己电脑上的视频文件即可


       if(FAILED(hr))
       {
           printf("cant't renderfile");
           return -1;
       }
       hr = pControl->Run();
       if(FAILED(hr))
       {
           printf("can't run");
           return -1;
       }
       long evCode;
       pEvent->WaitForCompletion(INFINITE, &evCode);



       pControl->Release();
       pEvent->Release();
       pControl->Release();
       CoUninitialize();
       printf("Hello World!\n");
       return 0;

     return TRUE;  // return TRUE  unless you set the focus to a control

    Ctrl+F5编译运行就可以了。

     

    以下的链接可以供您进一步学习:

    DirectShow 开发指南》

    http://download.csdn.net/source/2529822

    DirectShow 开发指南及代码》

    http://download.chinaitlab.com/program/files/15780.html

    DirectShow 的教材

    http://msdn.microsoft.com/en-us/library/ms783355(VS.85).aspx

    DirectShow filters

    http://www.codeproject.com/KB/audio-video/DirectShow_Filters.aspx

    c++DirectShow视频开发 - 文章资

    http://www.maeee.cn/article/special/cjjsp/Special003_3.shtml

     

    这个回答中包含了第三方的网站链接,我们提供这些链接只是为了让您更好地解决问题。

    微软无法管理这些网站,也没有验证过这些软件和信息。因此微软对于这些第三方网站的质量,安全,软件和信息不负任何责任。

     

    如果您的问题解决了,请把有用的回答标记为答案。

    谢谢,

    Lucy

     


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2010年12月29日 3:04
    版主
  • 学习了....
    2011年1月3日 12:02