我想将从网络摄像头捕获的视频保存到本地磁盘。我编写的代码显示了网络摄像头,但它无法保存到本地磁盘中。错误创建压缩流失败。。我该怎么办?
writer = new AVIWriter("wmv3");
writer.FrameRate = 30;
writer.Open("video.avi", Convert.ToInt32(640), Convert.ToInt32(480)); // ERROR İS HERE **Failed creating compressed stream.**
//Create NewFrame event handler
//(This one triggers every time a new frame/image is captured
videoSource.NewFrame += new AForge.Video.NewFrameEventHandler(videoSource_NewFrame);
//Start recording
videoSource.Start();
}
}
void videoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
//Cast the frame as Bitmap object and don't forget to use ".Clone()" otherwise
//you'll probably get access violation exceptions
pictureBoxVideo.BackgroundImage = (Bitmap)eventArgs.Frame.Clone();
writer.AddFrame((Bitmap)eventArgs.Frame.Clone());
}
答案 0 :(得分:0)
您是否考虑过网络摄像头流的大小?我也遇到同样的问题。我知道您将视频大小设置为640和480,但来自网络摄像头的视频流大小(我猜)将永远不会相同。我还猜你把你的容器如picturebox或imagebox设置为640和480,但这并不意味着视频流是相同的。我使用savedialog来检查网络摄像头出来的视频流,然后猜猜是什么?大小将是(648,486)。谁会设置这么奇怪的数字集?但我将我的代码设置为:
writer.Open(" video.avi",Convert.ToInt32(648),Convert.ToInt32(486));
它工作正常!
我不知道你的其余代码是否正确,但我确定我的错误是在大小的集合中:)
答案 1 :(得分:0)
四年后,我遇到了同样的问题。几个小时后,我想出了是否没有为编解码器指定wmv3
并将其空白writer = new AVIWriter();
留空,那么一切正常。
AVIWriter write = new AVIWriter();
write.Open("newTestVideo.avi", Convert.ToInt32(320), Convert.ToInt32(240));
Bitmap bit = new Bitmap(320, 240);
for (int tt = 0; tt < 240; tt++) {
bit.SetPixel(tt, tt, System.Drawing.Color.FromArgb((int)(UnityEngine.Random.value * 255f), (int)(UnityEngine.Random.value * 255f), (int)(UnityEngine.Random.value * 255f)));
write.AddFrame(bit);
}
write.Close();