Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="LiveSource"/> class.
        /// </summary>
        public LiveSource()
        {
            try
            {
                // Starts new job for preview window.
                this.job = new LiveJob();

                // Aquires audio and video devices.
                this.videoDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video).ToList();
                var video = this.videoDevices.Count > 0 ? this.videoDevices[1] : null;

                // Checks for video devices.
                if (video != null)
                {
                    // Create a new device source. We use the first audio and video devices on the system.
                    this.DeviceSource = this.job.AddDeviceSource(video, null);

                    // Make this source the active one.
                    this.job.ActivateSource(this.DeviceSource);
                }
                else
                {
                    this.HasError = true;
                }
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
        }
Ejemplo n.º 2
0
        public Camera()
        {
            InitializeComponent();

            // Prepare Camera
            cameraGrid.DataContext = WebCamCtrl;

            WebCamCtrl.VidFormat     = VideoFormat.mp4;
            WebCamCtrl.PictureFormat = ImageFormat.Png;
            WebCamCtrl.FrameRate     = 30;
            WebCamCtrl.FrameSize     = new System.Drawing.Size(780, 480);

            var vidDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);
            var audDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);

            foreach (EncoderDevice dvc in vidDevices)
            {
                camVideoComboBox.Items.Add(dvc.Name);
            }

            foreach (EncoderDevice dvc in audDevices)
            {
                camAudioComboBox.Items.Add(dvc.Name);
            }
        }
Ejemplo n.º 3
0
        private void SetupJob()
        {
            // Sets the audio devices to the collection. Adds a null at the beginning for user to select no device
            AudioDevices = new ObservableCollection <EncoderDevice>(EncoderDevices.FindDevices(EncoderDeviceType.Audio));
            AudioDevices.Insert(0, null);

            // Gets all the video devices and sets the screen source.
            EncoderDevice Video = null;
            Collection <EncoderDevice> videoSources = EncoderDevices.FindDevices(EncoderDeviceType.Video);

            foreach (EncoderDevice dev in videoSources)
            {
                if (dev.Name.Contains("Screen Capture Source"))
                {
                    Video = dev;
                }
            }

            // Creats the source
            Source = Job.AddDeviceSource(Video, null);

            // Activates sources and sets preset to job
            Job.ActivateSource(Source);
            Job.ApplyPreset(LivePresets.VC1HighSpeedBroadband4x3);
        }
Ejemplo n.º 4
0
        private void frmTarimasRegistro_Load(object sender, EventArgs e)
        {
            try
            {
                this.Text += " - ver. " + Application.ProductVersion;
                DataTable tblDevices = new DataTable();
                tblDevices.Columns.Add("Nombre", typeof(string));
                tblDevices.Columns.Add("ID", typeof(string));
                tblDevices.Columns.Add("Estado", typeof(string));

                foreach (EncoderDevice edv in EncoderDevices.FindDevices(EncoderDeviceType.Video))
                {
                    DataRow row = tblDevices.NewRow();
                    row["Nombre"] = edv.Name;
                    row["ID"]     = edv.DevicePath;

                    tblDevices.Rows.Add(row);
                }

                ugDispositivos.DataSource = tblDevices;

                ClasesSGUV.Form.ControlsForms.setDataSource(cbAlmacen, ClasesSGUV.DataSource.GetSource((int)ClasesSGUV.DataSource.TipoQry.AlmacenesVenta, null, string.Empty), "WhsName", "WhsCode", "----Almacén----");
            }
            catch (Exception ex)
            {
                this.SetMensaje(ex.Message, 5000, Color.Red, Color.White);
            }
        }
