private void InitMediaSettings()
        {
            screenCaptureDeviceDescr = new ScreenCaptureDevice
            {
                Resolution   = new Size(1920, 1080),
                CaptureMouse = true,
                AspectRatio  = true,
                CaptureType  = VideoCaptureType.DXGIDeskDupl,
                UseHardware  = true,
                Fps          = 30,
            };

            videoEncoderSettings = new VideoEncoderSettings
            {
                Resolution  = new Size(1920, 1080),
                Encoder     = VideoEncoderMode.H264,
                Profile     = H264Profile.Main,
                BitrateMode = BitrateControlMode.CBR,
                Bitrate     = 2500,
                MaxBitrate  = 5000,
                FrameRate   = 30,
                LowLatency  = true,
            };

            videoSettings = new VideoStreamSettings
            {
                Enabled            = true,
                SessionId          = "video_" + Guid.NewGuid().ToString(),
                NetworkParams      = new NetworkSettings(),
                CaptureDescription = null,
                EncodingParams     = videoEncoderSettings,
            };

            audioEncoderSettings = new AudioEncoderSettings
            {
                SampleRate = 8000,
                Channels   = 1,
                Encoding   = "PCMU",
            };

            audioSettings = new AudioStreamSettings
            {
                Enabled        = true,
                SessionId      = "audio_" + Guid.NewGuid().ToString(),
                NetworkParams  = new NetworkSettings(),
                CaptureParams  = new AudioCaptureSettings(),
                EncodingParams = audioEncoderSettings,
            };
        }
        private void SetupVideoStream(VideoStreamSettings settings)
        {
            logger.Debug("SetupVideoStream(...)");

            try
            {
                videoStreamer = new VideoStreamer(videoSource);

                videoStreamer.Setup(settings.EncodingParams, settings.NetworkParams);
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                if (videoStreamer != null)
                {
                    videoStreamer.Close();
                    videoStreamer = null;
                }

                throw;
            }
        }
        private void SetupVideoSource(VideoStreamSettings settings)
        {
            logger.Debug("SetupVideoSource(...)");

            try
            {
                var captureDescr = settings.CaptureDescription;
                captureDescr.Resolution = videoSettings.EncodingParams.Resolution;

                if (captureDescr.CaptureMode == CaptureMode.CaptDevice)
                {
                    videoSource = new VideoCaptureSource();
                    videoSource.Setup(captureDescr);
                }
                else if (captureDescr.CaptureMode == CaptureMode.Screen)
                {
                    videoSource = new ScreenSource();
                    videoSource.Setup(captureDescr);
                }

                videoSource.CaptureStarted += VideoSource_CaptureStarted;
                videoSource.CaptureStopped += VideoSource_CaptureStopped;
            }
            catch (Exception ex)
            {
                logger.Error(ex);

                if (videoSource != null)
                {
                    videoSource.CaptureStarted -= VideoSource_CaptureStarted;
                    videoSource.CaptureStopped -= VideoSource_CaptureStopped;

                    videoSource.Close();
                    videoSource = null;
                }

                throw;
            }
        }
        private void SetVideoChannelInfo(VideoStreamSettings settings)
        {
            var videoEncoderPars = settings.EncodingParams;

            VideoChannelInfo videoInfo = new VideoChannelInfo
            {
                Id           = settings.SessionId,
                VideoEncoder = videoEncoderPars.Encoder,
                Resolution   = videoEncoderPars.Resolution,
                Bitrate      = videoEncoderPars.Bitrate,

                Fps = videoEncoderPars.FrameRate,
            };

            var address        = settings.NetworkParams.RemoteAddr;
            var port           = settings.NetworkParams.RemotePort;
            var _transportMode = settings.NetworkParams.TransportMode;

            if (_transportMode == TransportMode.Tcp)
            {
                address = settings.NetworkParams.LocalAddr;
                port    = settings.NetworkParams.LocalPort;
            }

            ScreencastChannelInfo videoChannelInfo = new ScreencastChannelInfo
            {
                Address     = address, //videoSettings.Address,
                Port        = port,    // videoSettings.Port,
                Transport   = _transportMode,
                IsMulticast = isMulticastMode,
                MediaInfo   = videoInfo,
                SSRC        = settings.NetworkParams.SSRC,
            };

            ScreencastChannelsInfos.Add(videoChannelInfo);
        }
