delphi 视频录制问题
查了下资料,说directshow比vfw兼容性更好,于是找到了dspack控件,但录制视频时出现视频与音频不同步的情况,即录完后,声音有10分钟,视频才4分钟。用了2.3.4 for xe4和2.3.1 for d7,都是一样的情况,接着尝试用vfw,发现在我xp的机器上不显示视频,但可以录制。求高手指点。 或者推荐另外的技术方向也行。 摄像头?录像?dspack directshow
[解决办法]
procedure Tfrmmain.StartRecord;
var multiplexer: IBaseFilter;
Writer: IFileSinkFilter;
pGS : IAMGraphStreams;
pConfigMux : IConfigAviMux;
begin
FRecordTime := 0;
FRecordFile := FSaveFolder + FCombineFile;
CaptureGraph.Stop;
VideoCompress.FilterGraph := CaptureGraph;
AudioCompress.FilterGraph := CaptureGraph;
CaptureGraph.Active := true;
//音频视频同步
if CaptureGraph.QueryInterface(IID_IAMGraphStreams, pGS) = 0 then
begin
pGS.SyncUsingStreamOffset(TRUE);
pGS := nil;
end;
IF CaptureGraph.QueryInterface(IID_IConfigAviMux,pConfigMux) = 0 then
begin
pConfigMux.SetMasterStream(1);
pConfigMux := nil;
end;
with CaptureGraph as IcaptureGraphBuilder2 do
begin
SetOutputFileName(MEDIASUBTYPE_Avi, PWideChar(FRecordFile), multiplexer, Writer);
if VideoSourceFilter.BaseFilter.DataLength > 0 then
RenderStream(@PIN_CATEGORY_PREVIEW, @MEDIATYPE_Video, VideoSourceFilter as IBaseFilter, nil , RecordWindow as IBaseFilter);
RenderStream(@PIN_CATEGORY_CAPTURE, nil, VideoSourceFilter as IBaseFilter, VideoCompress as IBaseFilter, multiplexer as IBaseFilter);
RenderStream(nil, nil, AudioSourceFilter as IBaseFilter, AudioCompress as IBaseFilter, multiplexer as IBaseFilter);
end;
CaptureGraph.Play;
GBeginRecord := True;
tmrcount.Enabled := True;
end;