Frage

Ich verwende Direct Show, um Mediendateien in meinem Programm abzuspielen, und konnte mit dem folgenden Code eine Mediendatei ein einziges Mal abspielen.

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;
}

Meine Frage stellt sich dann, wie ich die Datei weiter spielen und sich selbst wiederholen würde, oder unendlich, wenn ich es gewünscht habe. IMediaControl hat kein Mitglied namens Loop.

War es hilfreich?

Lösung

Es gibt keine Art und Weise eingebaut, dies zu tun. Sobald dies implementiert wird, ist es, dass Sie anstatt Sie zu beenden, wenn Sie das Fertigstellungsereignis erhalten, sondern den Beginn der Datei erneut eine Start -Wiedergabe. Der folgende Link zur Ereignisbehandlung kann helfen: Lernen, wenn ein Ereignis auftritt. EC_COMPLETE Ereignis/Benachrichtigung wird nach Abschluss des Streamings ausgestellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top