如何处理对采集到的视频图像进行录制时,录制的影像文件不连贯的问题(100分)

  • 主题发起人 主题发起人 Daisw
  • 开始时间 开始时间
D

Daisw

Unregistered / Unconfirmed
GUEST, unregistred user!
如何处理录制的影像文件不连贯的问题,具体描述如下:

我是采用Directshow做的采集USB视频图像(分辨率 720*576),并进行录制。

1、录制时就连USB视频图像显示都很慢,而且图像显示不连贯断断续续。录制的文件(文件格式:*AVI)回放也同样是断断续续。
2、录制时资源占用非常严重(CPU 将近占用100%)
3、录制的文件没有被压缩,文件非常大。

请高手帮忙指点指点。急呀!

处理的代码如下:

procedure TfrmMain.sbCaptureClick(Sender: TObject);
var
multiplexer: IBaseFilter;
Writer: IFileSinkFilter;
sRec:string;
begin

sRec:=sRecPath+'/'+formatdatetime('yymmdd-hhnnss',now)+'.avi';
FilterGraph.Stop;
with FilterGraph as ICaptureGraphBuilder2do

begin

SetOutputFileName(MEDIASUBTYPE_Avi, StringToOleStr(sRec), multiplexer, Writer);
RenderStream(@PIN_CATEGORY_CAPTURE, nil, VideoSourceFilter as IBaseFilter,nil, multiplexer as IBaseFilter);
end;

FilterGraph.Play;
edtRec.Text:=sRec;
sbStop.Visible:=true;
sbCapture.Visible:=false;
end;
 
要在回调函数中录
 
我认为数据采集涉及到传输效率问题,建议使用线程采集。。
 
楼主的机器配置?
USB是2.0工作状态吗?
 
机器配置:Intel P4 1.6G 512M USB2.0
是不是资源主要被消耗在录制文件(*.AVI)的存储中了,如果录制的文件保存为MPG格式(应为文件小一些)不知道是否连贯性和资源占用会好一些;
但是我把那个段改成:
begin

sRec:=sRecPath+'/'+formatdatetime('yymmdd-hhnnss',now)+'.MPG';
FilterGraph.Stop;
with FilterGraph as ICaptureGraphBuilder2do

begin

SetOutputFileName(MEDIASUBTYPE_MPEG1Video, StringToOleStr(sRec), multiplexer, Writer);
RenderStream(@PIN_CATEGORY_CAPTURE, nil, VideoSourceFilter as IBaseFilter,nil, multiplexer as IBaseFilter);
end;


经测试发现他老是弹出一个Active的显示窗口,并且也录制不了。看看是不是我那里设置错了。
 
晕,光是改文件扩展名吗,不改压缩编码吗????
 
我在资料中看到,如果在VideoSourceFilter的capture pin后增加一个smart tee然后利用smart tee提供的capture 进行录像,利用smart tee 提供的preview进行浏览。这样对这种非AGP接口的视频采集,会大大节省PCI总线的消耗,速度会有明显改善。
但是我不知到如何创建一个smart tee 以及如何让VideoSourceFilter的pin 和他连接。
请那位高手帮忙指点。如果分数不够我可以再加。希望能给出代码,很急呀!
也可直接和我qq联系:1398865
 
后退
顶部