嘿所有我想找到設置來改變我的視頻源到我的攝像頭「複合」。似乎如果我拔掉USB,然後插回來,並啓動代碼,它只是一個空白的屏幕。但是,一旦我改變視頻源(在另一個程序中),然後返回並再次運行我的代碼,它就會顯示出來。DirectShow USB攝像頭改變視頻源
所以我需要的東西,讓我改變,爲了讓發生同樣的事情,但我自己的應用程序中,而無需啓動具有功能設置攝像頭另一個程序。
當我拉出USB電纜,然後把它放回來,我運行源代碼,應用程序的圖片框是黑色的。
的「其他程序」我用它來改變視頻源(這似乎工作,彈出圖像):在我使用的是「其他節目」我回去
源代碼並運行它,這就是我得到那麼:
我使用從這裏稱爲點網絡攝像頭庫的C#代碼:enter link description here
似乎使用的DirectShow從enter link description here
我已經在源注意到了,它列出了不同類型的視頻設置(在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();
}
}
什麼是 「ImageCapture中的」 在這裏? – rogerdpack