DirectShow USB веб-камера смена источника видео

Привет всем, я пытаюсь найти настройки, чтобы изменить мой источник видео на «композитный» на моей веб-камере. Кажется, что если я отключу USB, а затем снова подключу его и запуском кода, он просто получит пустой экран. Но как только я меняю источник видео (в другой программе), а затем возвращаюсь и снова запускаю свой код, он появляется.

Поэтому мне нужно что-то, что позволит мне изменить это для того, чтобы это произошло, но в моем собственном приложении, без необходимости запуска другой программы, которая имеет эту функцию для настройки веб-камеры.

Когда я вытаскиваю USB-кабель, затем вставляю его обратно и запускаю исходный код, картинка приложения отображается в черном цвете.

«Другая программа», которую я использую, чтобы изменить источник видео (кажется, работает, чтобы поднять изображение):

После того, как я использую эту «другую программу», я возвращаюсь к исходному коду и запускаю его, и вот что я получаю:

Я использую код C # под названием dot Net Webcam Library отсюда:введите описание ссылки здесь

Кажется, использовать 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();
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос