Pregunta

Estoy usando Direct Show para reproducir archivos multimedia dentro de mi programa y he podido reproducir un archivo multimedia una sola vez usando el siguiente código.

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

Mi pregunta entonces es ¿cómo puedo hacer que el archivo continúe reproduciéndose y repitiéndose un número determinado de veces, o infinitamente si así lo deseo?IMediaControl no tiene ningún miembro llamado bucle.

¿Fue útil?

Solución

No hay forma incorporada de hacer esto. Una vez que la forma de implementar esto es que, en lugar de salir, funciona cuando obtiene el evento de finalización, busca el comienzo del archivo una reproducción de inicio nuevamente. El siguiente enlace sobre el manejo de eventos puede ayudar: Aprendiendo cuando ocurre un evento. EC_COMPLETE El evento/notificación se emite cuando se completa la transmisión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top