使用Windows Media编码器录制屏幕

写一些.Net代码来logging屏幕和audio(从计算机麦克风),然后输出到wmv文件是很容易的。 任何参考代码?

顺便说一句:我从WME SDKsearch所有的代码,没有这样的示例代码。

谢谢! 乔治

Solutions Collecting From Web of "使用Windows Media编码器录制屏幕"

微软和内容mafi ^ H ^ H ^ H ^ Hindustry正在尽全力使这不可能。 与浏览任何官方提供的文档/示例代码相比,您将更好地搜索“开源屏幕音频捕获” – 如果微软提供了任何相关的信息,我将会非常惊讶。

查看可用于Techsmith Camtasia的SDK :

Camtasia是一个全屏桌面录制应用程序,支持各种视频和音频源,编解码器等,他们的SDK将其作为一个ActiveX控件(您可以从.NET中很愉快地调用)来公开。

有DirectShow兼容的过滤器用于屏幕截图。 这将允许您使用任何录制程序来捕获屏幕内容或自己编写一个应用程序在.NET中(但它并不容易)。

我使用的是: http : //www.hmelyoff.com/index.php?section=9

编辑:我没有WME SDK的示例或经验。 但是我会建议去DirectShow路由,以避免在主机系统上有WME的需求,缺乏对它的支持,而且它只是了解DirectShow(或者自己动手)而不是一些随机的API。

要使用Hmelyoff滤镜,它就像网络摄像头一样工作。 它只是另一个视频采集源可用于任何需要视频输入的应用程序。 它的工作原理是将每个帧的viedo缓冲区的部分拷贝到它的输出引脚(使用像BitBlt这样的API函数)。

一些示例代码在这里 。

或者,如果您只想与DirectShow进行交互,最简单的方法就是使用库为您执行COM交互。 http://directshownet.sourceforge.net/是一个很好的。

再次编辑:捕捉视频与捕捉帧相同。 它只是每秒捕捉帧30次。 CPU猪? 这是,不要指望得到完整的帧率。

如果你问的是如何将帧保存为视频,那么你将需要将数据传递给视频编码器。 您将需要连接到DirectShow来执行此操作。

你最好的选择就是把你的.net应用程序中的Windows媒体编码器库作为一个com接口导入,并在你的应用程序中使用它。

是的,这是完全可以与WME: http ://www.c-sharpcorner.com/UploadFile/armoghanasif/CaptureDesktopActivities11122005013755AM/CaptureDesktopActivities.aspx

我过去做过,一旦开始调整编码设置,就可以得到质量非常好的视频。 特别是如果WMV是一个可行的选择给你。 如果没有,你将不得不重新编码到另一种格式使用另一个应用程序。

我发现调整最简单的方法是使用WME桌面应用程序来测试和记录不同的设置,并保存这些配置文件,我稍后从我的应用程序以编程方式加载。

您可以使用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(); } }