использование Windows Media Encoder для записи экрана - PullRequest
1 голос
/ 01 мая 2009

Легко ли написать код .Net для записи экрана и звука (с микрофона компьютера), а затем вывести его в файл wmv. Любой ссылочный код?

Кстати: я искал все коды из WME SDK, такого примера кода нет.

спасибо! Джордж

Ответы [ 6 ]

2 голосов
/ 01 мая 2009

Microsoft и мафиозный контент ^ H ^ H ^ H ^ Индустрия изо всех сил старается сделать это невозможным. Вам будет гораздо удобнее искать «захват звука экрана с открытым исходным кодом», чем просматривать любую официально предоставленную документацию / пример кода - я был бы очень удивлен, если бы Microsoft предоставила что-нибудь уместное.

1 голос
/ 01 мая 2009

Существуют DirectShow-совместимые фильтры для захвата экрана. Что позволит вам использовать любую программу записи для захвата содержимого экрана или самостоятельно написать приложение в .NET (но это не легко).

Я использую: http://www.hmelyoff.com/index.php?section=9

РЕДАКТИРОВАТЬ: У меня нет образца или опыта работы с WME SDK. Но я бы порекомендовал пойти по маршруту DirectShow, чтобы избежать необходимости наличия WME в хост-системе, отсутствия его поддержки и просто полезно знать DirectShow (или сделать это самостоятельно), а не какой-нибудь случайный API.

Чтобы использовать фильтр Hmelyoff, он работает так же, как веб-камера. Это просто еще один источник видеозахвата, доступный любому приложению, которое хочет вводить видео. Он работает, просто копируя часть буфера viedo в его выходной контакт на каждом кадре (используя функцию API, такую ​​как BitBlt).

Пример кода: здесь .

Или, если вы хотите просто подключиться к DirectShow, самый простой способ - использовать библиотеку для взаимодействия с COM. http://directshownet.sourceforge.net/ хороший.

Снова отредактируйте: Захват в качестве видео аналогичен захвату кадров. Он просто захватывает кадры 30 раз в секунду. Процессор боров? Не ожидайте получения полной частоты кадров.

Если вы спрашиваете, как сохранить кадры как видео, то вам нужно будет передать данные в видеокодер. Для этого вам потребуется интерфейс DirectShow.

1 голос
/ 01 мая 2009

Проверьте SDK, который доступен для Techsmith Camtasia :

Camtasia - это полноэкранное приложение для записи на рабочем столе с поддержкой различных видео и аудио источников, кодеков и т. Д., И их SDK представляет это как элемент управления ActiveX (который вы можете легко вызывать из .NET).

0 голосов
/ 15 ноября 2016

Вы можете использовать Microsoft Expression Encoder 4 как для записи видео, так и аудио. Это просто работает для меня с C #. Следующий код должен быть знаком.

void Encode(string jobPath)
    {
        using (Job j = new Job())
        {

            MediaItem mediaItem = new MediaItem(jobPath);
            var size = mediaItem.OriginalVideoSize;
            WindowsMediaOutputFormat WMV_Format = new WindowsMediaOutputFormat();
            WMV_Format.VideoProfile = new Microsoft.Expression.Encoder.Profiles.AdvancedVC1VideoProfile();
            WMV_Format.AudioProfile = new Microsoft.Expression.Encoder.Profiles.WmaAudioProfile();
            WMV_Format.VideoProfile.AspectRatio = new System.Windows.Size(16, 9);
            WMV_Format.VideoProfile.AutoFit = true;

            if (size.Width >= 1920 && size.Height >= 1080)
            {
                WMV_Format.VideoProfile.Size = new System.Drawing.Size(1920, 1080);
                WMV_Format.VideoProfile.Bitrate = new Microsoft.Expression.Encoder.Profiles.VariableUnconstrainedBitrate(6000);
            }
            else if (size.Width >= 1280 && size.Height >= 720)
            {
                WMV_Format.VideoProfile.Size = new System.Drawing.Size(1280, 720);
                WMV_Format.VideoProfile.Bitrate = new Microsoft.Expression.Encoder.Profiles.VariableUnconstrainedBitrate(4000);
            }
            else
            {
                WMV_Format.VideoProfile.Size = new System.Drawing.Size(size.Width, size.Height);
                WMV_Format.VideoProfile.Bitrate = new Microsoft.Expression.Encoder.Profiles.VariableUnconstrainedBitrate(2000);
            }
            mediaItem.VideoResizeMode = VideoResizeMode.Letterbox;
            mediaItem.OutputFormat = WMV_Format;
            j.MediaItems.Add(mediaItem);
            j.CreateSubfolder = false;
            j.OutputDirectory = @"D:\output";
            j.EncodeProgress += new EventHandler<EncodeProgressEventArgs>(j_EncodeProgress);
            j.Encode();
        }
    }
0 голосов
/ 03 ноября 2012

Да, это вполне выполнимо с WME: http://www.c -sharpcorner.com / UploadFile / armoghanasif / CaptureDesktopActivities11122005013755AM / CaptureDesktopActivities.aspx

Я делал это в прошлом, и вы можете получить видео очень хорошего качества, как только начнете изменять настройки кодирования. Особенно, если WMV является жизнеспособным вариантом для вас. Если нет, вам придется перекодировать в другой формат, используя другое приложение.

Самым простым способом, который я нашел для настройки, было использование настольного приложения WME для тестирования и записи с различными настройками, а также сохранение тех файлов конфигурации, которые я позже загрузил программно из своего приложения.

0 голосов
/ 25 апреля 2011

Лучше всего будет импортировать библиотеки кодировщика Windows Media в качестве com-интерфейса в ваше приложение .net и использовать его в своем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...