カメラからファイルにビデオをキャプチャするために、C# (および DirectShow.net) で比較的単純なコードを作成しました。私の問題は、記録中にグラフがドロップするフレームが多すぎることです。非常に要求の厳しいビデオ (25 fps で 640x480) ではなく、かなり強力なコンピューターを使用しているため、問題がハードウェアに関連しているとは思いません。フレーム ドロップを防止するためのベスト プラクティスについて何か考えはありますか?
編集:
これが私のコードです:
Graph = (IGraphBuilder)new FilterGraph();
Source = CreateFilter(FilterCategory.VideoInputDevice, SelectedDevice);
hr = Graph.AddFilter(Source, "Source");
TestForError("Error while adding source filter", hr);
Builder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
hr = Builder.SetFiltergraph(Graph);
TestForError("Error setting preview graph", hr);
Guid guid = DirectShowLib.MediaSubType.Avi;
hr = Builder.SetOutputFileName(guid, filename, out AVIMux, out FileWriter);
TestForError("Error setting capture graph", hr);
// Set VMR
VMR = (IBaseFilter)new VideoMixingRenderer9();
hr = Graph.AddFilter(VMR, "Renderer");
TestForError("Error creating preview subgraph", hr);
ConfigureWindowlessMode();
// Render Capture & Preview streams
hr = Builder.RenderStream(PinCategory.Preview, MediaType.Video, Source, null, VMR);
TestForError("Preview stream rendering error", hr);
hr = Builder.RenderStream(PinCategory.Capture, MediaType.Video, Source, null, AVIMux);
TestForError("Capture stream rendering error", hr);
//
Control = (IMediaControl)Graph;
mediaEventEx = (IMediaEventEx)Graph;
hr = mediaEventEx.SetNotifyWindow(Handle, WM_GRAPHNOTIFY, IntPtr.Zero);
TestForError("Error setting notifications", hr);
Control.Run();