首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi 视频录制有关问题

2013-11-13 
delphi 视频录制问题查了下资料,说directshow比vfw兼容性更好,于是找到了dspack控件,但录制视频时出现视频

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;

热点排行