Ejemplo n.º 5
0
        public MainWindow()
        {
            m_imagePath = "";
            InitializeComponent();

            m_emotionsQueue  = new Queue <CalcScores>();
            m_averageEmotion = new CalcScores();
            m_player         = new WindowsMediaPlayer();

            m_player.settings.autoStart = false;

            Binding binding_1 = new Binding("SelectedValue");

            binding_1.Source = VideoDevicesComboBox;
            WebcamCtrl.SetBinding(Webcam.VideoDeviceProperty, binding_1);

            m_picturesDefaultPath = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);

            WebcamCtrl.ImageDirectory = m_picturesDefaultPath;
            m_picturesDefaultPath    += @"\snapshot.jpg";
            WebcamCtrl.FrameRate      = 30;
            WebcamCtrl.FrameSize      = new System.Drawing.Size(640, 480);

            var vidDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);

            VideoDevicesComboBox.ItemsSource   = vidDevices;
            VideoDevicesComboBox.SelectedIndex = 0;

            startCapturing();
            scan();
        }
Ejemplo n.º 6
0
        public void GetVideo()
        {
            var listVideoDevices = new List <EncoderDevice>();
            var listAudioDevices = new List <EncoderDevice>();

            foreach (var edv in EncoderDevices.FindDevices(EncoderDeviceType.Video))
            {
                listVideoDevices.Add(edv);
            }

            foreach (var edv in EncoderDevices.FindDevices(EncoderDeviceType.Audio))
            {
                listAudioDevices.Add(edv);
            }

            var job          = new LiveJob();
            var deviceSource = job.AddDeviceSource(listVideoDevices[0], listAudioDevices[0]);

            job.ActivateSource(deviceSource);
            job.ApplyPreset(LivePresets.VC1HighSpeedBroadband4x3);
            PullBroadcastPublishFormat format = new PullBroadcastPublishFormat();

            format.BroadcastPort = 5001;
            format.MaximumNumberOfConnections = 1;
            job.PublishFormats.Add(format);
            job.StartEncoding();
        }
Ejemplo n.º 7
0
        private void StartCam()
        {
            var lstVideoDevices = new List <EncoderDevice>();
            var lstAudioDevices = new List <EncoderDevice>();

            foreach (EncoderDevice edv in EncoderDevices.FindDevices(EncoderDeviceType.Video))
            {
                lstVideoDevices.Add(edv);
                //listBox1.Items.Add(edv.Name);
            }
            foreach (EncoderDevice eda in EncoderDevices.FindDevices(EncoderDeviceType.Audio))
            {
                lstAudioDevices.Add(eda);
                //listBox2.Items.Add(eda.Name);
            }

            var video = lstVideoDevices.FirstOrDefault();
            var audio = lstAudioDevices.FirstOrDefault();

            _job = new LiveJob();

            _deviceSource             = _job.AddDeviceSource(video, audio);
            _deviceSource.VideoDevice = video;
            _deviceSource.AudioDevice = audio;

            _deviceSource.PreviewWindow = new PreviewWindow(new HandleRef(this, this.Handle));
            _deviceSource.PreviewWindow.SetSize(Size);

            _job.ActivateSource(_deviceSource);
        }
Ejemplo n.º 8
0
 public camApp()
 {
     InitializeComponent();
     Loaded                  += (sender, e) => MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
     this.DataContext         = this;
     VideoDevices             = EncoderDevices.FindDevices(EncoderDeviceType.Video);
     VidDevices.SelectedIndex = 1;
     StartCapture();
 }
Ejemplo n.º 9
0
 public Capture()
 {
     //wyszukiwanie urządzń audio i video podłączonych do komputera
     foreach (EncoderDevice edv in EncoderDevices.FindDevices(EncoderDeviceType.Video))
     {
         capDevices.Add(edv.Name);
     }
     AudioDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);
 }
Ejemplo n.º 10
0
        public Grides()
        {
            InitializeComponent();

            this.DataContext = this;

            VideoDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);
            AudioDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);
        }
        public MainWindow()
        {
            InitializeComponent();
            com = new SerialPort();
            PopulateComboBox();
            this.DataContext = this;

            VideoDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);
            AudioDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);
        }
