Улучшенное приложение для записи видео рабочего стола в .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 все пути к недавним записям будут добавлены в файл для последующей загрузки.

Инструкция по использованию приложения

  1. Запустите приложение, затем щелкните пункт Start Recording, чтобы начать запись действий на рабочем столе.
  2. Если вы хотите начать трансляцию записи (сделать ее доступной для просмотра другим пользователям), перейдите в меню Broadcast и нажмите пункт Enable Broadcast, а затем задайте номер порта для трансляции. Для трансляции используется протокол HTTP. Так трансляция не будет блокирована брандмауэрами. Затем начинайте запись. Таким образом вы можете одновременно записывать свои действия и транслировать их.
  3. Если вы хотите добавить в свою запись аудиодорожку, перейдите к пункту Enter Audio File Path и задайте имя аудиофайла и путь к нему. Затем начинайте запись. Таким образом вы можете одновременно записывать свои действия и аудиокомментарий к ним.
  4. Когда необходимо закончить запись, щелкните Stop Recording. Во всплывающем окне отобразится диалог сохранения записи, где необходимо указать имя файла.
  5. Чтобы проиграть записи, перейдите к пункту Recent Recordings и выберите необходимое имя файла.
  6. Если вы хотите просмотреть трансляцию рабочего стола, перейдите в меню Options и выберите пункт Set URL of the Broadcast (например, http://10.100.1.100:8000) и нажмите "Ввод". Начнется трансляция .
  7. На панели состояния вы можете просмотреть длительность записи, а также число пользователей, просматривающих трансляцию.

Наконец я добавил код для улучшения пользовательского интерфейса приложения. В итоге на выходе получается следующее.

Данное приложение можно совершенствовать, улучшая пользовательский интерфейс, качество трансляций и т.д.

С помощью данного приложения можно записывать все действия на рабочем столе. Я прилагаю код-источник для справочного использования. Я надеюсь, этот код станет полезным всем.