我尝试将GDCL MPEG 4 Mux与GMFBridge一起使用。
我原来的图表是:
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();
现在如何停止第二个图形部分并设置新文件名,然后使用bridge重新连接图形?
修复IT:
感谢。
我只是改变了我的grapg divison并且正在工作:
FirstPart ==> SourceFilter--> BridgeSinkFilter
SecondPart ==> BridgeSourceFilter ---> GDCL MPEG 4 Mux Filter---> FileWriter
答案 0 :(得分:3)
你需要放置多路复用器和放大器。第二个图中的文件编写器。有两个原因。首先,mux和文件编写器之间的流量包括自定义接口,而不仅仅是标准的IMemInputPin协议(允许在图形停止后终止标头),其次,它是你要停止以便关闭文件的多路复用器,而不是文件编写者。
所以,在第一个图表中输入,在第二个图表中使用mux =>文件编写器,你应该没问题。
答案 1 :(得分:1)
如果您有两个图表,并在第二个图表中获得正确的输出;你可以断开图表:
BridgeGraphs(NULL, NULL);
现在您可以停止第二个图表,删除它并创建一个新图表。启动新图表,然后重新连接:
BridgeGraphs(bridgeSinkFilter, newBridgeSourceFilter);