我使用 Delphi XE 和 DSPack 2.3.3。我正在使用网络摄像头捕获维护桌面应用程序。用户能够捕捉访问者和文档的图片。一切正常。我们最大的客户之一正在迁移到 Citrix 7.13,而网络摄像头正在冻结。
他们的支持联系了 Citrix,Citrix Engineering 想知道应用程序是否正在调用 IMediaFilter::SetSyncSource 方法,以在他们的代码中将“参考时钟”显式设置为过滤器图,以获取网络摄像头捕获。我做了一些测试,实际上渲染开始时有一个调用。运行 DSPack 演示“VideoCap”时可以看到调用:
// now render streams
with CaptureGraph as IcaptureGraphBuilder2 do
begin
// set the output filename
SetOutputFileName(MEDIASUBTYPE_Avi, PWideChar(CapFile), multiplexer, Writer);
// Connect Video preview (VideoWindow)
if VideoSourceFilter.BaseFilter.DataLength > 0 then
RenderStream(@PIN_CATEGORY_PREVIEW, nil, VideoSourceFilter as IBaseFilter,
nil , VideoWindow as IBaseFilter);
// Connect Video capture streams
if VideoSourceFilter.FilterGraph <> nil then
RenderStream(@PIN_CATEGORY_CAPTURE, nil, VideoSourceFilter as IBaseFilter,
nil, multiplexer as IBaseFilter);
// Connect Audio capture streams
if AudioSourceFilter.FilterGraph <> nil then
begin
RenderStream(nil, nil, AudioSourceFilter as IBaseFilter,
nil, multiplexer as IBaseFilter);
end;
end;
CaptureGraph.Play;
根据 DSpack 源评论:
{ The reference clock has changed. The filter graph manager sends this event
when its IMediaFilter.SetSyncSource method is called.}
property OnGraphClockChanged: TNotifyEvent read FOnGraphClockChanged write FOnGraphClockChanged;
事实上 OnGraphClockChanged 在 CaptureGraph.Play 被调用后被触发。
是否可以避免调用 SetSyncSource?你知道这是否能解决这个问题?
TIA,克莱门特