質問

私はプログラム内でメディアファイルを再生するために直接的なショーを使用しており、次のコードを使用してメディアファイルを1回再生することができました。

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という名前のメンバーがいません。

役に立ちましたか?

解決

これを行うために組み込まれた方法はありません。これを実装する方法は、完了イベントを取得するときに機能を終了する代わりに、ファイルの先頭に再び開始再生を求めることです。イベント処理に関する次のリンクは次のとおりです。 イベントが発生したときに学習します. EC_COMPLETE イベント/通知は、ストリーミングが完了したときに発行されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top