现在的位置: 首页 > 综合 > 正文

[DirectShow] 从一个小程序开始

2012年03月08日 ⁄ 综合 ⁄ 共 1390字 ⁄ 字号 评论关闭

在DirectX 9.0文档中给出了一个简单的例子,用来播放多媒体文件。

int _tmain(int argc, _TCHAR* argv[])
{
    IGraphBuilder *pGraph = NULL;
    IMediaControl *pControl = NULL;
    IMediaEvent   *pEvent = NULL;

    // Initialize the COM library.
    HRESULT hr = CoInitialize(NULL);
    if (FAILED(hr))
    {
        printf("ERROR - Could not initialize COM library");
        return 0;
    }

    // Create the filter graph manager and query for interfaces.
    hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
        IID_IGraphBuilder, (void **)&pGraph);
    if (FAILED(hr))
    {
        printf("ERROR - Could not create the Filter Graph Manager.");
        return 0;
    }

    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"D://Program//DXSDK//Samples//Media//chicken.wmv", NULL);
    if (SUCCEEDED(hr))
    {
        // Run the graph.
        hr = pControl->Run();
        if (SUCCEEDED(hr))
        {
            // Wait for completion.
            long evCode;
            pEvent->WaitForCompletion(INFINITE, &evCode);

            // Note: Do not use INFINITE in a real application, because it
            // can block indefinitely.
        }
    }
    pControl->Release();
    pEvent->Release();
    pGraph->Release();
    CoUninitialize();

    return 0;
}

构建IGraphBuilder 、IMediaControl、 IMediaEvent三个对象之后,给RenderFile函数传一个要播放的文件的PATH即可。

这个程序的使用,隐藏了播放窗体、文件格式等等一切信息,只需要一个文件的PATH。

这就是最简单的DirectShow播放多媒体文件的例子。

抱歉!评论已关闭.