Domanda

Sto usando Direct Show per riprodurre file multimediali all'interno del mio programma e sono stato in grado di riprodurre un file multimediale una sola volta utilizzando il seguente codice.

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

La mia domanda diventa quindi come renderei il file continuare a giocare e ripetere un determinato numero di volte, o infinitamente se lo desideravo. IdiaControl non ha un membro chiamato Loop.

È stato utile?

Soluzione

Non esiste un modo incorporato per farlo. Una volta che il modo di implementare questo è che invece di uscire dalla tua funzione quando si ottiene l'evento di completamento, si cerca di nuovo all'inizio del file una riproduzione iniziale. Il seguente link sulla gestione degli eventi può aiutare: Imparare quando si verifica un evento. EC_COMPLETE L'evento/notifica viene emesso al termine dello streaming.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top