저는 Delphi XE 및 DSPack 2.3.3을 사용합니다. 웹캠 캡처로 데스크톱 응용 프로그램을 유지 관리하고 있습니다. 사용자는 방문자 및 문서의 사진을 캡처 할 수 있습니다. 모든 것이 잘 작동합니다. 가장 큰 고객 중 하나가 Citrix 7.13으로 이동하고 웹캠이 멈 추었습니다.DSPack, Citrix 및 SetSyncSource()
지원 담당자가 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 소스 의견에 따르면 CaptureGraph.Play가 호출 된 후
가{ 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 해고됩니다.
SetSyncSource를 호출하지 않도록 할 수 있습니까? 이것이이 문제를 해결할 수 있는지 알고 계십니까?
TIA, 클레망
난 아직도 데 문제가 있습니다. 비디오 캡처를 시작하려면 절대 최소 구성 요소가있는 작은 프로젝트를 만들었습니다. 내가 무엇을해도 SetSyncSource가 호출됩니다. 예를 들어, 올바른 크기의 폼 대신 TPanel에서 비디오 디스플레이를 만들면 SetSyncSource가 트리거 될 수 있다고 생각했습니다. 카메라를 전체 화면 또는 부동 창에 표시하고 SetSyncSource를 계속 트리거합니다. SampleGrabber를 제거하고 여전히 트리거합니다. "Niled"일부 매개 변수가 여전히 트리거됩니다. 오디오가 필요하지 않습니다. 저해상도 비디오. –