我使用Delphi XE和DSPack 2.3.3。 我正在維護一個帶攝像頭捕獲的桌面應用程序。用戶能夠捕捉訪客和文件的圖片。 一切工作正常。我們最大的客戶之一是轉向Citrix 7.13,網絡攝像機處於凍結狀態。DSPack,Citrix和SetSyncSource()
他們的支持聯繫思傑和Citrix工程想知道如果應用程序調用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, 克萊門特
我仍然有問題。我建立了一個絕對最小組件的小項目來開始視頻捕捉。無論我做什麼,都會調用SetSyncSource。例如,我認爲在TPanel中製作視頻顯示(而不是正確的大小形式)可能會觸發SetSyncSource。我讓相機全屏顯示,或者在浮動窗口中,它仍然會觸發SetSyncSource。我刪除了SampleGrabber,仍然觸發。 「Niled」一些參數,仍然觸發。 我不需要音頻。只有低分辨率的視頻。 –