读书人

大家帮忙看一下两路视频采集的不能

发布时间: 2012-02-12 17:16:34 作者: rapoo

大家帮忙看一下,两路视频采集的,不能实现,有源码.
//这儿开始对第一路图像进行采集
procedure TVideoForm.OnSelectDevice(sender: TObject);
begin
FilterGraph.ClearGraph;
FilterGraph.Active := false;
Filter.BaseFilter.Moniker := SysDev.GetMoniker(0);
FilterGraph.Active := true;
with FilterGraph as ICaptureGraphBuilder2 do
begin
RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter, nil, VideoWindow as IbaseFilter);
SetOutputFileName(MEDIASUBTYPE_Asf, PWideChar(CapFile), multiplexer, Writer);
RenderStream(@PIN_CATEGORY_CAPTURE, @MEDIATYPE_Video, Filter as IBaseFilter,nil,multiplexer as IBaseFilter);
end;
FilterGraph.Play;
end;

//开始转换到第二路图像
procedure TVideoForm.Button1Click(Sender: TObject);
begin
filtergraph.Pause;
FilterGraph.ClearGraph;
FilterGraph.Active := false;
Filter.BaseFilter.Moniker := SysDev.GetMoniker(1);
FilterGraph.Active := true;
with FilterGraph as ICaptureGraphBuilder2 do
begin

RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter, nil, VideoWindow as IbaseFilter);

RenderStream(@PIN_CATEGORY_CAPTURE, @MEDIATYPE_Video, Filter as IBaseFilter,nil,multiplexer as IBaseFilter);
end;
FilterGraph.Play;
end;

程序运行后可以采集第一路的,但是转换到第二路后videowindow中可以显示第二路的图像,而采集会停止(也就是说已经不往文件中写了)。
这个问题已经困扰我好长时间了,一直没有解决,请各位老大帮忙看一下,这个问题应该怎么样解决,谢谢各位了。

[解决办法]
粗略看你的带吗好象第2个没有往文件写的代码啊,是不是缺少SetOutputFileName(MEDIASUBTYPE_Asf, PWideChar(CapFile), multiplexer, Writer);这个的缘故啊
[解决办法]
但是如果这样你FilterGraph.ClearGraph;之后文件写入部分也应该被断掉了所以不能继续写
[解决办法]
我有一个可能挺笨的想法,你每切换一次,因为需要重新搭建Graph,所以新建一个输出文件,写入,然后把你这些输出文件连接起来,组成一个完整的文件

读书人网 >.NET

热点推荐