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.
Fare il ciclo dei media molte volte con lo spettacolo diretto C ++
-
25-07-2022 - |
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.
Soluzione
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow