是否容易編寫一些.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