اجعل حلقة الوسائط عدة مرات مع العرض المباشر C ++

StackOverflow https://stackoverflow.com/questions/19834776

سؤال

أنا أستخدم Show Direct لتشغيل ملفات الوسائط داخل برنامجي ، وقد تمكنت من تشغيل ملف الوسائط مرة واحدة باستخدام الكود التالي.

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

يصبح سؤالي إذن كيف يمكنني جعل الملف يستمر في اللعب وتكرار نفسه من المرات ، أو بلا حدود إذا كنت ترغب في ذلك. Imediacontrol ليس لديه عضو يدعى Loop.

هل كانت مفيدة؟

المحلول

لا يوجد بني في طريق للقيام بذلك. بمجرد تنفيذ ذلك ، فإن ذلك بدلاً من الخروج من العمل عندما تحصل على حدث الإكمال ، فإنك تسعى إلى بداية الملف للتشغيل مرة أخرى. قد يساعد الرابط التالي في التعامل مع الأحداث: التعلم عند حدوث حدث ما. EC_COMPLETE يتم إصدار الحدث/الإخطار عند اكتمال البث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top