Exemple #5
0
        public void Setup(VideoStreamSettings settingsParams)
        {
            logger.Debug("Setup(...)");

            this.VideoSettings = settingsParams;

            var captureDevice = VideoSettings.CaptureDevice;

            if (captureDevice == null)
            {
                //...
            }


            LoadEncoderItems();


            UpdateCaptureInfo();


            var encoderSettings = VideoSettings.EncoderSettings;

            var encoderId   = encoderSettings.EncoderId;
            var encoderItem = encoderItems.FirstOrDefault(e => e.Tag != null && ((VideoEncoderDescription)e.Tag).Id == encoderId);

            if (encoderItem == null)
            {
                encoderItem = encoderItems.FirstOrDefault();
            }

            encoderComboBox.SelectedItem = encoderItem;


            this.encWidthNumeric.Maximum = maxWidth;
            this.encWidthNumeric.Minimum = minWidth;

            this.encHeightNumeric.Maximum = maxHeight;
            this.encHeightNumeric.Minimum = minHeight;


            if (captureDevice.CaptureMode == CaptureMode.Screen)
            {
                var screenCaptureDevice = (ScreenCaptureDevice)captureDevice;
                var captureProps        = screenCaptureDevice.Properties;
                // var captureDescr = screenCaptureParams.CaptureDescription;
                displayTextBox.Text = screenCaptureDevice.Name;

                captureRegion = screenCaptureDevice.CaptureRegion;


                //captureMouseCheckBox.Checked = captureProps.CaptureMouse;
                aspectRatioCheckBox.Checked = captureProps.AspectRatio;
                //showDebugInfoCheckBox.Checked = captureProps.ShowDebugInfo;
                //showCaptureBorderCheckBox.Checked = captureProps.ShowDebugBorder;

                if (screenCaptureDevice.DisplayRegion.IsEmpty)
                {
                    displayTextBox.Visible = false;
                    labelDisplay.Visible   = false;
                }

                cameraTableLayoutPanel.Visible        = false;
                screenCaptureTableLayoutPanel.Visible = true;
                captureSettingsButton.Enabled         = true;

                windowsCaptureTLPanel.Visible = false;


                //screenCaptureDetailsPanel.Visible = true;
            }
            else if (captureDevice.CaptureMode == CaptureMode.UvcDevice)
            {
                var uvcDevice = (UvcDevice)captureDevice;

                CaptureDeviceTextBox.Text = uvcDevice.Name;

                var profile = uvcDevice?.CurrentProfile;

                var frameSize = profile.FrameSize;
                var propsStr  = frameSize.Width + "x" + frameSize.Height + ", " + profile.FrameRate + "fps" + ", " + profile.Format;

                var _profile = profile.Name + " (" + propsStr + ")";

                uvcProfileInfotextBox.Text = _profile;

                //List<ComboBoxItem> profileItems = new List<ComboBoxItem>
                //{
                //    new ComboBoxItem
                //    {
                //        Name = profile?.ToString() ?? "",
                //        Tag = profile,
                //    },
                //};

                //CaptureDeviceProfilesComboBox.DataSource = profileItems;
                //CaptureDeviceProfilesComboBox.DisplayMember = "Name";
                //CaptureDeviceProfilesComboBox.ValueMember = "Tag";

                cameraTableLayoutPanel.Visible        = true;
                screenCaptureTableLayoutPanel.Visible = false;
                //screenCaptureDetailsPanel.Visible = false;

                //captureSettingsButton.Enabled = false;

                windowsCaptureTLPanel.Visible = false;
            }
            else if (captureDevice.CaptureMode == CaptureMode.AppWindow)
            {
                cameraTableLayoutPanel.Visible        = false;
                screenCaptureTableLayoutPanel.Visible = false;


                UpdateWindows();

                windowsComboBox.DataSource    = windowsItems;
                windowsComboBox.DisplayMember = "Name";
                windowsComboBox.ValueMember   = "Tag";

                windowsComboBox.SelectedItem  = windowsItems.FirstOrDefault();
                windowsCaptureTLPanel.Visible = true;
            }


            var videoEncoderSettings = VideoSettings.EncoderSettings;
            var encoderResolution    = videoEncoderSettings.Resolution;

            if (encoderResolution.Width <= encWidthNumeric.Maximum && encoderResolution.Width >= encWidthNumeric.Minimum)
            {
                this.encWidthNumeric.Value = encoderResolution.Width;
            }

            if (encoderResolution.Height <= encHeightNumeric.Maximum && encoderResolution.Height >= encHeightNumeric.Minimum)
            {
                this.encHeightNumeric.Value = encoderResolution.Height;
            }

            this.captureRegionTextBox.Text             = captureRegion.ToString();
            this.checkBoxResoulutionFromSource.Checked = VideoSettings.UseEncoderResoulutionFromSource;

            this.encoderComboBox.SelectedItem = videoEncoderSettings.EncoderFormat;
            //this.encProfileComboBox.SelectedItem = videoEncoderSettings.Profile;
            //this.bitrateModeComboBox.SelectedItem = videoEncoderSettings.BitrateMode;
            //this.MaxBitrateNumeric.Value = videoEncoderSettings.MaxBitrate;
            //this.bitrateNumeric.Value = videoEncoderSettings.Bitrate;
            //this.fpsNumeric.Value = videoEncoderSettings.FrameRate;
            //this.latencyModeCheckBox.Checked = videoEncoderSettings.LowLatency;
        }