Ejemplo n.º 12
0
        public void StartRecording(string startRecording)
        {
            if (recStatus)
            {
                try
                {
                    if (_job == null)
                    {
                        _job = new Microsoft.Expression.Encoder.ScreenCapture.ScreenCaptureJob();
                        string tempPath = Constants.AttachmentResources;

                        _savename       = tempPath;
                        _job.OutputPath = _savename;

                        recordedVideoName = "rec_" + NxgUtilities.GetCurrentTime() + ".wmv";

                        recordedVideoFilePath = tempPath + recordedVideoName;

                        recordingActualFilePath = _job.OutputScreenCaptureFileName = recordedVideoFilePath;
                        var audioDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);
                        for (var deviceCount = 1; deviceCount <= audioDevices.Count; deviceCount++)
                        {
                            var id = deviceCount - 1;
                            _job.AddAudioDeviceSource(audioDevices.ElementAt(id));
                        }

                        _job.ScreenCaptureVideoProfile         = new Microsoft.Expression.Encoder.Profiles.ScreenCaptureVideoProfile();
                        _job.ScreenCaptureVideoProfile.AutoFit = true;
                        dt       = new DispatcherTimer();
                        sw       = new Stopwatch();
                        dt.Tick += new EventHandler(dt_Tick);
                        sw.Start();
                        dt.Start();
                        dt.Interval = new TimeSpan(0, 0, 0, 0, 1);

                        _job.ScreenCaptureVideoProfile.Quality   = 50;
                        _job.ScreenCaptureVideoProfile.FrameRate = 24;
                        _job.Start();

                        Canv_stop_recording_visibility = Visibility.Visible;
                        Pause_recording_visibiity      = Visibility.Visible;
                        Start_recording_visibiity      = Visibility.Hidden;
                    }
                }
                catch (Exception ex)
                {
                    App.InsertException(ex);
                    recStatus = false;
                }
                recStatus = false;
            }
            else
            {
            }
        }
Ejemplo n.º 13
0
        EncoderDevice AudioDevices()
        {
            EncoderDevice foundDevice = null;
            Collection <EncoderDevice> audioDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);

            try
            {
                foundDevice = audioDevices.First();
            }
            catch (Exception ex)
            { MessageBox.Show("Audio Device Not Found" + audioDevices[0].Name + ex.Message); }
            return(foundDevice);
        }
Ejemplo n.º 14
0
        //metoda zamieniająca nazwę urządzenia na postać EncoderDevice
        private EncoderDevice GetVideoDevice(string deviceName)
        {
            EncoderDevice video = null;

            foreach (EncoderDevice edv in EncoderDevices.FindDevices(EncoderDeviceType.Video))
            {
                if (String.Compare(edv.Name, deviceName) == 0)
                {
                    video = edv;
                    break;
                }
            }
            return(video);
        }
        private void InitializeComboBox()
        {
            WebcamCtrl.FrameRate = 30;
            WebcamCtrl.FrameSize = new System.Drawing.Size(640, 480);

            Binding binding_1 = new Binding("SelectedValue");

            binding_1.Source = VideoDevicesComboBox;
            WebcamCtrl.SetBinding(Webcam.VideoDeviceProperty, binding_1);
            var vidDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);

            VideoDevicesComboBox.ItemsSource   = vidDevices;
            VideoDevicesComboBox.SelectedIndex = 0;
        }
Ejemplo n.º 16
0
        public camApp()
        {
            InitializeComponent();
            Loaded          += (sender, e) => MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            this.DataContext = this;
            VideoDevices     = EncoderDevices.FindDevices(EncoderDeviceType.Video);

            CheckIfImgFolderEmpty();

            VidDevices.SelectedItem  = "C922 Pro Stream Webcam";
            VidDevices.SelectedIndex = 0;
            StartCapture();

            this.PreviewKeyDown += new KeyEventHandler(HandleEsc);
        }
