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.
Haga un bucle multimedia muchas veces con direct show c++
-
25-07-2022 - |
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.
Solución
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow