예제 #1
0
        void StartRecord()
        {
            job = new ScreenCaptureJob();
            System.Drawing.Size WorkingArea = SystemInformation.WorkingArea.Size;
            Rectangle           captureRect = new Rectangle(0, 0, WorkingArea.Width, WorkingArea.Height);

            job.CaptureRectangle = captureRect;

            job.ShowFlashingBoundary = false;
            job.ShowCountdown        = false;
            job.CaptureMouseCursor   = false;
            job.OutputPath           = @"C:\Users\Public\Videos";
            job.ScreenCaptureVideoProfile.Quality = 95;
            var audioDevices = Microsoft.Expression.Encoder.Devices.EncoderDevices.FindDevices(Microsoft.Expression.Encoder.Devices.EncoderDeviceType.Audio);

            job.AddAudioDeviceSource(audioDevices.ElementAt(1));
            Microsoft.Expression.Encoder.Profiles.ConstantBitrate b = new Microsoft.Expression.Encoder.Profiles.ConstantBitrate(135000);
            job.ScreenCaptureVideoProfile.Bitrate   = b;
            job.ScreenCaptureVideoProfile.FrameRate = 25.0;
            job.Start();
        }
        private void InitializeScreenCaptureJob()
        {
            // **************************************************
            System.Windows.Forms.Screen screen =
                System.Windows.Forms.Screen.AllScreens[0];

            int width  = (int)(screen.Bounds.Width * ScreenScalingFactor);
            int height = (int)(screen.Bounds.Height * ScreenScalingFactor);

            System.Drawing.Rectangle captureRectangle =
                new System.Drawing.Rectangle(x: 0, y: 0, width: width, height: height);
            // **************************************************

            ScreenCaptureJob =
                new Microsoft.Expression.Encoder.ScreenCapture.ScreenCaptureJob();

            // **************************************************
            var audioDeviceSources =
                Microsoft.Expression.Encoder.Devices.EncoderDevices
                .FindDevices(Microsoft.Expression.Encoder.Devices.EncoderDeviceType.Audio);

            foreach (var currentAudioDeviceSource in audioDeviceSources)
            {
                string message =
                    $"Name: { currentAudioDeviceSource.Name }\r\nCategory: { currentAudioDeviceSource.Category }\r\n Device Path: { currentAudioDeviceSource.DevicePath }";

                //System.Windows.Forms.MessageBox.Show(message);

                if (string.Compare(currentAudioDeviceSource.Category.ToString(), "Capture", ignoreCase: true) == 0)
                {
                    ScreenCaptureJob.AddAudioDeviceSource(source: currentAudioDeviceSource);
                }
            }
            // **************************************************

            // Default Value: [false]
            ScreenCaptureJob.CaptureFollowCursor = false;

            // Default Value: [false]
            ScreenCaptureJob.CaptureLargeMouseCursor = false;

            // Default Value: [true]
            ScreenCaptureJob.CaptureLayeredWindow = true;

            // Default Value: [true]
            ScreenCaptureJob.CaptureMouseCursor = true;

            ScreenCaptureJob.CaptureRectangle = captureRectangle;

            System.TimeSpan maxDuration =
                new System.TimeSpan(hours: 2, minutes: 0, seconds: 0);

            // Default Value: [00:00:00] - Seconds
            //screenCaptureJob.Duration = maxDuration;

            ScreenCaptureJob.OutputError +=
                ScreenCaptureJob_OutputError;

            //screenCaptureJob.OutputPath = ""; // Default: [""]

            string pathName =
                $"D:\\_TEMP\\CAPTURE_{ System.DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") }.mp4";

            ScreenCaptureJob.OutputScreenCaptureFileName = pathName;             // Default: [null]

            // Default Value: [192]
            Microsoft.Expression.Encoder.Profiles.Bitrate
                audioBitrate = new Microsoft.Expression.Encoder.Profiles.ConstantBitrate(bitrate: 192);

            // Default Value: [30000]
            Microsoft.Expression.Encoder.Profiles.Bitrate
                videoBitrate = new Microsoft.Expression.Encoder.Profiles.ConstantBitrate(bitrate: 30000);

            ScreenCaptureJob.ScreenCaptureAudioProfile.Bitrate = audioBitrate;

            // Default Value: [16]
            ScreenCaptureJob.ScreenCaptureAudioProfile.BitsPerSample = 16;

            // Default Value: [2]
            ScreenCaptureJob.ScreenCaptureAudioProfile.Channels = 2;

            // Default Value: [Wma]
            ScreenCaptureJob.ScreenCaptureAudioProfile.Codec =
                Microsoft.Expression.Encoder.Profiles.AudioCodec.Wma;

            bool isValid =
                ScreenCaptureJob.ScreenCaptureAudioProfile.IsValid;

            // Default: [48000]
            ScreenCaptureJob.ScreenCaptureAudioProfile.SamplesPerSecond = 48000;

            ScreenCaptureJob.ScreenCaptureCommandFinished +=
                ScreenCaptureJob_ScreenCaptureCommandFinished;

            string pathNameTemp =
                ScreenCaptureJob.ScreenCaptureFileName;

            ScreenCaptureJob.ScreenCaptureFinished +=
                ScreenCaptureJob_ScreenCaptureFinished;

            ScreenCaptureJob.ScreenCaptureStart +=
                ScreenCaptureJob_ScreenCaptureStart;

            // Default Value: []
            //screenCaptureJob.ScreenCaptureVideoProfile.AspectRatio = null;

            // Default Value: [true]
            ScreenCaptureJob.ScreenCaptureVideoProfile.AutoFit = true;

            ScreenCaptureJob.ScreenCaptureVideoProfile.Bitrate = videoBitrate;

            var currentVideoCodec =
                ScreenCaptureJob.ScreenCaptureVideoProfile.Codec;

            // Default Value: [false]
            ScreenCaptureJob.ScreenCaptureVideoProfile.Force16Pixels = true;

            // Default Value: [15]
            ScreenCaptureJob.ScreenCaptureVideoProfile.FrameRate = 15;

            // Default Value: [00:00:06] (Seconds)
            System.TimeSpan keyFrameDistance =
                new System.TimeSpan(hours: 0, minutes: 0, seconds: 6);

            ScreenCaptureJob.ScreenCaptureVideoProfile.KeyFrameDistance = keyFrameDistance;

            // Default Value: [0]
            ScreenCaptureJob.ScreenCaptureVideoProfile.NumberOfEncoderThreads = 0;

            // Default Value: [95]
            ScreenCaptureJob.ScreenCaptureVideoProfile.Quality = 95;

            // Default Value: [true]
            ScreenCaptureJob.ScreenCaptureVideoProfile.SeparateFilesPerStream = true;

            //System.Drawing.Size size =
            //	new System.Drawing.Size(width: screen.Bounds.Width, height: screen.Bounds.Height);

            System.Drawing.Size size =
                new System.Drawing.Size(width: 320, height: 240);

            ScreenCaptureJob.ScreenCaptureVideoProfile.Size = size;

            // Default Value: [false]
            ScreenCaptureJob.ScreenCaptureVideoProfile.SmoothStreaming = false;

            // Default Value: [false]
            ScreenCaptureJob.ShowCountdown = true;

            // Default Value: [true]
            ScreenCaptureJob.ShowFlashingBoundary = false;

            //screenCaptureJob.VideoDeviceSource

            ScreenCaptureJob.WebcamError +=
                ScreenCaptureJob_WebcamError;

            //ScreenCaptureJob.WebcamFileName
            //ScreenCaptureJob.WebcamVideoProfile
        }