【问题标题】:Make media loop many times with direct show c++使用direct show c++多次制作媒体循环
【发布时间】:2013-11-07 11:29:44
【问题描述】:

我正在使用 direct show 在我的程序中播放媒体文件,并且我已经能够使用以下代码一次播放媒体文件。

void main()
{
    IGraphBuilder *pGraph = NULL;
    IMediaControl *pControl = NULL;
    IMediaEvent   *pEvent = NULL;
    HRESULT hr = CoInitialize(NULL);

    if (FAILED(hr))
    {
        printf("ERROR - Could not initialize COM library");
    }

    hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);

    if (FAILED(hr))
    {
        printf("ERROR - Could not create the Filter Graph Manager.");
    }

    hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
    hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
    hr = pGraph->RenderFile(L"C:\\Example.mp3", NULL);

    if (SUCCEEDED(hr))
    {
        hr = pControl->Run();

        if (SUCCEEDED(hr))
        {
            long evCode;
            pEvent->WaitForCompletion(INFINITE, &evCode);
        }
    }

    pControl->Release();
    pEvent->Release();
    pGraph->Release();
    CoUninitialize();
    return;
}

然后我的问题变成了我如何让文件继续播放并重复给定次数,或者如果我愿意,可以无限重复。 IMediaControl 没有名为 loop 的成员。

【问题讨论】:

    标签: c++ mp3 directshow multimedia


    【解决方案1】:

    没有内置的方法可以做到这一点。一旦实现这一点的方法是,当您获得完成事件时,您不会退出您的功能,而是寻找文件的开头并再次开始播放。 以下有关事件处理的链接可能会有所帮助:Learning When an Event OccursEC_COMPLETE 流式传输完成时发出事件/通知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      相关资源
      最近更新 更多