Use Video Quality Profiles - C#
Screen Capturing SDK sample in C# demonstrating ‘Use Video Quality Profiles’
Form1.Designer.cs
namespace ScreenCapture
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this._txtOutputFile = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this._numWidth = new System.Windows.Forms.NumericUpDown();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this._numHeight = new System.Windows.Forms.NumericUpDown();
this.label4 = new System.Windows.Forms.Label();
this._numFramerate = new System.Windows.Forms.NumericUpDown();
this._cmbQuality = new System.Windows.Forms.ComboBox();
this.label5 = new System.Windows.Forms.Label();
this._lblBitrate = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this._numEncodingThreads = new System.Windows.Forms.NumericUpDown();
this._btnScreenCapture = new System.Windows.Forms.Button();
this._btnPauseScreenCapture = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this._numWidth)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this._numHeight)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this._numFramerate)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this._numEncodingThreads)).BeginInit();
this.SuspendLayout();
//
// _txtOutputFile
//
this._txtOutputFile.Location = new System.Drawing.Point(16, 31);
this._txtOutputFile.Margin = new System.Windows.Forms.Padding(4);
this._txtOutputFile.Name = "_txtOutputFile";
this._txtOutputFile.Size = new System.Drawing.Size(300, 22);
this._txtOutputFile.TabIndex = 0;
this._txtOutputFile.Text = "output.wmv";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(17, 7);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(73, 17);
this.label1.TabIndex = 1;
this.label1.Text = "Output file";
//
// _numWidth
//
this._numWidth.Increment = new decimal(new int[] {
2,
0,
0,
0});
this._numWidth.Location = new System.Drawing.Point(16, 96);
this._numWidth.Margin = new System.Windows.Forms.Padding(4);
this._numWidth.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this._numWidth.Name = "_numWidth";
this._numWidth.Size = new System.Drawing.Size(160, 22);
this._numWidth.TabIndex = 2;
this._numWidth.Value = new decimal(new int[] {
1024,
0,
0,
0});
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(16, 76);
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(44, 17);
this.label2.TabIndex = 3;
this.label2.Text = "Width";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(184, 76);
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(49, 17);
this.label3.TabIndex = 5;
this.label3.Text = "Height";
//
// _numHeight
//
this._numHeight.Increment = new decimal(new int[] {
2,
0,
0,
0});
this._numHeight.Location = new System.Drawing.Point(184, 96);
this._numHeight.Margin = new System.Windows.Forms.Padding(4);
this._numHeight.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this._numHeight.Name = "_numHeight";
this._numHeight.Size = new System.Drawing.Size(160, 22);
this._numHeight.TabIndex = 4;
this._numHeight.Value = new decimal(new int[] {
768,
0,
0,
0});
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(352, 76);
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(73, 17);
this.label4.TabIndex = 7;
this.label4.Text = "Framerate";
//
// _numFramerate
//
this._numFramerate.DecimalPlaces = 2;
this._numFramerate.Increment = new decimal(new int[] {
2,
0,
0,
0});
this._numFramerate.Location = new System.Drawing.Point(352, 96);
this._numFramerate.Margin = new System.Windows.Forms.Padding(4);
this._numFramerate.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this._numFramerate.Name = "_numFramerate";
this._numFramerate.Size = new System.Drawing.Size(160, 22);
this._numFramerate.TabIndex = 6;
this._numFramerate.ThousandsSeparator = true;
this._numFramerate.Value = new decimal(new int[] {
20,
0,
0,
0});
//
// _cmbQuality
//
this._cmbQuality.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this._cmbQuality.FormattingEnabled = true;
this._cmbQuality.Location = new System.Drawing.Point(520, 96);
this._cmbQuality.Margin = new System.Windows.Forms.Padding(4);
this._cmbQuality.Name = "_cmbQuality";
this._cmbQuality.Size = new System.Drawing.Size(240, 24);
this._cmbQuality.TabIndex = 8;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(516, 76);
this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(52, 17);
this.label5.TabIndex = 9;
this.label5.Text = "Quality";
//
// _lblBitrate
//
this._lblBitrate.Location = new System.Drawing.Point(352, 145);
this._lblBitrate.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this._lblBitrate.Name = "_lblBitrate";
this._lblBitrate.Size = new System.Drawing.Size(408, 51);
this._lblBitrate.TabIndex = 11;
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(17, 145);
this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(192, 17);
this.label6.TabIndex = 15;
this.label6.Text = "Number of encoding threads:";
//
// _numEncodingThreads
//
this._numEncodingThreads.Increment = new decimal(new int[] {
2,
0,
0,
0});
this._numEncodingThreads.Location = new System.Drawing.Point(217, 142);
this._numEncodingThreads.Margin = new System.Windows.Forms.Padding(4);
this._numEncodingThreads.Maximum = new decimal(new int[] {
16,
0,
0,
0});
this._numEncodingThreads.Name = "_numEncodingThreads";
this._numEncodingThreads.Size = new System.Drawing.Size(127, 22);
this._numEncodingThreads.TabIndex = 14;
this._numEncodingThreads.Value = new decimal(new int[] {
3,
0,
0,
0});
//
// _btnScreenCapture
//
this._btnScreenCapture.Location = new System.Drawing.Point(19, 200);
this._btnScreenCapture.Margin = new System.Windows.Forms.Padding(4);
this._btnScreenCapture.Name = "_btnScreenCapture";
this._btnScreenCapture.Size = new System.Drawing.Size(163, 28);
this._btnScreenCapture.TabIndex = 16;
this._btnScreenCapture.Text = "Screen capture video";
this._btnScreenCapture.UseVisualStyleBackColor = true;
this._btnScreenCapture.Click += new System.EventHandler(this._btnScreenCapture_Click);
//
// _btnPauseScreenCapture
//
this._btnPauseScreenCapture.Location = new System.Drawing.Point(205, 200);
this._btnPauseScreenCapture.Margin = new System.Windows.Forms.Padding(4);
this._btnPauseScreenCapture.Name = "_btnPauseScreenCapture";
this._btnPauseScreenCapture.Size = new System.Drawing.Size(163, 28);
this._btnPauseScreenCapture.TabIndex = 19;
this._btnPauseScreenCapture.Text = "Pause Screen Capture";
this._btnPauseScreenCapture.UseVisualStyleBackColor = true;
this._btnPauseScreenCapture.Visible = false;
this._btnPauseScreenCapture.Click += new System.EventHandler(this._btnPauseScreenCapture_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(779, 241);
this.Controls.Add(this._btnPauseScreenCapture);
this.Controls.Add(this._btnScreenCapture);
this.Controls.Add(this.label6);
this.Controls.Add(this._numEncodingThreads);
this.Controls.Add(this._lblBitrate);
this.Controls.Add(this.label5);
this.Controls.Add(this._cmbQuality);
this.Controls.Add(this.label4);
this.Controls.Add(this._numFramerate);
this.Controls.Add(this.label3);
this.Controls.Add(this._numHeight);
this.Controls.Add(this.label2);
this.Controls.Add(this._numWidth);
this.Controls.Add(this.label1);
this.Controls.Add(this._txtOutputFile);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.Margin = new System.Windows.Forms.Padding(4);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form1";
this.Text = "Screen Capture Video";
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this._numWidth)).EndInit();
((System.ComponentModel.ISupportInitialize)(this._numHeight)).EndInit();
((System.ComponentModel.ISupportInitialize)(this._numFramerate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this._numEncodingThreads)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox _txtOutputFile;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.NumericUpDown _numWidth;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.NumericUpDown _numHeight;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.NumericUpDown _numFramerate;
private System.Windows.Forms.ComboBox _cmbQuality;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label _lblBitrate;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.NumericUpDown _numEncodingThreads;
private System.Windows.Forms.Button _btnScreenCapture;
private System.Windows.Forms.Button _btnPauseScreenCapture;
}
}
Form1.cs
using BytescoutScreenCapturingLib;
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace ScreenCapture
{
public partial class Form1 : Form
{
#region Fields
private BytescoutScreenCapturingLib.Capturer _capturer;
private bool _converting = false;
private bool _paused = false;
#endregion
public Form1()
{
InitializeComponent();
}
/// <summary>
/// Form Load Event Hanlde
/// </summary>
private void Form1_Load(object sender, EventArgs e)
{
try
{
_cmbQuality.DataSource = Enum.GetValues(typeof(VideoQualityProfileType));
_cmbQuality.SelectedIndex = 0;
_capturer = new BytescoutScreenCapturingLib.Capturer();
_capturer.RegistrationName = "demo";
_capturer.RegistrationKey = "demo";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// Handle screen capture button click
/// </summary>
private void _btnScreenCapture_Click(object sender, EventArgs e)
{
try
{
if (_converting)
{
if (_capturer.IsRunning)
{
_capturer.Stop();
}
StopCapturer();
_btnPauseScreenCapture.Visible = false;
}
else
{
_capturer.OutputWidth = (int)_numWidth.Value;
_capturer.OutputHeight = (int)_numHeight.Value;
_capturer.FPS = (float)_numFramerate.Value;
_capturer.SetVideoQualityProfile((BytescoutScreenCapturingLib.VideoQualityProfileType)_cmbQuality.SelectedItem);
_lblBitrate.Text = string.Format("Bitrate: {0}[kbps], Wmv Quality: {1}, MinQuantizer: {2}, MaxQuantizer: {3}",
_capturer.WMVVideoBitrate / 1000, _capturer.WmvVideoQuality,
_capturer.WebmMinQuantizer, _capturer.WebmMaxQuantizer);
_capturer.AnimateMouseClicks = true;
_capturer.AnimateMouseButtons = true;
_capturer.CapturingType = BytescoutScreenCapturingLib.CaptureAreaType.catScreen;
_capturer.OutputFileName = _txtOutputFile.Text;
_capturer.EncoderThreadsCount = (int)_numEncodingThreads.Value;
_capturer.AudioEnabled = false;
_capturer.Run();
_converting = true;
_btnScreenCapture.Text = "Stop screen capture";
_btnPauseScreenCapture.Visible = true;
_paused = false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// Pause screen capture
/// </summary>
private void _btnPauseScreenCapture_Click(object sender, EventArgs e)
{
if (_paused)
{
_capturer.Run();
_btnPauseScreenCapture.Text = "Pause Screen Capture";
_paused = false;
}
else
{
_capturer.Pause();
_btnPauseScreenCapture.Text = "Resume Screen Capture";
_paused = true;
}
}
/// <summary>
/// Stop Capture
/// </summary>
private void StopCapturer()
{
_converting = false;
_btnScreenCapture.Text = "Screen capture video";
// Open captured video
Process.Start(_txtOutputFile.Text);
}
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace ScreenCapture
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}