多线程捕获视频

时间:2010-12-18 22:50:38

标签: c# .net multithreading video

我需要捕获视频并每隔xxx分钟将其保存到硬盘驱动器。它将是win-service,它总是捕获和保存。会有几个摄像头,所以我认为每个摄像头使用处理线程。因此,如果我决定使用Thread而不是timer,我应该在保存操作之前使用Thread.Sleep。在我看来,这不是一个好习惯。

所以问题是我的设计(每个摄像头的线程)适合我的情况?计时器怎么样? 谢谢,安德鲁

3 个答案:

答案 0 :(得分:0)

由于全局互斥(例如,在驱动程序中),您的代码可能会偶尔出现锁定。 另外,例如,您在一个线程中打开输入,将其刷新到某个流,并且您想从其他线程读取它:发生互斥锁定。与计时器相同。考虑到事件驱动的机器在这里很难实现,你仍然可以回退到多个实例..

答案 1 :(得分:0)

您可以在http://www.team-mediaportal.com/

查看开源项目Media Portal的代码

看看他们名为TvEngine3的子项目。

您可以强制它将您的相机绘制为“调谐器”设备,并将其设置为通过api录制。

重点是,他们已经解决了数百个DirectShow问题,而且很多

答案 2 :(得分:0)

我绝对会为每台相机选择一个线程,因为您可能会使用少于20-30个相机。但它可能不是必需的,因为读取相机(通常)是一种非阻塞操作。

在C#上有关于网络摄像头和视频的几个问题。试着看How do I capture video from a webcam?

请注意,您可能希望预先分配大块数据以避免磁盘碎片。将多个流媒体视频存储到磁盘上可能真的会碎片化,然后观看/复制/修改视频会非常慢。