是否容易编写一些.Net代码来记录屏幕和音频(从计算机话筒),然后输出到wmv文件。任何参考代码?使用Windows Media编码器记录屏幕
顺便说一句:我搜索了WME SDK的所有代码,没有这样的代码。
谢谢! George
是否容易编写一些.Net代码来记录屏幕和音频(从计算机话筒),然后输出到wmv文件。任何参考代码?使用Windows Media编码器记录屏幕
顺便说一句:我搜索了WME SDK的所有代码,没有这样的代码。
谢谢! George
微软和内容mafi^H^H^H^Hindustry正在尽最大努力使这不可能。与浏览任何官方提供的文档/示例代码相比,您将更好地搜索“开源屏幕音频捕获” - 如果微软提供了任何相关的信息,我将会非常惊讶。
时退房SDK that's available for Techsmith Camtasia:
的Camtasia是各种视频及音频信号源,编解码器等支持全屏桌面应用程序记录,他们的SDK,暴露出作为ActiveX控件(你可以调用从.NET很开心)。
@Dylan,我找不到任何SDK文档或下载从Camtasia的网站链接你能找出 – George2 2009-05-01 12:02:11
我道歉 - ?看来他们的SDK已经停产( http://www.techsmith.com/sdk.asp) 对不起。 – 2009-05-04 10:13:41
有DirectShow兼容的过滤器用于屏幕截图。这将允许您使用任何录制程序来捕获屏幕内容或使用.NET自行编写应用程序(但这并不容易)。
我使用的一个是: http://www.hmelyoff.com/index.php?section=9
编辑:我有没有样品或经验的WME SDK。但我建议使用DirectShow路由来避免在主机系统上使用WME,缺乏对它的支持,以及只需了解DirectShow(或自己动手)而不是一些随机API。
要使用Hmelyoff滤镜,它就像网络摄像头一样工作。它的另一个视频捕获源可用于任何需要视频输入的应用程序。它的工作方式是将每个帧的viedo缓冲区的部分复制到它的输出引脚(使用像BitBlt这样的API函数)。
一些示例代码是here。
或者,如果您只想与DirectShow接口,最简单的方法是使用库为您执行COM交互。 http://directshownet.sourceforge.net/是一个很好的。
再次编辑:捕捉视频与捕捉帧相同。它每秒捕获帧30次。 CPU猪?这是,不要指望得到完整的帧率。
如果你问的是如何将帧保存为视频,那么你将需要将数据传递给视频编码器。您需要连接到DirectShow才能执行此操作。
@Nick,我会花一些时间来学习hmelyoff,我也想在同一时间来研究微软内置的解决方案。:-)其实我读了WME SDK文档,它提到它通过.Net代码支持屏幕捕获功能。但是我找不到任何样本代码,您是否有任何相关的源代码可供参考? – George2 2009-05-01 12:13:50
另一个问题,我需要15分钟来研究hmelyoff,但我没有找到它描述的概念/ hmelyoff的架构和快速启动样本任何启动文件。我找到的所有示例代码和API的列表,对于初学者来说都不太好。你有任何这样的文件引用我阅读? :-) – George2 2009-05-01 12:19:20
@Nick,谢谢你的评论。我的要求是不能捕捉屏幕为静态图像,但拍摄视频(我想捕获所有的Windows /鼠标的移动,以显示如何使用一些软件的一些演示)。我阅读CodeGuru文档,它似乎将捕获屏幕视为静态图像,而不是捕获视频? – George2 2009-05-01 13:26:19
最好的办法是将.net媒体编码器库导入到.net应用程序的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();
}
}
将代码添加到您的答案中是否值得显示OP如何实现? – Bugs 2016-11-15 11:35:32
http://www.codeproject.com/KB/dialog/screencap.aspx?display=Print提到它反正... – rogerdpack 2010-07-27 21:41:17