2012-05-15 44 views
0

我正在製作一個Directshow應用程序來捕獲MP4視頻。我使用下圖來做到這一點。directshow RedenStream無法捕獲

Input Stream --> MJPEG Decompressor --> x264vfw H.264/MPEG-4 AVC Codec --> GDCL Mpeg-4 Multiplexor --> File Writer 
在我的DirectShow的應用

,我創建了所需的過濾器和連接它們的圖形,在結束時,我做的文件寫入操作,並使用引腳作爲捕獲更紅流。我的代碼部分如下。

GUID guid; 
guid = MEDIASUBTYPE_x264; 

hr = gcap.pBuilder->SetOutputFileName(&guid, gcap.wszCaptureFile, 
             &g_mp4mux, &gcap.pSink); 



hr = gcap.pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, 
            &MEDIATYPE_Interleaved, 
            gcap.pVCap, pVcompFilter, NULL); 
if(hr != NOERROR) 
{ 
    hr = gcap.pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, 
             &MEDIATYPE_Video, 
             gcap.pVCap, pVcompFilter, NULL); 
    if(hr != NOERROR) 
    { 
     ErrMsg(TEXT("Cannot render video capture stream")); 
     TearDownGraph(); 
     return FALSE; 
    } 
} 

在上面的代碼

g_mp4muxGDCL MPEG-4 Muliplexrer濾波器

PVcompFilterx264vfw H.264/MPEG-4 AVC codec過濾

當我運行上面的代碼我得到HR = E_INVALIDARG

不知道上面的代碼有什麼問題。 Plz幫助。謝謝。

回答

1

RenderStream在內部執行多個步驟,並且如果在順序過程中發生任何錯誤,則錯誤將被轉發回去而沒有詳細信息。因此,E_INVALIADRG是你所有的,你不知道這是你的電話或內部的錯誤論證。對於初學者來說,檢查你的論點(你可能會在第三和第四個參數中傳遞NULL),那麼如果它沒有幫助,用直接的圖形構建函數如IGraphBuilder :: Connect來替換RenderStream,以便了解更多關於錯誤的信息。

還別說您交叉發佈:at msdn.microsoft.com

+0

感謝您的答覆......我嘗試這種方式,並還給你。 – meghana

+0

當我用直接圖形構建調用替換渲染流時,它工作正常。我很高興它的工作,但它的奇怪,沒有得到爲什麼之前沒有工作的原因! – meghana