Улучшенное приложение для записи видео рабочего стола в .NET с помощью C# и форм Windows Forms
Автор: Sateesh Arveti
Данное приложение обеспечивает более простой доступ к записи видео рабочего стола, совместное его использование, распространение и т.д.
Сегодня совместное использование рабочего стола или приложений активно используется в ИТ и других сферах деятельности для координации работы. Иногда может понадобиться запись операций, выполняемых на рабочем столе, для дальнейшего использования. Я встречал не так уж много приложений, которые поддерживают запись видео действий на рабочем столе, его совместное использование и распространение. Я предпочел разработать приложение, которое выполняет описанные выше операции более простым способом. И вот я разработал это приложение в VS.NET 2005 с помощью C# и форм Windows Forms. Ниже я привожу описание предоставляемых приложением функций и один пример сценария использования приложения, а также описание его структуры и кода.
Функции приложения
- Запись операций, выполняемых на рабочем столе.
- Просмотр записей с помощью встроенного медиапроигрывателя.
- Просмотр списка недавних записей.
- Встроенная возможность добавить аудио в запись действий на рабочем столе.
- Встроенная возможность распространения записей операций на рабочем столе.
- Встроенная возможность просмотра удаленного рабочего стола.
- Встроенная возможность проигрывать, ставить на паузу и останавливать записи.
- Встроенная возможность проигрывать, ставить на паузу и останавливать запись.
- Встроенная возможность отображать длительность записи и число пользователей, подключенных к трансляции (совместное использование рабочего стола).
- Простой в использовании интерфейс пользователя.
- Теперь запись и распространение видео рабочего стола доступно всего по одному щелчку мыши!
Образец сценария использования приложения
Обычно тестировщики ПО готовят множество документов для каждой ошибки, чтобы объяснить, как ее воспроизвести. Я полагаю, что изображение стоит 1000 слов описания. Так почему тестировщик не может записать видео своих действий вместо того, чтобы писать сложные документы? Около 50 - 60% наших усилий по исправлению ошибки тратятся на анализ, воспроизведение ошибки и получение уточнений от тестировщиков. Лучшим способом экономии усилий станет запись видео с информацией об ошибке и аудиокомментарием. Данное приложение идеально подходит для таких ситуаций. Также данное приложение может пригодиться при анализе функциональности сложных приложений и т.д.
Требования для установки.
Для использования приложения необходим Media Player Encoder 9. Это подключаемый модуль для проигрывателя Windows Media. Его можно загрузить здесь.
Теперь, с помощью C# в VS.NET 2005 создайте новое приложение Windows и назовите его DesktopRecorder.Добавьте в Основную форму (DesktopRecorder) элементы управления, как показано ниже:
Теперь я кратко опишу функциональность некоторых основных элементов управления в приложении:
ContextMenu(cxtRecordingOpts):
Данный элемент управления включает несколько пунктов меню для выполнения следующих операций.
- Start Recording --> начало записи действий на рабочем столе.
- Pause Recording --> приостановка записи действий на рабочем столе.
- Stop Recording --> остановка и сохранение записи действий на рабочем столе.
- Enter Audio File Path --> указание пути к аудиофайлу, который используется при записи в качестве входного сигнала.
- Save Current Recording --> сохранение текущей записи.
- Broadcast --> включение трансляции, для этого необходимо задать номер порта.
- Recent Recordings --> просмотр списка недавних записей.
menuStrip1 (Menu Strip)
Данный элемент управления содержит меню опций со следующими пунктами.
- Open Broadcast URL Recording --> задание URL-адреса трансляции для просмотре в медиапроигрывателе.
- Пункты меню Play (проиграть), Pause (пауза) и Stop (стоп) используются при смене состояния проигрывателя.
- Show Media Player UI --> отображение/скрытие встроенного пользовательского интерфейса медиапроигрывателя.
- Exit --> выход из приложения.
Кроме того, я добавил еще несколько элементов управления для улучшения пользовательского интерфейса и функциональности.
Теперь добавьте ссылку на библиотеку COM dll (WMEncoderLib). Если ссылки нет, доступ к этим библиотекам можно получить из папки bin в приложенном здесь коде. Это позволит получить доступ к функциональности, предоставляемой кодировщиком Windows Media Player Encoder.
Основная функция данного приложения состоит в записи всех действий на рабочем столе в формате wmv на будущее, а также предоставлении возможности просматривать запись в реальном времени.
Теперь я объясню аспекты, которая относятся к коду данного приложения.
При щелчке мышью по пункту Start Recording --> Here будет создан экземпляр кодировщика медиапроигрывателя с возможностью определить такие его свойства, как аудио и видеопараметры на входе, путь к трансляции и т. д.
Наконец, будет запущен кодировщик для начала записи. Позже я более подробно остановлюсь на функциональности данного события. Вот ядро приложения.
IWMEncProfile SelProfile;
IWMEncSource AudioSrc;
try
{
if (DesktopEncoder != null)
{
//Checks Whether Encoder in is paused state or not.If it paused, it //will just starts it and returns.
if (DesktopEncoder.RunState == MENC_ENCODER_STATE.WMENC_ENCODER_PAUSED)
{
DesktopEncoder.Start();
return;
}
}
#region Default settings for Encoder.
DesktopEncoderAppln = new WMEncoderApp();
DesktopEncoder = DesktopEncoderAppln.Encoder;
IWMEncSourceGroupCollection SrcGroupCollection = DesktopEncoder.SourceGroupCollection;
IWMEncSourceGroup SrcGroup = SrcGroupCollection.Add("SG_1");
IWMEncVideoSource2 VideoSrc = (IWMEncVideoSource2)SrcGroup.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);
#endregion
//Set Audio Source,if Add Audio Checkbox is checked.
if (addAudio.Checked)
{
AudioSrc = SrcGroup.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);
if (txtAudioFile.Text.Trim() != "")
{
if (File.Exists(txtAudioFile.Text.Trim()))
{
//Set audio file path to be used while encoding or recording.
AudioSrc.SetInput(txtAudioFile.Text.Trim(), "", "");
}
else
{
//Set to use Default audio device as input,if file does not exist.
AudioSrc.SetInput("Default_Audio_Device", "Device", "");
}
}
else
{
AudioSrc.SetInput("Default_Audio_Device", "Device", "");
}
}
//Set Video Source:Desktop.
VideoSrc.SetInput("ScreenCapture1", "ScreenCap", "");
IWMEncProfileCollection ProfileCollection = DesktopEncoder.ProfileCollection;
ProfileCollection = DesktopEncoder.ProfileCollection;
int lLength = ProfileCollection.Count;
//Set Profile.
if (toolstripEnableBroadcast.Checked && txtPortNbr.Text.Trim() != "")
{
IWMEncBroadcast broadcast = DesktopEncoder.Broadcast;
broadcast.set_PortNumber(WMENC_BROADCAST_PROTOCOL.WMENC_PROTOCOL_HTTP, Convert.ToInt32(txtPortNbr.Text.Trim()));
for (int i = 0; i <= lLength - 1; i++)
{
SelProfile = ProfileCollection.Item(i);
//Set selected profile as Windows Media Video 8 for Local Area //Network,if broadcasting is enabled.
if (SelProfile.Name == "Windows Media Video 8 for Local Area Network (768 Kbps)")
{
SrcGroup.set_Profile((IWMEncProfile)SelProfile);
break;
}
}
}
else
{
for (int i = 0; i <= lLength - 1; i++)
{
SelProfile = ProfileCollection.Item(i);
if (SelProfile.Name == "Screen Video/Audio High (CBR)")
{
SrcGroup.set_Profile((IWMEncProfile)SelProfile);
break;
}
}
}
//Local File to Store Recording temporarily.
IWMEncFile inputFile = DesktopEncoder.File;
inputFile.LocalFileName = "C:\\TempRecording.wmv";
DesktopEncoder.PrepareToEncode(true);
DesktopEncoder.Start();
tmrRcCounter.Enabled = true;
recordStarttime = DateTime.Now;
if (toolstripEnableBroadcast.Checked && txtPortNbr.Text.Trim() != "")
{
//Start Timer to Count Viewers connected to Broadcast.if broadcasting is enabled.
tmrViewerCount.Enabled = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
При щелчке по пункту Stop Recording --> Here работа кодировщика будет прекращена и запись остановится. Затем будет отображено всплывающее окно с диалогом, где будет предложено сохранить запись в файл. Путь к файлу, в котором сохранена запись, будет добавлен в меню Recent Recordings (последние записи).
При нажатии Exit (закрытие приложения) --> Here все пути к недавним записям будут добавлены в файл для последующей загрузки.
Инструкция по использованию приложения
- Запустите приложение, затем щелкните пункт Start Recording, чтобы начать запись действий на рабочем столе.
- Если вы хотите начать трансляцию записи (сделать ее доступной для просмотра другим пользователям), перейдите в меню Broadcast и нажмите пункт Enable Broadcast, а затем задайте номер порта для трансляции. Для трансляции используется протокол HTTP. Так трансляция не будет блокирована брандмауэрами. Затем начинайте запись. Таким образом вы можете одновременно записывать свои действия и транслировать их.
- Если вы хотите добавить в свою запись аудиодорожку, перейдите к пункту Enter Audio File Path и задайте имя аудиофайла и путь к нему. Затем начинайте запись. Таким образом вы можете одновременно записывать свои действия и аудиокомментарий к ним.
- Когда необходимо закончить запись, щелкните Stop Recording. Во всплывающем окне отобразится диалог сохранения записи, где необходимо указать имя файла.
- Чтобы проиграть записи, перейдите к пункту Recent Recordings и выберите необходимое имя файла.
- Если вы хотите просмотреть трансляцию рабочего стола, перейдите в меню Options и выберите пункт Set URL of the Broadcast (например, http://10.100.1.100:8000) и нажмите "Ввод". Начнется трансляция .
- На панели состояния вы можете просмотреть длительность записи, а также число пользователей, просматривающих трансляцию.
Наконец я добавил код для улучшения пользовательского интерфейса приложения. В итоге на выходе получается следующее.
Данное приложение можно совершенствовать, улучшая пользовательский интерфейс, качество трансляций и т.д.
С помощью данного приложения можно записывать все действия на рабочем столе. Я прилагаю код-источник для справочного использования. Я надеюсь, этот код станет полезным всем.