编写一些.Net代码来录制屏幕和音频(来自计算机麦克风),然后输出到wmv文件是否容易?任何参考代码?
BTW:我搜索了WME SDK中的所有代码,没有这样的示例代码。
谢谢! 乔治
答案 0 :(得分:2)
微软和内容mafi ^ H ^ H ^ H ^ Hindustry正在尽力使这个变得不可能。与浏览任何官方提供的文档/示例代码相比,您将更好地搜索“开源屏幕音频捕获” - 如果Microsoft提供任何相关内容,我会非常惊讶。
答案 1 :(得分:1)
查看SDK that's available for Techsmith Camtasia:
Camtasia是一款全屏桌面录制应用程序,支持各种视频和音频源,编解码器等,他们的SDK将其公开为ActiveX控件(您可以非常愉快地从.NET调用)。
答案 2 :(得分:1)
有用于屏幕捕获的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接口才能执行此操作。
答案 3 :(得分:0)
您最好的选择是将Windows媒体编码器库作为.net应用程序中的com接口导入,并在您的应用程序中使用它。
答案 4 :(得分:0)
是的,这对WME来说是完全可行的: http://www.c-sharpcorner.com/UploadFile/armoghanasif/CaptureDesktopActivities11122005013755AM/CaptureDesktopActivities.aspx
我过去已经完成了这项工作,一旦您开始调整编码设置,就可以获得质量非常好的视频。特别是如果WMV是一个可行的选择。如果不是,您必须使用其他应用程序重新编码为其他格式。
我发现调整的最简单方法是使用WME桌面应用程序来测试和记录不同的设置,并保存这些配置文件,我稍后从我的应用程序中以编程方式加载。
答案 5 :(得分:0)
您可以使用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();
}
}