我需要捕获视频并每隔xxx分钟将其保存到硬盘驱动器。它将是win-service,它总是捕获和保存。会有几个摄像头,所以我认为每个摄像头使用处理线程。因此,如果我决定使用Thread而不是timer,我应该在保存操作之前使用Thread.Sleep。在我看来,这不是一个好习惯。
所以问题是我的设计(每个摄像头的线程)适合我的情况?计时器怎么样? 谢谢,安德鲁
答案 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?
请注意,您可能希望预先分配大块数据以避免磁盘碎片。将多个流媒体视频存储到磁盘上可能真的会碎片化,然后观看/复制/修改视频会非常慢。