سؤال

لدي DirectShow الرسم البياني إلى تقديم MPEG2/4 أفلام من تيار الشبكة.عندما تجميع الرسم البياني عن طريق ربط المسامير يدويا لا تجعل.ولكن عندما اتصل يجعل على GraphBuilder يجعل بخير.

ومن الواضح أن هناك بعض الإعداد خطوة أنني لست على أداء بعض مرشح في الرسم البياني أن GraphBuilder هو المنفذ.

هل هناك أي طريقة لمعرفة إخراج التصحيح من GraphBuilder عندما يجمع الرسم البياني?

هل هناك طريقة تفريغ العامل الرسم البياني أن نرى كيف كان وضع معا ؟

أي أفكار أخرى من أجل كشف الغموض الذي يعيش في DirectShow الصندوق ؟

وذلك بفضل!-Z

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

المحلول

يمكنك مشاهدة الرسم البياني قمت بإنشائه باستخدام GraphEdit أداة من DirectShow SDK.في GraphEdit ، اختر ملف->الاتصال عن بعد البياني...

من أجل العثور على الرسم البياني الخاص بك في القائمة ، يجب عليك التسجيل في تشغيل كائن الجدول:

void AddToRot( IUnknown *pUnkGraph, DWORD *pdwRegister ) 
{
    IMoniker* pMoniker;
    IRunningObjectTable* pROT;
    GetRunningObjectTable( 0, &pROT );

    WCHAR wsz[256];     
    swprintf_s( wsz, L"FilterGraph %08p pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId() );
    CreateItemMoniker( L"!", wsz, &pMoniker );

    pROT->Register( 0, pUnkGraph, pMoniker, pdwRegister );

    // Clean up any COM stuff here ...
}

بعد تدمير الرسم البياني الخاص بك, يجب إزالته من تعفن طريق الاتصال IRunningObjectTable::إلغاء

نصائح أخرى

الروماني Ryltsov خلقت DirectShow فلتر الرسم البياني أداة تجسس (http://alax.info/blog/777) مجمع dll COM على FilterGraph واجهة ، الذي يسجل جميع المكالمات إلى FilterGraph الأساليب.

كما أنه سيتم إضافة جميع خلق الرسوم البيانية في تشغيل كائن جدول (ROT) والتي يمكنك ثم تصور باستخدام أدوات مثل GraphEdit أو GraphStudio.مفيدة جدا عندما كنت بحاجة لمعرفة كيفية Windows Media Player الرسم البياني يبدو.

IGraphBuilder::SetLogFile (انظر http://msdn.microsoft.com/en-us/library/dd390091(v=مقابل 85).aspx) سوف تعطيك الكثير من المفيد تشخيص المعلومات حول ما يحدث خلال الرسم البياني المبنى.تمر في التعامل مع ملف (على سبيل المثالفتح CreateFile) ويلقي به إلى DWORD_PTR.ندعو مرة أخرى مع NULL لإنهاء تسجيل الدخول قبل إغلاق مؤشر الملف.

الكود في بلوق وظيفة عن الإغراق الرسم البياني سوف أعطيكم بعض المعلومات الإضافية تفسير الأرقام في ملف السجل.

http://rxwen.blogspot.com/2010/04/directshow-debugging-tips.html

تحتاج إلى:

  1. سجل تصفية الرسم البياني إلى "تشغيل الكائنات الجدول" - ROT - استخدام رمز أدناه
  2. الاتصال تصفية الرسم البياني باستخدام GraphEdit (ملف->الاتصال عن بعد البياني) أو حتى أفضل - مع GraphEditPlus

تسجيل تصفية الرسم البياني بأنه "للاتصال" الرسم البياني, نسمي هذا مع تصفية الرسم البياني:

void AddToROT( IUnknown *pUnkGraph, DWORD *pdwRegister ) 
{
    IMoniker * pMoniker;
    IRunningObjectTable *pROT;
    WCHAR wsz[128];
    HRESULT hr;

    if (FAILED(GetRunningObjectTable(0, &pROT)))
        return;

    wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());

    hr = CreateItemMoniker(L"!", wsz, &pMoniker);
    if (SUCCEEDED(hr)) 
    {
        hr = pROT->Register(0, pUnkGraph, pMoniker, pdwRegister);
        pMoniker->Release();
    }

    pROT->Release();
}

و نسمي هذا قبل الافراج عن الرسم البياني:

void RemoveFromROT(DWORD pdwRegister)
{
    IRunningObjectTable *pROT;

    if (SUCCEEDED(GetRunningObjectTable(0, &pROT))) 
    {
        pROT->Revoke(pdwRegister);
        pROT->Release();
    }
}

`

الإصدارات القديمة من DirectX انا اجد 9a, ولكن ليس 9b كان "تصحيح الوضع" على dshow.فإنه إخراج السجلات من معلومات التصحيح إلى وحدة التحكم التصحيح.

حتى تحميل نسخة قديمة, تعيين إلى تصحيح.ثم فتح debugview أو تحميل graphedt.exe في visual studio لمعرفة معلومات التصحيح.

هل يمكن أن "حفظ" الرسم البياني (تسلسل ذلك) إلى .grf graphedit الملف, ربما: https://stackoverflow.com/a/10612735/32453

أيضا يبدو أن graphedit أن "بعد إرفاق" إلى تشغيل البيانية ؟ http://rxwen.blogspot.com/2010/04/directshow-debugging-tips.html

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