问题描述
|
我尝试将GMCLridge与GDCL MPEG 4 Mux一起使用。
我的原始图形是:
SourceFilter ---> GDCL MPEG 4 Mux Filter ---> FileWriter
我想根据自己的特殊标准(例如time,例如每五分钟一次)指定新的文件名,但不想再次创建整个图形。所以我尝试使用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();
现在如何停止第二个图形部分并设置新文件名,然后使用网桥重新连接图形?
修理它:
谢谢。
我只是更改了grapg的区分,然后开始工作:
FirstPart ==> SourceFilter--> BridgeSinkFilter
SecondPart ==> BridgeSourceFilter ---> GDCL MPEG 4 Mux Filter---> FileWriter
解决方法
如果两个图都正常工作,并且在第二个图中获得正确的输出;您可以断开图形:
BridgeGraphs(NULL,NULL);
现在,您可以停止第二张图,将其删除并创建一个新图。启动新图,然后再次连接它们:
BridgeGraphs(bridgeSinkFilter,newBridgeSourceFilter);
, 您需要在第二张图中放置多路复用器和文件编写器。有两个原因。首先,mux与文件编写器之间的流量包括自定义接口,而不仅仅是标准的IMemInputPin协议(以允许在图形停止后最终确定头),其次,它是您想要停止以关闭文件的mux,而不是文件编写器。
因此,第一个图形中的source,第二个图形中的mux => file writer,您应该没问题。
G