ウェブカメラでビデオ ソースを「コンポジット」に変更する設定を探しています。USB を抜いてから再度差し込んでコードを起動すると、空白の画面が表示されるようです。しかし、(別のプログラムで) ビデオ ソースを変更してから、戻ってコードを再度実行すると、それが表示されます。
そのため、ウェブカメラを設定する機能を備えた別のプログラムを起動しなくても、自分のアプリ内で同じことを行うために、それを変更できるものが必要です。
USB ケーブルを抜き差ししてソース コードを実行すると、アプリのピクチャ ボックスが黒くなります。
ビデオソースを変更するために使用する「他のプログラム」(画像を表示するために機能するようです):
その「他のプログラム」を使用した後、ソースコードに戻って実行すると、次のようになります。
ここから dot Net Webcam Library という C# コードを使用しています: ここにリンクの説明を入力してください
ここにリンクの説明を入力してからDirectShowを使用しているようです
ソースには、さまざまな種類のビデオ設定がリストされていることに気付きました (以下の AXExtend.cs にあります)。
public enum PhysicalConnectorType
{
Video_Tuner = 1,
Video_Composite,
Video_SVideo,
Video_RGB,
Video_YRYBY,
Video_SerialDigital,
Video_ParallelDigital,
Video_SCSI,
Video_AUX,
Video_1394,
Video_USB,
Video_VideoDecoder,
Video_VideoEncoder,
Video_SCART,
Video_Black,
Audio_Tuner = 0x1000,
Audio_Line,
Audio_Mic,
Audio_AESDigital,
Audio_SPDIFDigital,
Audio_SCSI,
Audio_AUX,
Audio_1394,
Audio_USB,
Audio_AudioDecoder,
}
しかし、ここのコードでそれを呼び出す方法がわかりません:
Device selectedDevice = device as Device;
imageCapture.Device = selectedDevice as Device;
imageCapture.PerformAutoScale();
imageCapture.Refresh();
imageCapture.Start();
それで、「Video_Composite」はそれを行うために必要なものだと思いますか?
どんな助けでも素晴らしいでしょう!!! ありがとう!
デビッド
コードの更新
foreach (Device device in Device.FindDevices())
{
if (device.ToString() == "BackupCamera")
{
Device selectedDevice = device as Device;
IGraphBuilder graphBuilder = new FilterGraph() as IGraphBuilder;
DsDevice device1 = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice)[1]; // <<--- Your Device
Guid baseFilterIdentifier = typeof(IBaseFilter).GUID;
object videoSourceObject;
device1.Mon.BindToObject(null, null, ref baseFilterIdentifier, out videoSourceObject);
IBaseFilter videoSourceBaseFilter = videoSourceObject as IBaseFilter;
graphBuilder.AddFilter(videoSourceBaseFilter, "Source");
ICaptureGraphBuilder2 captureGraphBuilder = new CaptureGraphBuilder2() as ICaptureGraphBuilder2;
captureGraphBuilder.SetFiltergraph(graphBuilder);
object crossbarObject;
captureGraphBuilder.FindInterface(FindDirection.UpstreamOnly, null, videoSourceBaseFilter, typeof(IAMCrossbar).GUID, out crossbarObject);
IAMCrossbar crossbar = crossbarObject as IAMCrossbar;
int inputPinCount, outputPinCount;
crossbar.get_PinCounts(out inputPinCount, out outputPinCount); // <<-- In/Out Pins
// Pin Selection: Physical Input 2 (e.g. Composite) to Capture Pin 0
crossbar.Route(0, 2);
imageCapture.Device = selectedDevice as Device;
imageCapture.PerformAutoScale();
imageCapture.Refresh();
imageCapture.Start();
}
}