Ejemplo n.º 17
0
        private void FindDevices()
        {
            var vidDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);
            var audDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);

            foreach (EncoderDevice dvc in vidDevices)
            {
                VidDvcsComboBox.Items.Add(dvc.Name);
            }

            foreach (EncoderDevice dvc in audDevices)
            {
                AudDvcsComboBox.Items.Add(dvc.Name);
            }
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Starts the <see cref="LifeJob"/> with the first found webcam.
        /// </summary>
        private void InitializeJob()
        {
            // Starts a new job for the preview window
            this.Job = new LiveJob();

            // Create a new device source (the first found video and audio devices)
            DeviceSource = Job.AddDeviceSource(
                EncoderDevices.FindDevices(EncoderDeviceType.Video)[0],
                EncoderDevices.FindDevices(EncoderDeviceType.Audio)[0]);

            // Activate the newly created device source
            this.Job.ActivateSource(this.DeviceSource);

            // Apply a typical preset for smooth encoding & playback
            this.Job.ApplyPreset(LivePresets.VC1256kDSL16x9);
        }
Ejemplo n.º 19
0
        // this code to enable audio recording
        EncoderDevice AudioDevices()
        {
            EncoderDevice foundDevice = null;
            Collection <EncoderDevice> audioDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);

            try
            {
                // you can chose yor device here
                foundDevice = audioDevices.First();
            }
            catch (Exception ex)
            {
                MessageBox.Show(" Cannot find prefered audio device using " + audioDevices[0].Name + ex.Message);
            }
            return(foundDevice);
        }
Ejemplo n.º 20
0
        private void InitWebCam()
        {
            VideoDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);
            //AudioDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);

            foreach(EncoderDevice device in VideoDevices)
            {
                if(device.Name != "Screen Capture Source")
                {
                    VidDevices.Items.Add(device);
                    break;
                }
            }

            StartPreview();
        }
Ejemplo n.º 21
0
        void TakePicture(string manufacturer, string model)
        {
            Collection <EncoderDevice> Vdevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);

            foreach (EncoderDevice dev in Vdevices)
            {
                Console.WriteLine(dev.Name);
            }

            Console.WriteLine("Audio :");
            Collection <EncoderDevice> Adevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);

            foreach (EncoderDevice dev in Adevices)
            {
                Console.WriteLine(dev.Name);
            }

            string path;

            path = VideoCapture(Vdevices);
            ExtractFrame(path);
            string message            = string.Format("New pic from your Webcam @ {0}", PackageHost.SentinelName);
            var    task               = MyConstellation.Packages.Pushbullet.CreatePushBulletScope().GetDevices();
            double updated            = 0;
            Device mostRecentMatching = null;

            if (task.Wait(5000) && task.IsCompleted)
            {
                foreach (Device dev in task.Result.Devices)
                {
                    if (dev.Manufacturer == manufacturer && dev.Model == model && dev.IsActive)
                    {
                        if (dev.Modified > updated)
                        {
                            updated            = dev.Modified;
                            mostRecentMatching = dev;
                        }
                    }
                }
            }
            if (mostRecentMatching != null)
            {
                MyConstellation.Packages.Pushbullet.CreatePushBulletScope().PushFile(fileUri: path + ".bmp", body: message, target: PushTargetType.Device, targetArgument: mostRecentMatching.Id);
            }
            Thread.Sleep(5000);
            DeleteSources(path);
        }
Ejemplo n.º 22
0
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            if (!initialized)
            {
                initialized = true;

                var cam = EncoderDevices.FindDevices(EncoderDeviceType.Video).Last();
                WebcamViewer.VideoDevice    = cam;
                WebcamViewer.ImageDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "VideoCaptures");
                WebcamViewer.StartPreview();

                DetailsList.ItemsSource = Images;
                VolumeSlider.Value      = DEFAULT_VOLUME * 100;

                _songController.BarStarted += Controller_BarStarted;
            }
        }
