Использование Windows Media Encoder для записи экрана
Легко ли написать код.Net для записи экрана и звука (с компьютерного микрофона), а затем вывести в файл wmv. Любой ссылочный код?
Кстати: я искал все коды из WME SDK, такого примера кода нет.
Спасибо! Джордж
6 ответов
Microsoft и контент мафии ^ H ^ H ^ H ^ Hindustry делают все возможное, чтобы сделать это невозможным. Вам будет гораздо удобнее искать "захват аудио экрана с открытым исходным кодом", чем просматривать любую официально предоставленную документацию / пример кода - я был бы очень удивлен, если бы Microsoft предоставила что-нибудь соответствующее.
Проверьте SDK, который доступен для Techsmith Camtasia:
Camtasia - это полноэкранное приложение для записи на рабочем столе с поддержкой различных видео и аудио источников, кодеков и т. Д., И их SDK представляет это как элемент управления ActiveX (который вы можете легко вызвать из.NET).
Существуют 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, чтобы сделать это.
Лучше всего будет импортировать библиотеки кодировщика Windows Media в виде com-интерфейса в ваше приложение.net и использовать его в своем приложении.
Вы можете использовать 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();
}
}
Да, это полностью выполнимо с WME: http://www.c-sharpcorner.com/UploadFile/armoghanasif/CaptureDesktopActivities11122005013755AM/CaptureDesktopActivities.aspx
Я делал это в прошлом, и вы можете получить видео очень хорошего качества, как только начнете изменять настройки кодирования. Особенно, если WMV является жизнеспособным вариантом для вас. Если нет, вам придется перекодировать в другой формат, используя другое приложение.
Самым простым способом, который я нашел для настройки, было использование настольного приложения WME для тестирования и записи с различными настройками, а также сохранение тех файлов конфигурации, которые я позже загрузил программно из своего приложения.