2011-05-30 66 views
1

我嘗試使用GDF MPEG 4 Mux與GMFBridge。GMFBridge與GMF GDCL MPEG 4 Mux過濾器

我原來圖爲:

SourceFilter ---> GDCL MPEG 4 Mux Filter ---> FileWriter 

我想根據我的特殊標準給予新的文件名(如時間,例如每五分鐘),但不想再創建整個圖形。所以我嘗試使用GMFBridge。

我不工作。我真的不知道如何使用GMFBridge或它不工作。

注:這是我做GMFBridge

爲了使用,我把我的圖形分爲兩個部分:

FirstPart ==> SourceFilter---> GDCL MPEG 4 Mux Filter--> BridgeSinkFilter 

SecondPart ==> BridgeSourceFilter ---> FileWriter 

我的計劃僞代碼

IGraphBuilder firstPartGraph = (IGraphBuilder) new FilterGraph(); 
IGraphBuilder secondPartGraph = (IGraphBuilder) new FilterGraph(); 

IBaseFilter bridgeSinkFilter; 
IBaseFilter bridgeSourceFilter; 

IBaseFilter sourceFilter; 
IBaseFilter muxerFilter; 
IBaseFilter fileWriterFilter; 


// Create bridge controller and init 
IGMFBridgeController bridge = (IGMFBridgeController)new GMFBridgeController(); 

bridge.AddStream(true,eFormatType.MuxInputs, true); 

// Then insert Sink filter 

bridge.InsertSinkFilter(firstPartGraph, bridgeSinkFilter); 

// Configure first part filters 


firstPartGraph.AddFilter(sourceFilter); 
firstPartGraph.AddFilter(muxerFilter); 
firstPartGraph.AddFilter(bridgeSinkFilter); // Have to add this?? 

ConnectFilters(firstPartGraph,sourceFilter,muxerFilter); 
ConnectFilters(firstPartGraph,muxerFilter,bridgeSinkFilter); 


// Now add bridge sourceFilter 

bridge.InsertSourceFilter(bridgeSinkFilter,secondPartGraph,bridgeSourceFilter); 

// Then configure second part graph 


secondPartGraph.AddFilter(bridgeSourceFilter); // Have to add this?? 
secondPartGraph.AddFilter(fileWriterFilter); 

ConnectFilters(secondPartGraph,bridgeSourceFilter,fileWriterFilter); 


// Now bridge two graphs 

bridge.BridgeGraphs(bridgeSinkFilter,fileWriterFilter,bridgeSourceFilter); 


// Execute both graphs 

IMediaControl mediaControlForPartOne = (IMediaControl)firstPartGraph; 
mediaControlForPartOne->Run(); 

IMediaControl mediaControlForPartSecond = (IMediaControl)secondPartGraph; 
mediaControlForPartSecond->Run(); 

現在如何停止第二個圖形部分並設置新文件名,然後使用橋重新連接圖形?

FIX IT:

感謝。

我只是改變我的grapg分裂與現在的工作:

FirstPart ==> SourceFilter--> BridgeSinkFilter 
    SecondPart ==> BridgeSourceFilter ---> GDCL MPEG 4 Mux Filter---> FileWriter 

回答

1

如果你有兩個圖的工作,並得到正確的輸出在第二幅圖;您可以斷開圖形:

BridgeGraphs(NULL, NULL); 

現在您可以停止第二個圖形,將其刪除並創建一個新圖形。啓動新的圖形,然後重新連接它們:

BridgeGraphs(bridgeSinkFilter, newBridgeSourceFilter); 
+0

其實,我不能得到第二張圖正確輸入......可能是因爲複用的......也許我圖的divison是錯誤的... – DSBoy 2011-05-31 06:53:26

+0

我固定的......我把我的graps不同 – DSBoy 2011-05-31 08:09:20

3

您需要將多路&文件作家在第二張圖。有兩個原因。首先,多路複用器和文件寫入器之間的流量包括自定義接口,而不僅僅是標準IMemInputPin協議(以便在圖形停止後允許完成頭文件),其次,它是要停止關閉文件的多路複用器,而不是文件編寫者。

所以,在第一個圖中的源代碼,並在第二個圖中mux =>文件編寫器,你應該沒問題。

+0

在C#中使用GMFBuilder.dll文件進行此操作時,這些函數不會攜帶相同的對象。 IGMFBridgeController.InsertSinkFilter只接受(object pGraph),而不接受這裏顯示的(iGraphBuilder,IBaseFilter)。你能幫我理解嗎? – Grant 2011-06-21 00:32:56