私はDelphi XEとDSPack 2.3.3を使用しています。 私はWebcamキャプチャでデスクトップアプリケーションを維持しています。ユーザーは訪問者と文書の写真を撮ることができます。 すべて正常に動作しています。当社の最大の顧客の1人がCitrix 7.13に移行しており、ウェブカメラはフリーズしています。DSPack、Citrix、SetSyncSource()
CitrixとCitrixエンジニアは、アプリケーションがIMediaFilter :: SetSyncSourceメソッドを呼び出して、Webcamキャプチャに関するコードのフィルタグラフに明示的に「参照クロック」を設定するかどうかを知りたいと考えます。 私はいくつかのテストを行い、レンダリングが始まると実際にコールがあります。 DSpackソースのコメントによると
// 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デモ "VideoCap" を実行しているときに電話を見ることができます
{ 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、 IMediaFilter::SetSyncSource
上のMSDNのページを引用クレマン
私はまだ問題を抱えています。私はビデオキャプチャを開始するための絶対最小構成要素を持つ小さなプロジェクトを構築しました。私が何をするにしても、SetSyncSourceが呼び出されます。例えば、正しいサイズのフォームとは対照的に、TPanelでビデオ表示を行うと、SetSyncSourceがトリガされる可能性があります。カメラをフルスクリーンで表示させるか、フローティングウィンドウで表示させ、それでもSetSyncSourceをトリガーします。私はSampleGrabberを削除して、引き続きトリガーします。いくつかのパラメータを「ネイル」しても、引き続きトリガします。 私はオーディオを必要としません。低解像度のビデオ。 –