我必须用AForge通过软件实现闭路电视电路。我可以用
private VideoFileWriter FileWriter = new VideoFileWriter();
并写入一个新帧
private void LocalWebCam_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
try
{
Image img = (Bitmap)eventArgs.Frame.Clone();
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Bmp);
ms.Seek(0, SeekOrigin.Begin);
bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
bi.Freeze();
Dispatcher.BeginInvoke(new ThreadStart(delegate
{ frameHolder.Source = bi; }));
FileWriter.WriteVideoFrame(BitmapImage2Bitmap(bi));
}
catch (Exception ex)
{}
}
因此,通过帧添加写入文件是可以的。
因此,为了不填补高清与巨大的文件,我决定,例如,当avi文件达到10 MB,它被分割成一个新的文件
- avi被重命名为2.avi并启动一个新文件
- avi --〉2.avi
那么
1.动画--〉2.动画--〉3.动画
等等。最终当我有1.avi 2.avi... 10.avi 11.avi我会删除11.avi所以总是有10个文件。一个滚动系统。这工作,但不是聪明的所有。
什么将是伟大的,而不是文件分割时,达到一定的大小,我继续添加新的帧在年底,我删除新的帧在开始,使整个avi文件大小不超过一定的大小,我总是有最后几分钟的注册
1条答案
按热度按时间k10s72fa1#
我不确定是否存在这样的功能,但是你可以尝试一种不同的方法,将位图帧存储为缓冲区,并在需要的时候创建一个
VideoFileWriter
。你可以创建一个类来将帧存储为一个
Bitmap
数组,然后在你想要的时候将它作为一个视频。接下来,在程序中创建此类的一个示例
然后,如图所示逐个添加帧
最后,完成后,只需使用以下命令从缓冲区获取准备好的VideoFileWriter(