DirectX.Capture 类库(一捕获视频和音频到AVI文件的 .NET类库)
2010-03-31 12:05
337 查看
原文及代码附件地址:http://www.dingos.cn/index.php?topic=418.0
介绍
这篇文章主要描述在
.NET 环境下如何捕获视频和音频。此类库的主要特点如下:
列出且选择硬件设备
设置基本的音频和视频参数(如:帧速、大小)
支持音频和视频编码
支持视频预览
支持电视接收
支持混音
检索设备性能
显示驱动的属性页面
包含帮助文档
代码示例
此Capture类是这个类库的核心。下面为一个简单的例子:
// Remember to add a reference to DirectX.Capture.dll
using DirectX.Capture
// Capture using the first video
// and audio devices available
Capture capture = new Capture( Filters.VideoInputDevices[0], Filters.AudioInputDevices[0]);
// Start capturing
capture.Start();
// Stop capturing
capture.Stop();
记得在你的项目中添加一DirectX.Capture.dll的引用。此DLL需要DShowNET.dll,所以必须确认此两个DLL都在同一个目录下。一旦你添加了此引用,Visual Studio .NET 将为你管理此DLL的一个拷贝。
此例子将采用系统的第一个视频和音频设备来采集视频和声音。若要单单只采集视频,只需要在构造函数的第二个参数传递null即可。
类初始化后,默认的捕获目标文件夹为Windows的temp文件夹中一个临时的文件,若要存储到不同的文件,在捕获前只要设置Capture.Filename属性即可。
第二个例子
这个例子描述如何改变视频和音频的设置。像Capture.FrameRate和Capture.AudioSampleSize属性允许你通过程序调节捕获功能。Capture.VideoCaps和Capture.AudioCaps会告诉你这些属性的有效值。
Capture capture = new Capture( Filters.VideoInputDevices[0], Filters.AudioInputDevices[1]);
capture.VideoCompressor = Filters.VideoCompressors[0];
capture.AudioCompressor = Filters.AudioCompressors[0];
capture.FrameRate = 29.997; // NTSC
capture.FrameSize = new Size( 640, 480 ); // 640x480
capture.AudioSamplingRate = 44100; // 44.1 kHz
capture.AudioSampleSize = 16; // 16-bit
capture.AudioChannels = 1; // Mono
capture.Filename = "C:/MyVideo.avi";
capture.Start();
...
capture.Stop();
上面的例子也描述如何使用视频和音频编码器。在多数情况下,你会使用编码器的。未编码的视频会每分钟轻松的消耗掉1GB的磁盘空间。只要可能,尽早设置Capture.VideoCompressor和Capture.AudioCompressor属性。因为改变这些属性的值会导致大部分的属性重置成默认值。
幕后
这个项目使用100% DirectShow 来捕获视频。一旦捕获开始,DirectShow 自己会产生另外的线程来处理所有的视频和音频数据。意思即是说你可以用 C 来捕获相同速率和品质的视频和音频数据。
DirectShow 是一系列COM组件,我们用 .NET 托管来使用。这个工作已经由 NETMaster 编写的DShowNET 项目完成了。这个 Capture 类库在使用 DShowNET 作为托管层的基础上,只是增加了一些扩展。这就是早些时候谈及的 DShowNET.dll
上面的所有设置就是 Capture 类库。DirectShow 应用程序的核心就是 Filter Graph 和 Filter Graph管理器。具体可见MSDN上的The Filter Graph and Its Components。
可能的最少编程量
这个类库总是试着用尽可能的最少的编程量。问题是:DirectShow是非常复杂的,对驱动程序开发者来说几乎没有固定的标准,且我也只有有限的硬件来测试。结果是,此类不能避免兼容性的问题。
一个例子就是视频预览。你可以用下面的例子开开始和停止:
// Start preview
capture.PreviewWindow = myPanelControl;
// Stop preview
capture.PreviewWindow = null;
介绍
这篇文章主要描述在
.NET 环境下如何捕获视频和音频。此类库的主要特点如下:
列出且选择硬件设备
设置基本的音频和视频参数(如:帧速、大小)
支持音频和视频编码
支持视频预览
支持电视接收
支持混音
检索设备性能
显示驱动的属性页面
包含帮助文档
代码示例
此Capture类是这个类库的核心。下面为一个简单的例子:
// Remember to add a reference to DirectX.Capture.dll
using DirectX.Capture
// Capture using the first video
// and audio devices available
Capture capture = new Capture( Filters.VideoInputDevices[0], Filters.AudioInputDevices[0]);
// Start capturing
capture.Start();
// Stop capturing
capture.Stop();
记得在你的项目中添加一DirectX.Capture.dll的引用。此DLL需要DShowNET.dll,所以必须确认此两个DLL都在同一个目录下。一旦你添加了此引用,Visual Studio .NET 将为你管理此DLL的一个拷贝。
此例子将采用系统的第一个视频和音频设备来采集视频和声音。若要单单只采集视频,只需要在构造函数的第二个参数传递null即可。
类初始化后,默认的捕获目标文件夹为Windows的temp文件夹中一个临时的文件,若要存储到不同的文件,在捕获前只要设置Capture.Filename属性即可。
第二个例子
这个例子描述如何改变视频和音频的设置。像Capture.FrameRate和Capture.AudioSampleSize属性允许你通过程序调节捕获功能。Capture.VideoCaps和Capture.AudioCaps会告诉你这些属性的有效值。
Capture capture = new Capture( Filters.VideoInputDevices[0], Filters.AudioInputDevices[1]);
capture.VideoCompressor = Filters.VideoCompressors[0];
capture.AudioCompressor = Filters.AudioCompressors[0];
capture.FrameRate = 29.997; // NTSC
capture.FrameSize = new Size( 640, 480 ); // 640x480
capture.AudioSamplingRate = 44100; // 44.1 kHz
capture.AudioSampleSize = 16; // 16-bit
capture.AudioChannels = 1; // Mono
capture.Filename = "C:/MyVideo.avi";
capture.Start();
...
capture.Stop();
上面的例子也描述如何使用视频和音频编码器。在多数情况下,你会使用编码器的。未编码的视频会每分钟轻松的消耗掉1GB的磁盘空间。只要可能,尽早设置Capture.VideoCompressor和Capture.AudioCompressor属性。因为改变这些属性的值会导致大部分的属性重置成默认值。
幕后
这个项目使用100% DirectShow 来捕获视频。一旦捕获开始,DirectShow 自己会产生另外的线程来处理所有的视频和音频数据。意思即是说你可以用 C 来捕获相同速率和品质的视频和音频数据。
DirectShow 是一系列COM组件,我们用 .NET 托管来使用。这个工作已经由 NETMaster 编写的DShowNET 项目完成了。这个 Capture 类库在使用 DShowNET 作为托管层的基础上,只是增加了一些扩展。这就是早些时候谈及的 DShowNET.dll
上面的所有设置就是 Capture 类库。DirectShow 应用程序的核心就是 Filter Graph 和 Filter Graph管理器。具体可见MSDN上的The Filter Graph and Its Components。
可能的最少编程量
这个类库总是试着用尽可能的最少的编程量。问题是:DirectShow是非常复杂的,对驱动程序开发者来说几乎没有固定的标准,且我也只有有限的硬件来测试。结果是,此类不能避免兼容性的问题。
一个例子就是视频预览。你可以用下面的例子开开始和停止:
// Start preview
capture.PreviewWindow = myPanelControl;
// Stop preview
capture.PreviewWindow = null;
相关文章推荐
- .net中捕获摄像头视频的方式及对比(How to Capture Camera Video via .Net)
- 与众不同 windows phone (41) - 8.0 相机和照片: 通过 AudioVideoCaptureDevice 捕获视频和音频
- 使用DirectX.Capture.dll和DShowNET.dll捕获视频程序
- 与众不同 windows phone (41) - 8.0 相机和照片: 通过 AudioVideoCaptureDevice 捕获视频和音频
- 使用DirectX.Capture.dll和DShowNET.dll捕获视频程序
- 使用DirectX.Capture.dll和DShowNET.dll捕获视频程序
- .net中捕获摄像头视频的方式及对比(How to Capture Camera Video via .Net)
- .net中捕获摄像头视频的方式及对比(How to Capture Camera Video via(转)
- 实时播放视频、音频、或者avi文件
- 使用DirectX.Capture.dll和DShowNET.dll捕获视频程序
- 使用DIRECTX.CAPTURE.DLL和DSHOWNET.DLL捕获视频程序
- .net中捕获摄像头视频的方式及对比(How to Capture Camera Video via .Net)
- .net简单录音和播放音频文件,不用DirectX ,对于C/S 、B/S都适用
- 使用DirectX.Capture.dll和DShowNET.dll捕获视频程序
- .net简单录音和播放音频文件,不用DirectX ,对于C/S 、B/S都适用
- .net中捕获摄像头视频的方式及对比(How to Capture Camera Video via .Net)
- [转贴].net中上传视频并将各种视频文件转换成.flv格式
- 2.3 写入AVI视频文件
- Windows Media Player播放AVI视频文件时,只有声音,没有图像,问题解决
- 视频、音频编码中如何手动计算码率、文件体积?