Ejemplo n.º 23
0
        private void SetDeviceSources()
        {// locates the first video device with name = _videoSourceName and the first audio device found (required for class
         // constructor but not used in our project)
         // creates LiveJob and adds device sources.
            EncoderDevice videoDevice = null;
            EncoderDevice audioDevice = null;

            _deviceSource = null;

            videoDevice = EncoderDevices.FindDevices(EncoderDeviceType.Video).FirstOrDefault(vd => vd.Name == _videoSourceName);
            audioDevice = EncoderDevices.FindDevices(EncoderDeviceType.Audio).FirstOrDefault();

            if (videoDevice != null && audioDevice != null)
            {
                _job          = new LiveJob();
                _deviceSource = _job.AddDeviceSource(videoDevice, audioDevice);
            }
        }
Ejemplo n.º 24
0
        /// <summary>
        /// 开始录制
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            screencapturejob.OutputPath = path;
            Collection <EncoderDevice> devices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);//查询当前所有音频设备

            foreach (EncoderDevice device in devices)
            {
                try
                {
                    screencapturejob.AddAudioDeviceSource(device);//将音频设备的声音记录
                }
                catch {
                    //抛出其他异常的音频设备
                }
            }
            //录制开始
            screencapturejob.Start();
        }
Ejemplo n.º 25
0
        private void frmEE4WebCam_Load(object sender, EventArgs e)
        {
            this.Text += " - ver. " + Application.ProductVersion;

            lstVideoDevices.ClearSelected();
            foreach (EncoderDevice edv in EncoderDevices.FindDevices(EncoderDeviceType.Video))
            {
                lstVideoDevices.Items.Add(edv.Name);
            }
            lblVideoDeviceSelectedForPreview.Text = "";

            lstAudioDevices.ClearSelected();
            foreach (EncoderDevice eda in EncoderDevices.FindDevices(EncoderDeviceType.Audio))
            {
                lstAudioDevices.Items.Add(eda.Name);
            }
            lblAudioDeviceSelectedForPreview.Text = "";
        }
Ejemplo n.º 26
0
        public StoryPlugin(IMessageDispatcher remote, IUIThreadDispatcher uiThreadDispatcher)
        {
            this._remote             = remote;
            this._uiThreadDispatcher = uiThreadDispatcher;
            uiThreadDispatcher.BlockingInvoke(() =>
            {
                story                 = new StoryPage();
                pluginContainer       = new Viewbox();
                pluginContainer.Child = story;
            });
            _remote.RegisterReceiveHandler("story.stopRecording",
                                           new MessageHandlerDelegateWrapper(m => endVideoCapture()));
            _remote.RegisterReceiveHandler("story.startRecording",
                                           new MessageHandlerDelegateWrapper(m => startVideoCapture(m)));
            _remote.RegisterReceiveHandler("story.saveRecording",
                                           new MessageHandlerDelegateWrapper(m => saveRecording(m)));

            foreach (EncoderDevice edv in EncoderDevices.FindDevices(EncoderDeviceType.Video))
            {
                //Debug.WriteLine("found a video deviced named: " + edv.Name);
                videoDevice = edv;
            }
            foreach (EncoderDevice edv in EncoderDevices.FindDevices(EncoderDeviceType.Audio))
            {
                //Debug.WriteLine("found a audio deviced named: " + edv.Name);
                if (edv.Name.ToLower().Contains("microphone"))
                {
                    audioDevice = edv;
                }
            }

            story.SizeChanged += new System.Windows.SizeChangedEventHandler(story_SizeChanged);
            job = new LiveJob();


            if (!System.IO.Directory.Exists("C:\\Dropbox\\" + System.Windows.Forms.SystemInformation.ComputerName + "\\videos\\"))
            {
                System.IO.Directory.CreateDirectory("C:\\Dropbox\\" + System.Windows.Forms.SystemInformation.ComputerName + "\\videos\\");
            }

            fileOut = new FileArchivePublishFormat();
            fileOut.OutputFileName = "C:\\Dropbox\\" + System.Windows.Forms.SystemInformation.ComputerName + "\\videos\\tempVideo.wmv";
            System.Console.WriteLine(fileOut.OutputFileName);
        }
Ejemplo n.º 27
0
        internal void inicijalizirajKameru()
        {
            WebcamCtrl = new Webcam();
            WebcamCtrl.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
            WebcamCtrl.VerticalAlignment   = System.Windows.VerticalAlignment.Top;
            WebcamCtrl.Visibility          = System.Windows.Visibility.Visible;
            WebcamCtrl.Height = 138;
            WebcamCtrl.Width  = 173;


            Binding binding_1 = new Binding("SelectedValue");

            binding_1.Source = VideoDevicesComboBox;
            WebcamCtrl.SetBinding(Webcam.VideoDeviceProperty, binding_1);

            /*Binding binding_2 = new Binding("SelectedValue");
             * binding_2.Source = AudioDevicesComboBox;
             * WebcamCtrl.SetBinding(Webcam.AudioDeviceProperty, binding_2);  */
            // Create directory for saving image files
            string imagePath = @"C:\WebcamSnapshots";

            if (!Directory.Exists(imagePath))
            {
                Directory.CreateDirectory(imagePath);
            }

            // Set some properties of the Webcam control
            WebcamCtrl.ImageDirectory = imagePath;
            WebcamCtrl.FrameRate      = 30;
            WebcamCtrl.FrameSize      = new System.Drawing.Size(640, 480);

            // Find available a/v devices
            var vidDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);

            //var audDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);
            VideoDevicesComboBox.ItemsSource = vidDevices;
            //AudioDevicesComboBox.ItemsSource = audDevices;
            VideoDevicesComboBox.SelectedIndex = 0;
            //AudioDevicesComboBox.SelectedIndex = 0;
            AudioDevicesComboBox.Visibility = System.Windows.Visibility.Hidden;

            gridCam.Children.Add(WebcamCtrl);
        }
Ejemplo n.º 28
0
        public override void OnStart()
        {
            PackageHost.WriteInfo("Package starting - IsRunning : {0} - IsConnected : {1}", PackageHost.IsRunning, PackageHost.IsConnected);
            // initialise la liste des périphériques video et audio
            Collection <EncoderDevice> Vdevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);

            foreach (EncoderDevice dev in Vdevices)
            {
                Console.WriteLine(dev.Name);
            }

            Console.WriteLine("Audio :");
            Collection <EncoderDevice> Adevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);

            foreach (EncoderDevice dev in Adevices)
            {
                Console.WriteLine(dev.Name);
            }
        }
Ejemplo n.º 29
0
        public MainWindow()
        {
            InitializeComponent();

            this.DataContext = this;

            pipe = new NamedPipeCommunication("mypipe");
            pipe.getMessageEvent += test;
            myCanvas.DataContext  = pipe;//パイプコンストラクト前に置くと機能しないしエラーも出ない
            pipe.WaitConnectionAsync();

            myManager = new ExternalAppManager();
            LoadSettings.LoadFromTextTest <ExternalAppManager>("settings.txt", myManager);

            gaze = new GazedPoint(200, 300);

            VideoDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);
            AudioDevices = EncoderDevices.FindDevices(EncoderDeviceType.Audio);
        }
Ejemplo n.º 30
0
        public MainWindow()
        {
            InitializeComponent();

            this.DataContext = this;

            window1         = new Window1();
            window1.Closed += (s, e) => this.Close();
            window1.Show();

            this.Closed += (s, e) => window1.Close();

            rect.ContextMenu = new ContextMenu();

            rect.ContextMenu.Opened += (s, e) =>
            {
                var VideoDevices = EncoderDevices.FindDevices(EncoderDeviceType.Video);

                rect.ContextMenu.Items.Clear();

                foreach (var device in VideoDevices)
                {
                    var menuItem = new MenuItem
                    {
                        Header = device.Name
                    };
                    menuItem.Click += (s1, e1) =>
                    {
                        WebcamViewer.VideoDevice = device;
                        try
                        {
                            WebcamViewer.StartPreview();
                        }
                        catch (Microsoft.Expression.Encoder.SystemErrorException ex)
                        {
                            MessageBox.Show("Device is in use by another application");
                        }
                    };
                    rect.ContextMenu.Items.Add(menuItem);
                }
            };
        }